GSI Object Oriented Online Offline (Go4)  GO4-6.3.0
TGo4Task.h
Go to the documentation of this file.
1 // $Id$
2 //-----------------------------------------------------------------------
3 // The GSI Online Offline Object Oriented (Go4) Project
4 // Experiment Data Processing at EE department, GSI
5 //-----------------------------------------------------------------------
6 // Copyright (C) 2000- GSI Helmholtzzentrum fuer Schwerionenforschung GmbH
7 // Planckstr. 1, 64291 Darmstadt, Germany
8 // Contact: http://go4.gsi.de
9 //-----------------------------------------------------------------------
10 // This software can be used under the license agreements as stated
11 // in Go4License.txt file which is part of the distribution.
12 //-----------------------------------------------------------------------
13 
14 #ifndef TGO4TASK_H
15 #define TGO4TASK_H
16 
17 #include "TGo4ThreadManager.h"
18 #include "TGo4CommandReceiver.h"
19 #include "Go4EmergencyCommands.h"
20 #include "TString.h"
21 
22 class TMutex;
23 class TGo4TaskOwner;
24 class TGo4Slave;
25 class TGo4Master;
26 class TGo4BufferQueue;
27 class TGo4ObjectQueue;
28 class TGo4TaskHandler;
31 class TGo4Command;
32 class TGo4Status;
33 class TGo4TaskStatus;
34 
36 
37 public:
38  friend class TGo4LocalCommandRunnable; // access to command queue
39  friend class TGo4Slave; // access to UpdateStatus
40  friend class TGo4TaskOwner; // set workisstopped flag
41 
42  TGo4Task(const char *name, Bool_t blockingmode,
43  Bool_t autostart = kFALSE,
44  Bool_t autocreate = kTRUE,
45  Bool_t ismaster = kFALSE);
46 
47  virtual ~TGo4Task();
48 
53  virtual void Start();
54 
59  virtual void Stop();
60 
66  virtual void Quit();
67 
73  virtual void KillMain();
74 
80  virtual void RestartMain();
81 
82  void Terminate (Bool_t termapp=kTRUE) override;
83 
85  void TerminateFast() override;
86 
91  virtual void ExecuteString(const char *command);
92 
93  Bool_t IsMaster() const { return fbCommandMaster; }
94 
97  void SetOwner(TGo4TaskOwner* owner);
98 
99  virtual TGo4TaskHandler *GetTaskHandler() { return nullptr; }
100 
101  virtual TGo4BufferQueue *GetCommandQueue(const char *task = nullptr) { return nullptr; }
102 
103  virtual TGo4BufferQueue *GetStatusQueue(const char *task = nullptr) { return nullptr; }
104 
105  virtual TGo4BufferQueue *GetDataQueue(const char *task = nullptr) { return nullptr; }
106 
112  void AddUserCommand(TGo4Command *com);
113 
119 
126  TGo4Status *NextStatus(Bool_t wait = kTRUE);
127 
134  TObject *NextObject(Bool_t wait = kTRUE);
135 
137  virtual TGo4Command *NextCommand();
138 
142  void SendObject(TObject *obj, const char *receiver = nullptr);
143 
147  virtual void SendStatus(TGo4Status *stat, const char *receiver = nullptr);
148 
150  virtual void SendStatusBuffer();
151 
155 
162  void SendStatusMessage(Int_t level, Bool_t printout, const char *text, ...)
163  #if defined(__GNUC__) && !defined(__CINT__)
164  __attribute__((format(printf, 4, 5)))
165  #endif
166  ;
167 
174  void UpdateStatusBuffer();
175 
180  Int_t Initialization() override;
181 
188  virtual TGo4TaskStatus *CreateStatus();
189 
193  Bool_t SubmitCommand(const char *name);
194 
199 
204  Bool_t SubmitEmergencyData(Go4EmergencyCommand_t val, const char *receiver = nullptr);
205 
206 
209  Bool_t SubmitLocalCommand(TGo4Command *com);
210 
213  Bool_t SubmitCommand(TGo4Command *com);
214 
219  TGo4Command *MakeCommand(const char *name);
220 
229  void WakeCommandQueue(Int_t id = 0);
230 
237  virtual Int_t StartWorkThreads();
238 
244  virtual Int_t StopWorkThreads();
245 
246  Bool_t IsWorkStopped() const { return fbWorkIsStopped; }
247 
253  virtual void GetStatus();
254 
255  const char *GetCommanderName() const { return fxCommanderName.Data(); }
256 
257  TGo4Master* GetMaster() const { return fxMaster; }
258 
259  TGo4Slave* GetSlave() const { return fxSlave; }
260 
268  void SendStopBuffers(const char *taskname = nullptr);
269 
272  TBuffer *GetAbortBuffer(){return fxAbortBuffer;}
273 
274  static Int_t Get_fgiTERMID();
275 
276  protected:
277 
280 
283 
290  virtual void UpdateStatus(TGo4TaskStatus *state);
291 
293 
294  void SetMaster(Bool_t on = kTRUE) { fbCommandMaster = on; }
295 
296  void SetWorkIsStopped(Bool_t on) { fbWorkIsStopped = on; }
297 
299  TMutex *fxStatusMutex{nullptr};
300 
302  TBuffer *fxStatusBuffer{nullptr};
303 
304  private:
305 
306  void SetMaster(TGo4Master* m);
307 
308  void SetSlave(TGo4Slave* s);
309 
312 
315 
319  Bool_t fbCommandMaster{kFALSE};
320 
323 
325  TGo4Master *fxMaster{nullptr};
326 
328  TGo4Slave *fxSlave{nullptr};
329 
332 
334  Bool_t fbWorkIsStopped{kFALSE};
335 
337  TBuffer *fxStopBuffer{nullptr};
338 
340  TBuffer *fxQuitBuffer{nullptr};
341 
343  TBuffer *fxAbortBuffer{nullptr};
344 
346  static const Int_t fgiTERMID;
347 
348  ClassDefOverride(TGo4Task,1)
349 };
350 
351 #endif //TGO4TASK_H
virtual void UpdateStatus(TGo4TaskStatus *state)
Definition: TGo4Task.cxx:393
virtual void ExecuteString(const char *command)
Definition: TGo4Task.cxx:146
Go4EmergencyCommand_t
virtual Int_t StartWorkThreads()
Definition: TGo4Task.cxx:548
TBuffer * fxAbortBuffer
Definition: TGo4Task.h:343
TGo4Command * MakeCommand(const char *name)
Definition: TGo4Task.cxx:502
virtual void Stop()
Definition: TGo4Task.cxx:110
Bool_t SubmitLocalCommand(TGo4Command *com)
Definition: TGo4Task.cxx:508
TGo4Master * fxMaster
Definition: TGo4Task.h:325
void WakeCommandQueue(Int_t id=0)
Definition: TGo4Task.cxx:522
void SetSlave(TGo4Slave *s)
Definition: TGo4Task.cxx:92
Bool_t IsWorkStopped() const
Definition: TGo4Task.h:246
void SetWorkIsStopped(Bool_t on)
Definition: TGo4Task.h:296
virtual ~TGo4Task()
Definition: TGo4Task.cxx:71
virtual TGo4Command * NextCommand()
Definition: TGo4Task.cxx:325
void SendObject(TObject *obj, const char *receiver=nullptr)
Definition: TGo4Task.cxx:222
TGo4TaskOwner * fxOwner
Definition: TGo4Task.h:331
TGo4ObjectQueue * fxLocalCommandQueue
Definition: TGo4Task.h:314
Bool_t SubmitEmergencyData(Go4EmergencyCommand_t val, const char *receiver=nullptr)
Definition: TGo4Task.cxx:455
TGo4TaskHandlerCommandList * fxCommandPrototype
Definition: TGo4Task.h:311
TBuffer * fxStopBuffer
Definition: TGo4Task.h:337
void SendStopBuffers(const char *taskname=nullptr)
Definition: TGo4Task.cxx:560
TBuffer * fxQuitBuffer
Definition: TGo4Task.h:340
TGo4ObjectQueue * GetLocalCommandQueue()
Definition: TGo4Task.h:292
void Terminate(Bool_t termapp=kTRUE) override
Definition: TGo4Task.cxx:130
virtual TGo4TaskHandler * GetTaskHandler()
Definition: TGo4Task.h:99
void TerminateFast() override
Definition: TGo4Task.cxx:138
virtual void RestartMain()
Definition: TGo4Task.cxx:125
TGo4Slave * fxSlave
Definition: TGo4Task.h:328
Int_t Initialization() override
Definition: TGo4Task.cxx:362
virtual Int_t StopWorkThreads()
Definition: TGo4Task.cxx:554
static const Int_t fgiTERMID
Definition: TGo4Task.h:346
virtual void SendStatus(TGo4Status *stat, const char *receiver=nullptr)
Definition: TGo4Task.cxx:246
virtual void SendStatusBuffer()
Definition: TGo4Task.cxx:263
virtual void GetStatus()
Definition: TGo4Task.cxx:536
virtual TGo4BufferQueue * GetDataQueue(const char *task=nullptr)
Definition: TGo4Task.h:105
Bool_t SubmitCommand(const char *name)
Definition: TGo4Task.cxx:409
Bool_t fbWorkIsStopped
Definition: TGo4Task.h:334
TMutex * fxStatusMutex
Definition: TGo4Task.h:299
Bool_t SubmitEmergencyCommand(Go4EmergencyCommand_t val)
Definition: TGo4Task.cxx:433
TMutex * GetStatusBufferMutex()
Definition: TGo4Task.h:154
void SetOwner(TGo4TaskOwner *owner)
Definition: TGo4Task.cxx:98
void AddUserCommandList(TGo4CommandProtoList *comlist)
Definition: TGo4Task.cxx:211
TGo4Slave * GetSlave() const
Definition: TGo4Task.h:259
virtual TGo4TaskHandlerCommandList * CreateCommandList()
Definition: TGo4Task.cxx:497
TGo4Task(const char *name, Bool_t blockingmode, Bool_t autostart=kFALSE, Bool_t autocreate=kTRUE, Bool_t ismaster=kFALSE)
Definition: TGo4Task.cxx:39
virtual TGo4BufferQueue * GetStatusQueue(const char *task=nullptr)
Definition: TGo4Task.h:103
TString fxCommanderName
Definition: TGo4Task.h:322
TBuffer * fxStatusBuffer
Definition: TGo4Task.h:302
void SendStatusMessage(Int_t level, Bool_t printout, const char *text,...)
Definition: TGo4Task.cxx:272
void SetMaster(Bool_t on=kTRUE)
Definition: TGo4Task.h:294
TObject * NextObject(Bool_t wait=kTRUE)
Definition: TGo4Task.cxx:189
Bool_t fbCommandMaster
Definition: TGo4Task.h:319
virtual TGo4BufferQueue * GetCommandQueue(const char *task=nullptr)
Definition: TGo4Task.h:101
void AddUserCommand(TGo4Command *com)
Definition: TGo4Task.cxx:206
Bool_t IsMaster() const
Definition: TGo4Task.h:93
virtual TGo4TaskStatus * CreateStatus()
Definition: TGo4Task.cxx:402
void UpdateStatusBuffer()
Definition: TGo4Task.cxx:308
virtual void KillMain()
Definition: TGo4Task.cxx:120
virtual void Start()
Definition: TGo4Task.cxx:105
TGo4TaskHandlerCommandList * GetPrototype()
Definition: TGo4Task.cxx:154
virtual void Quit()
Definition: TGo4Task.cxx:115
const char * GetCommanderName() const
Definition: TGo4Task.h:255
TGo4Status * NextStatus(Bool_t wait=kTRUE)
Definition: TGo4Task.cxx:160
static Int_t Get_fgiTERMID()
Definition: TGo4Task.cxx:588
TBuffer * GetAbortBuffer()
Definition: TGo4Task.h:272
TGo4Master * GetMaster() const
Definition: TGo4Task.h:257