GSI Object Oriented Online Offline (Go4) GO4-6.4.0
Loading...
Searching...
No Matches
TGo4TaskOwner.cxx
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#include "TGo4TaskOwner.h"
15
16#include <iostream>
17
18#include "TGo4Log.h"
19#include "TGo4ServerTask.h"
20#include "TGo4TaskManager.h"
21#include "TGo4ClientTask.h"
22
23
30
33 fxTask(nullptr),
34 fbServerMode(isserver)
35{
36}
37
39{
40 if(fxTask)
41 fxTask->SetOwner(nullptr); // avoid the task to delete us again in dtor
42 delete fxTask;
43 fxTask = nullptr;
44}
45
46const char *TGo4TaskOwner::GetName() const
47{
48 return fxTask ? fxTask->GetName() : nullptr;
49}
50
51void TGo4TaskOwner::SetTask(TGo4Task* task, Bool_t delold)
52{
53 if(delold) delete fxTask;
54 fxTask = task;
55 if(fxTask) fxTask->SetOwner(this);
56}
57
59{
60 fxTask->Quit();
61}
62
64{
65 TGo4Log::Debug(" Task Owner: default StartWorkThreads() ");
66 fxTask->SetWorkIsStopped(kFALSE);
67 return 0;
68}
69
71{
72 TGo4Log::Debug(" Task Owner: default StopWorkThreads() ");
73 fxTask->SetWorkIsStopped(kTRUE);
74 return 0;
75}
76
78{
79 if(IsServer()) {
80 TGo4ServerTask *server = dynamic_cast<TGo4ServerTask *>(GetTask());
81 if(!server) {
82 std::cerr <<"NEVER COME HERE: servermode without servertask in taskowner "<< GetName() << std::endl;
83 return kFALSE;
84 }
85 return server->GetCurrentTaskHandler() != nullptr;
86 }
87
88 TGo4ClientTask* client = dynamic_cast<TGo4ClientTask*>(GetTask());
89 if(!client) {
90 std::cerr <<"NEVER COME HERE: clientmode without clienttask in taskowner "<< GetName() << std::endl;
91 return kFALSE;
92 }
93 return client->IsConnected();
94}
95
96
98{
99 return fxTask ? fxTask->IsBeingQuit() : kFALSE;
100}
101
103{
104 if(IsServer()) {
105 TGo4ServerTask *serv = dynamic_cast<TGo4ServerTask *>(GetTask());
106 if(serv) return serv->GetTaskManager()->GetMutex();
107 }
108 return nullptr;
109}
110
This class controls a client application running in a task which is controlled by another server task...
Bool_t IsConnected() const
static void Debug(const char *text,...) GO4_PRINTF_ARGS
User shortcut for message with prio 0.
Definition TGo4Log.cxx:281
TGo4TaskHandler * GetCurrentTaskHandler()
Get task handler of the currently activated client connection.
TGo4TaskManager * GetTaskManager()
virtual Int_t StartWorkThreads()
Start the working threads of the task owner implementation; this method is used after the current con...
Bool_t IsServer() const
virtual Int_t StopWorkThreads()
stop the working threads of the task owne implementation; this method is used before the current conn...
virtual void Quit()
Quit this instance and the owned task; method to be called from command object, may be overridden in ...
TGo4Task * GetTask() const
Bool_t fbServerMode
Flag if master uses servertask or client task connection.
friend class TGo4Task
friend class TGo4ServerTask
void SetTask(TGo4Task *task, Bool_t delold=kTRUE)
virtual ~TGo4TaskOwner()
Bool_t IsConnected()
Bool_t IsBeingQuit()
TGo4Task * fxTask
aggregation 1 1
TMutex * GetTaskManagerMutex()
Access to taskmanager mutex; to be locked outside main mutex.
const char * GetName() const