21 #include "TBufferFile.h" 24 #include "TGo4LockGuard.h" 44 fbCommandMaster(ismaster), fxMaster(nullptr), fxSlave(nullptr), fxOwner(nullptr),
45 fbWorkIsStopped(kFALSE), fxStopBuffer(nullptr), fxQuitBuffer(nullptr)
64 TString nomen(
"LocalCommandRunnable of "); nomen+=name;
101 SetMaster(dynamic_cast<TGo4Master*>(owner));
102 SetSlave(dynamic_cast<TGo4Slave*>(owner));
151 gROOT->ProcessLineSync(command);
164 TObject *obj =
nullptr;
169 if (!wait && statqueue->
IsEmpty())
173 if (obj->InheritsFrom(TGo4Status::Class())) {
176 TGo4Log::Debug(
" !!! Master Task: NextStatus ERROR, unknown object %s from status queue!!! ",
181 TGo4Log::Debug(
" !!! Master Task NextStatus ERROR -- NULL object from data queue!!! ");
193 TObject *obj =
nullptr;
196 if (!wait && dataqueue->
IsEmpty())
236 TGo4Log::Debug(
" !!! Task - ERROR sending object - no data queue !!! ");
256 TGo4Log::Debug(
" !!! Task - ERROR sending status: no status queue !!! ");
279 va_start(args, text);
280 vsnprintf(txtbuf, lbuflen, text, args);
285 TString receiver = txtbuf;
286 Ssiz_t pos = receiver.Index(
"::",2,0,TString::kExact);
289 receiver.Resize(pos);
290 dest = receiver.Data();
291 curs += ((size_t) pos);
300 if((level > 0) && go4mess) {
313 TFile *filsav = gFile;
329 if(!comq)
return nullptr;
339 if(obj->InheritsFrom(TGo4Command::Class()))
378 TGo4Log::Debug(
" Task -- command list is created from Master factory");
383 TGo4Log::Debug(
" Task -- command list is created from Task factory");
411 if(!strcmp(name,
"THEMQuit"))
415 else if (!strcmp(name,
"THEMKill"))
419 else if (!strcmp(name,
"THEMRestart"))
478 if (!com)
return kFALSE;
510 if(!com)
return kFALSE;
530 com =
new TGo4Command(
"dummy",
"this wakes up queue",
id);
538 TGo4Log::Debug(
" Task ''%s'' Send Status to Command Master ",GetName());
virtual void UpdateStatus(TGo4TaskStatus *state)
virtual Int_t Initialization()
virtual Int_t Initialization()
virtual void ExecuteString(const char *command)
virtual void Terminate(Bool_t termapp=kTRUE)
virtual Int_t StartWorkThreads()
virtual void TerminateFast()
void AddObject(TObject *object, Bool_t clone=kFALSE)
TGo4Command * MakeCommand(const char *name)
Bool_t SubmitLocalCommand(TGo4Command *com)
virtual TGo4TaskStatus * CreateStatus()
TObject * WaitObjectFromBuffer()
void WakeCommandQueue(Int_t id=0)
void SetSlave(TGo4Slave *s)
static void SetCommandList(TGo4CommandProtoList *list)
static void UnRegister(TGo4CommandReceiver *p)
friend class TGo4LocalCommandRunnable
virtual TGo4Command * NextCommand()
TGo4ThreadHandler * fxWorkHandler
void SetTaskName(const char *)
virtual void TerminateFast()
void SendObject(TObject *obj, const char *receiver=nullptr)
TGo4ObjectQueue * fxLocalCommandQueue
Bool_t SubmitEmergencyData(Go4EmergencyCommand_t val, const char *receiver=nullptr)
TGo4TaskHandlerCommandList * fxCommandPrototype
void SendStopBuffers(const char *taskname=nullptr)
static Bool_t IsOutputEnabled()
TGo4ObjectQueue * GetLocalCommandQueue()
void Terminate(Bool_t termapp=kTRUE) override
virtual TGo4TaskHandler * GetTaskHandler()
static void Register(const char *name, TGo4CommandReceiver *p)
void TerminateFast() override
static void OutputEnable(Bool_t on=kTRUE)
virtual void RestartMain()
Bool_t NewThread(const char *name, TGo4Runnable *runnable)
virtual TGo4TaskHandlerCommandList * CreateCommandList()
virtual void ExecuteString(const char *command)
Int_t Initialization() override
virtual Int_t StopWorkThreads()
int main(int argc, char **argv)
static const Int_t fgiTERMID
virtual Int_t StopWorkThreads()
virtual void SendStatus(TGo4Status *stat, const char *receiver=nullptr)
void SetTaskHandlerStatus(TGo4TaskHandlerStatus *thstate)
virtual void SendStatusBuffer()
static const char * Message(Int_t prio, const char *text,...) GO4_PRINTF2_ARGS
static void Debug(const char *text,...) GO4_PRINTF_ARGS
virtual TGo4BufferQueue * GetDataQueue(const char *task=nullptr)
Bool_t SubmitCommand(const char *name)
static TGo4CommandInvoker * Instance()
Bool_t SubmitEmergencyCommand(Go4EmergencyCommand_t val)
Bool_t IsAborting() const
void AddBuffer(TBuffer *buffer, Bool_t clone=kFALSE)
void SetOwner(TGo4TaskOwner *owner)
void AddUserCommandList(TGo4CommandProtoList *comlist)
virtual TGo4TaskHandlerCommandList * CreateCommandList()
Bool_t Start(const char *thname)
TGo4Task(const char *name, Bool_t blockingmode, Bool_t autostart=kFALSE, Bool_t autocreate=kTRUE, Bool_t ismaster=kFALSE)
virtual TGo4BufferQueue * GetStatusQueue(const char *task=nullptr)
void SendStatusMessage(Int_t level, Bool_t printout, const char *text,...)
void SetMaster(Bool_t on=kTRUE)
virtual TGo4TaskHandlerStatus * CreateStatus()
TObject * NextObject(Bool_t wait=kTRUE)
TGo4ThreadHandler * GetWorkHandler() const
void SetFlags(Bool_t blocking, Bool_t autocreate, Bool_t autostart, Bool_t terminating, Bool_t initdone)
void AddCommand(TGo4Command *com)
virtual TGo4BufferQueue * GetCommandQueue(const char *task=nullptr)
Bool_t MainIsRunning() const
virtual void RestartMain()
void AddUserCommand(TGo4Command *com)
void SetTask(TGo4Task *task, Bool_t delold=kTRUE)
virtual TGo4TaskStatus * CreateStatus()
void UpdateStatusBuffer()
TGo4Command * MakeCommand(const char *name)
TGo4TaskHandlerCommandList * GetPrototype()
const char * GetCommanderName() const
static TBuffer * CreateValueBuffer(UInt_t val)
TGo4Status * NextStatus(Bool_t wait=kTRUE)
static Int_t Get_fgiTERMID()
void SetMode(Go4CommandMode_t m)
void AddBufferFromObject(TObject *object)
virtual Int_t StartWorkThreads()
virtual void Terminate(Bool_t termapp=kTRUE)