Debugger: Add listener interface for TargetHostInterface.
This commit is contained in:
@@ -36,6 +36,7 @@ TeamDebuggerOptions::TeamDebuggerOptions()
|
|||||||
TargetHostInterface::TargetHostInterface()
|
TargetHostInterface::TargetHostInterface()
|
||||||
:
|
:
|
||||||
BLooper(),
|
BLooper(),
|
||||||
|
fListeners(),
|
||||||
fTeamDebuggers(20, false)
|
fTeamDebuggers(20, false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -43,6 +44,10 @@ TargetHostInterface::TargetHostInterface()
|
|||||||
|
|
||||||
TargetHostInterface::~TargetHostInterface()
|
TargetHostInterface::~TargetHostInterface()
|
||||||
{
|
{
|
||||||
|
for (ListenerList::Iterator it = fListeners.GetIterator();
|
||||||
|
Listener* listener = it.Next();) {
|
||||||
|
listener->TargetHostInterfaceQuit(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -124,6 +129,22 @@ TargetHostInterface::RemoveTeamDebugger(TeamDebugger* debugger)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
TargetHostInterface::AddListener(Listener* listener)
|
||||||
|
{
|
||||||
|
AutoLocker<TargetHostInterface> interfaceLocker(this);
|
||||||
|
fListeners.Add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
TargetHostInterface::RemoveListener(Listener* listener)
|
||||||
|
{
|
||||||
|
AutoLocker<TargetHostInterface> interfaceLocker(this);
|
||||||
|
fListeners.Remove(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
TargetHostInterface::Quit()
|
TargetHostInterface::Quit()
|
||||||
{
|
{
|
||||||
@@ -172,6 +193,7 @@ TargetHostInterface::TeamDebuggerStarted(TeamDebugger* debugger)
|
|||||||
{
|
{
|
||||||
AutoLocker<TargetHostInterface> locker(this);
|
AutoLocker<TargetHostInterface> locker(this);
|
||||||
AddTeamDebugger(debugger);
|
AddTeamDebugger(debugger);
|
||||||
|
_NotifyTeamDebuggerStarted(debugger);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -189,9 +211,9 @@ TargetHostInterface::TeamDebuggerQuit(TeamDebugger* debugger)
|
|||||||
{
|
{
|
||||||
AutoLocker<TargetHostInterface> interfaceLocker(this);
|
AutoLocker<TargetHostInterface> interfaceLocker(this);
|
||||||
RemoveTeamDebugger(debugger);
|
RemoveTeamDebugger(debugger);
|
||||||
interfaceLocker.Unlock();
|
|
||||||
|
|
||||||
if (debugger->Thread() >= 0) {
|
if (debugger->Thread() >= 0) {
|
||||||
|
_NotifyTeamDebuggerQuit(debugger);
|
||||||
BMessage message(MSG_TEAM_DEBUGGER_QUIT);
|
BMessage message(MSG_TEAM_DEBUGGER_QUIT);
|
||||||
message.AddInt32("thread", debugger->Thread());
|
message.AddInt32("thread", debugger->Thread());
|
||||||
PostMessage(&message);
|
PostMessage(&message);
|
||||||
@@ -251,6 +273,26 @@ TargetHostInterface::_StartTeamDebugger(team_id teamID,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
TargetHostInterface::_NotifyTeamDebuggerStarted(TeamDebugger* debugger)
|
||||||
|
{
|
||||||
|
for (ListenerList::Iterator it = fListeners.GetIterator();
|
||||||
|
Listener* listener = it.Next();) {
|
||||||
|
listener->TeamDebuggerStarted(debugger);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
TargetHostInterface::_NotifyTeamDebuggerQuit(TeamDebugger* debugger)
|
||||||
|
{
|
||||||
|
for (ListenerList::Iterator it = fListeners.GetIterator();
|
||||||
|
Listener* listener = it.Next();) {
|
||||||
|
listener->TeamDebuggerQuit(debugger);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*static*/ int
|
/*static*/ int
|
||||||
TargetHostInterface::_CompareDebuggers(const TeamDebugger* a,
|
TargetHostInterface::_CompareDebuggers(const TeamDebugger* a,
|
||||||
const TeamDebugger* b)
|
const TeamDebugger* b)
|
||||||
@@ -269,3 +311,30 @@ TargetHostInterface::_FindDebuggerByKey(const team_id* team,
|
|||||||
return 1;
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// #pragma mark - TargetHostInterface::Listener
|
||||||
|
|
||||||
|
|
||||||
|
TargetHostInterface::Listener::~Listener()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
TargetHostInterface::Listener::TeamDebuggerStarted(TeamDebugger* debugger)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
TargetHostInterface::Listener::TeamDebuggerQuit(TeamDebugger* debugger)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
TargetHostInterface::Listener::TargetHostInterfaceQuit(
|
||||||
|
TargetHostInterface* interface)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|||||||
@@ -10,6 +10,8 @@
|
|||||||
|
|
||||||
#include <ObjectList.h>
|
#include <ObjectList.h>
|
||||||
|
|
||||||
|
#include <util/DoublyLinkedList.h>
|
||||||
|
|
||||||
#include "TeamDebugger.h"
|
#include "TeamDebugger.h"
|
||||||
|
|
||||||
|
|
||||||
@@ -17,13 +19,13 @@ class DebuggerInterface;
|
|||||||
class Settings;
|
class Settings;
|
||||||
class SettingsManager;
|
class SettingsManager;
|
||||||
class TargetHost;
|
class TargetHost;
|
||||||
class TeamDebugger;
|
|
||||||
struct TeamDebuggerOptions;
|
struct TeamDebuggerOptions;
|
||||||
class UserInterface;
|
class UserInterface;
|
||||||
|
|
||||||
|
|
||||||
class TargetHostInterface : public BLooper, private TeamDebugger::Listener {
|
class TargetHostInterface : public BLooper, private TeamDebugger::Listener {
|
||||||
public:
|
public:
|
||||||
|
class Listener;
|
||||||
TargetHostInterface();
|
TargetHostInterface();
|
||||||
virtual ~TargetHostInterface();
|
virtual ~TargetHostInterface();
|
||||||
|
|
||||||
@@ -52,6 +54,10 @@ public:
|
|||||||
virtual status_t FindTeamByThread(thread_id thread,
|
virtual status_t FindTeamByThread(thread_id thread,
|
||||||
team_id& _teamID) const = 0;
|
team_id& _teamID) const = 0;
|
||||||
|
|
||||||
|
|
||||||
|
void AddListener(Listener* listener);
|
||||||
|
void RemoveListener(Listener* listener);
|
||||||
|
|
||||||
// BLooper
|
// BLooper
|
||||||
virtual void Quit();
|
virtual void Quit();
|
||||||
virtual void MessageReceived(BMessage* message);
|
virtual void MessageReceived(BMessage* message);
|
||||||
@@ -67,18 +73,37 @@ private:
|
|||||||
status_t _StartTeamDebugger(team_id teamID,
|
status_t _StartTeamDebugger(team_id teamID,
|
||||||
const TeamDebuggerOptions& options,
|
const TeamDebuggerOptions& options,
|
||||||
bool stopInMain);
|
bool stopInMain);
|
||||||
|
|
||||||
|
void _NotifyTeamDebuggerStarted(
|
||||||
|
TeamDebugger* debugger);
|
||||||
|
void _NotifyTeamDebuggerQuit(
|
||||||
|
TeamDebugger* debugger);
|
||||||
|
|
||||||
static int _CompareDebuggers(const TeamDebugger* a,
|
static int _CompareDebuggers(const TeamDebugger* a,
|
||||||
const TeamDebugger* b);
|
const TeamDebugger* b);
|
||||||
static int _FindDebuggerByKey(const team_id* team,
|
static int _FindDebuggerByKey(const team_id* team,
|
||||||
const TeamDebugger* debugger);
|
const TeamDebugger* debugger);
|
||||||
private:
|
private:
|
||||||
|
typedef DoublyLinkedList<Listener> ListenerList;
|
||||||
typedef BObjectList<TeamDebugger> TeamDebuggerList;
|
typedef BObjectList<TeamDebugger> TeamDebuggerList;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
ListenerList fListeners;
|
||||||
TeamDebuggerList fTeamDebuggers;
|
TeamDebuggerList fTeamDebuggers;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class TargetHostInterface::Listener
|
||||||
|
: public DoublyLinkedListLinkImpl<Listener> {
|
||||||
|
public:
|
||||||
|
virtual ~Listener();
|
||||||
|
virtual void TeamDebuggerStarted(TeamDebugger* debugger);
|
||||||
|
virtual void TeamDebuggerQuit(TeamDebugger* debugger);
|
||||||
|
virtual void TargetHostInterfaceQuit(
|
||||||
|
TargetHostInterface* interface);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
struct TeamDebuggerOptions {
|
struct TeamDebuggerOptions {
|
||||||
TeamDebuggerOptions();
|
TeamDebuggerOptions();
|
||||||
int commandLineArgc;
|
int commandLineArgc;
|
||||||
|
|||||||
Reference in New Issue
Block a user