17 #include "TApplication.h" 19 #include "TObjArray.h" 22 #include "TGo4LockGuard.h" 49 UInt_t negotiationport,
55 :
TGo4Task(name,blockingmode, autostart,autocreate,ismaster),
56 fxTaskManager(nullptr),fxCurrentTaskHandler(nullptr),
57 fxConnectTransport(nullptr), fxDisConnectTransport(nullptr),
58 fuConnectPort(0), fbKeepServerSocket(kFALSE),
59 fbConnectRequest(kFALSE), fbDisConnectRequest(kFALSE),
60 fbConnectIsOpen(kFALSE),fbConnectIsDone(kFALSE), fbConnectIsClose(kFALSE),
61 fxConnectorTimer(nullptr)
63 TString nomen(
"TaskManager of "); nomen += name;
66 if(negotiationport!=42)
69 nomen.Form(
"ConnectorRunnable of %s", name);
71 nomen.Form(
"CONNECTOR-%s", name);
104 if(name && strstr(name,
"current"))
111 TGo4Log::Debug(
" ServerTask -- RemoveClient FAILED, no client %s !!! ",
132 TGo4Log::Debug(
" Server Task -- Waiting for client %s disconnection...",taskhandler->GetName());
140 TGo4Log::Debug(
" !!! Server Task -- client remove wait TIMEOUT !!! ");
146 TGo4Log::Debug(
" !!! Server Task -- client remove aborted for TERMINATION MODE !!! ");
152 TGo4Log::Debug(
" Server Task -- waited %d cycles until client was removed. ",removeresult);
161 TGo4Log::Debug(
" !!! Server Task -- removing client %s without waiting... ",
162 taskhandler->GetName());
176 Bool_t reset = kTRUE;
179 names.AddLast(
new TNamed(taskhandler->GetName(),
"title"));
182 while (
auto nomen = niter()) {
198 TGo4Log::Debug(
" Server task -- removing current client %s ", taskhandler->GetName());
210 TGo4Log::Debug(
" TGo4ServerTask ''%s'' ERROR- task manager not existing!!! ", GetName());
234 TGo4Log::Debug(
" ServerTask: FAILED setting current task to %s-- no such client! ", name);
434 if(!name || strstr(name,
"current"))
460 if(!name || strstr(name,
"current"))
474 Bool_t reset = kTRUE;
503 Bool_t reset = kTRUE;
508 TGo4Log::Debug(
" Task - sending status %s to task %s", stat->ClassName(), han->GetName());
509 statq->AddBufferFromObject(stat);
523 TGo4Log::Debug(
" Task - sending status buffer to task %s", han->GetName());
537 const char *host = gSystem->HostName();
540 connector->
Open(host,negotiationport);
556 TGo4Log::Debug(
" ServerTask Quit -- removing all connected clients ");
557 SendStatusMessage(2,kTRUE,
"ServerTask %s is shutting down now! All clients are removed...",GetName());
577 TGo4Log::Debug(
" ServerTask Shutdown without disconnect waiting");
578 SendStatusMessage(2,kTRUE,
"ServerTask %s is shutting down now! All clients are removed...",GetName());
591 slave->
SetTask(
nullptr, kFALSE);
596 gApplication->Terminate();
virtual Bool_t RemoveClient(const char *name, Bool_t clientwait=kTRUE, Bool_t isterminating=kFALSE)
TGo4Thread * GetThread(const char *name)
Bool_t fbDisConnectRequest
virtual Int_t StartWorkThreads()
virtual Int_t Close(Option_t *opt="")
TObject * WaitObjectFromBuffer()
TGo4TaskHandler * NextTaskHandler(Bool_t reset=kFALSE)
void WakeCommandQueue(Int_t id=0)
void SendStatusBuffer() override
static const UInt_t fguCONNECTWAITCYCLETIME
virtual Int_t Send(TObject *obj)
Int_t WaitForConnection()
Bool_t IsWorkStopped() const
static void UnRegister(TGo4CommandReceiver *p)
UInt_t GetNegotiationPort()
TGo4ThreadHandler * fxWorkHandler
void SetTaskName(const char *)
Bool_t RemoveCurrentClient()
Bool_t SubmitEmergencyData(Go4EmergencyCommand_t val, const char *receiver=nullptr)
void SetDisConnect(TGo4Socket *trans)
TGo4TaskHandler * GetTaskHandler() override
void SendStopBuffers(const char *taskname=nullptr)
static const char * Get_fgcERROR()
TGo4TaskConnectorTimer * fxConnectorTimer
static void Sleep(UInt_t millisecs)
void Terminate(Bool_t termapp=kTRUE) override
static void Register(const char *name, TGo4CommandReceiver *p)
virtual Int_t Open(const char *host, Int_t port, Bool_t keepservsock=kFALSE)
Bool_t NewThread(const char *name, TGo4Runnable *runnable)
TGo4BufferQueue * GetCommandQueue(const char *task=nullptr) override
virtual Int_t StopWorkThreads()
void SetConnect(TGo4Socket *trans, const char *host, UInt_t port, Bool_t keepserv=kFALSE)
TGo4TaskHandler * fxCurrentTaskHandler
virtual Bool_t StopConnectorThread()
static const UInt_t fguCONNECTTIMERPERIOD
TGo4Socket * fxDisConnectTransport
virtual void SendStatus(TGo4Status *stat, const char *receiver=nullptr)
static const UInt_t fguCLOSEWAITCYCLETIME
virtual Int_t TimerConnect()
static void Debug(const char *text,...) GO4_PRINTF_ARGS
TGo4Command * NextCommand() override
void SendStatus(TGo4Status *stat, const char *receiver=nullptr) override
static const char * Get_fgcLAUNCHPREFSFILE()
Int_t DisConnectClient(const char *name, Bool_t clientwait=kTRUE)
static TGo4CommandInvoker * Instance()
static const Int_t fgiCONNECTWAITCYCLES
TGo4TaskHandler * GetTaskHandler(const char *name)
static const UInt_t fguOPENWAITCYCLETIME
Bool_t SubmitEmergencyCommand(Go4EmergencyCommand_t val)
static const Int_t fgiOPENWAITCYCLES
void AddBuffer(TBuffer *buffer, Bool_t clone=kFALSE)
Bool_t Stop(const char *thname)
const char * GetConnectHost() const
TGo4Slave * GetSlave() const
TGo4Queue * GetStatusQueue() const
Bool_t ConnectorThreadIsStopped()
Bool_t Start(const char *thname)
void SendStatusMessage(Int_t level, Bool_t printout, const char *text,...)
TGo4BufferQueue * GetDataQueue(const char *task=nullptr) override
Bool_t fbKeepServerSocket
TGo4ServerTask(const char *name, UInt_t negotiationport=0, Bool_t blockingmode=kFALSE, Bool_t standalone=kFALSE, Bool_t autostart=kTRUE, Bool_t autocreate=kTRUE, Bool_t ismaster=kTRUE)
TGo4ThreadHandler * GetWorkHandler() const
TGo4Socket * GetConnectTransport()
TGo4Queue * GetCommandQueue() const
TGo4TaskManager * fxTaskManager
virtual Int_t RemoveAllClients(Bool_t force=false)
void SetTask(TGo4Task *task, Bool_t delold=kTRUE)
static const Int_t fgiCLOSEWAITCYCLES
TGo4TaskHandler * GetLastTaskHandler()
virtual ~TGo4ServerTask()
Bool_t IsTerminating() const
static Int_t Get_fgiTERMID()
TGo4Queue * GetDataQueue() const
void SetMode(Go4CommandMode_t m)
TGo4TaskHandler * GetCurrentTaskHandler()
Int_t WaitForClientRemoved()
void SetCurrentTask(const char *name)
static const char * fgcLAUNCHPREFSFILE
TGo4TaskManager * GetTaskManager()
TGo4Socket * fxConnectTransport
TGo4BufferQueue * GetStatusQueue(const char *task=nullptr) override
virtual Bool_t StartConnectorThread()
const char * GetConnectorName() const