// $Id$ //----------------------------------------------------------------------- // The GSI Online Offline Object Oriented (Go4) Project // Experiment Data Processing at EE department, GSI //----------------------------------------------------------------------- // Copyright (C) 2000- GSI Helmholtzzentrum fuer Schwerionenforschung GmbH // Planckstr. 1, 64291 Darmstadt, Germany // Contact: http://go4.gsi.de //----------------------------------------------------------------------- // This software can be used under the license agreements as stated // in Go4License.txt file which is part of the distribution. //----------------------------------------------------------------------- #include "TGo4Master.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 = nullptr; 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()) return kFALSE; return GetTask()->SubmitCommand(name); } Bool_t TGo4Master::SubmitEmergencyCommand(Go4EmergencyCommand_t val) { if (!GetTask()) return kFALSE; return GetTask()->SubmitEmergencyCommand(val); } Bool_t TGo4Master::SubmitCommand(TGo4Command *com) { if (!GetTask()) 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; }