#include "TGo4Master.h" #include "TSystem.h" #include "TGo4Log.h" #include "TGo4Task.h" #include "TGo4ServerTask.h" #include "TGo4ClientTask.h" #include "TGo4CommandInvoker.h" #include "TGo4TaskHandlerCommandList.h" TGo4Master::TGo4Master() : TGo4TaskOwner() { } TGo4Master::TGo4Master(const char* name, Bool_t isserver, const char* serverhost, UInt_t negotport) : TGo4TaskOwner(isserver) { TGo4CommandInvoker::Instance(); // make sure a command invoker exists TGo4CommandInvoker::Register("MasterTask", this); TGo4Task* task=0; if(IsServer()) { task=new TGo4ServerTask(name, negotport, kFALSE, //blockingmode kFALSE, //standalone kTRUE, //autostart kTRUE, //autocreate kTRUE //ismaster ); } else { task=new TGo4ClientTask(name, serverhost, negotport, kFALSE, //blockingmode kFALSE, //standalone kFALSE, //autostart kTRUE, //autocreate kTRUE, //ismaster kFALSE); // autoconnect } SetTask(task); } TGo4Master::~TGo4Master() { TGo4CommandInvoker::UnRegister(this); } TGo4TaskHandlerCommandList* TGo4Master::CreateCommandList() { return new TGo4TaskHandlerCommandList("Go4ServerTaskDefaultCommandList"); } Bool_t TGo4Master::SubmitCommand(const char* name) { if(GetTask()==0) return kFALSE; return (GetTask()->SubmitCommand(name)); } Bool_t TGo4Master::SubmitEmergencyCommand(Go4EmergencyCommand_t val) { if(GetTask()==0) return kFALSE; return (GetTask()->SubmitEmergencyCommand(val)); } Bool_t TGo4Master::SubmitCommand(TGo4Command* com) { if(GetTask()==0) return kFALSE; return (GetTask()->SubmitCommand(com)); } Bool_t TGo4Master::DisconnectSlave(const char* name, Bool_t waitforslave) { Bool_t rev=kTRUE; if(IsServer()) { TGo4ServerTask* server=dynamic_cast (GetTask()); if(server) rev=server->RemoveClient(name, waitforslave); //waitforclient else rev=kFALSE; } else { TGo4ClientTask* client=dynamic_cast (GetTask()); if(client) { rev=client->DisconnectServer(); client->Terminate(kFALSE); // terminate taskowner (TGo4Display), but not application } else rev=kFALSE; } return rev; }