00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "TGo4Master.h"
00017
00018 #include "TSystem.h"
00019
00020 #include "TGo4Log.h"
00021 #include "TGo4Task.h"
00022 #include "TGo4ServerTask.h"
00023 #include "TGo4ClientTask.h"
00024 #include "TGo4CommandInvoker.h"
00025 #include "TGo4TaskHandlerCommandList.h"
00026
00027 TGo4Master::TGo4Master() :
00028 TGo4TaskOwner()
00029 {
00030 }
00031
00032 TGo4Master::TGo4Master(const char* name, Bool_t isserver, const char* serverhost, UInt_t negotport)
00033 : TGo4TaskOwner(isserver)
00034 {
00035 TGo4CommandInvoker::Instance();
00036 TGo4CommandInvoker::Register("MasterTask", this);
00037 TGo4Task* task=0;
00038 if(IsServer())
00039 {
00040 task=new TGo4ServerTask(name, negotport,
00041 kFALSE,
00042 kFALSE,
00043 kTRUE,
00044 kTRUE,
00045 kTRUE
00046 );
00047 }
00048 else
00049 {
00050 task=new TGo4ClientTask(name, serverhost, negotport,
00051 kFALSE,
00052 kFALSE,
00053 kFALSE,
00054 kTRUE,
00055 kTRUE,
00056 kFALSE);
00057 }
00058 SetTask(task);
00059 }
00060
00061 TGo4Master::~TGo4Master()
00062 {
00063 TGo4CommandInvoker::UnRegister(this);
00064 }
00065
00066 TGo4TaskHandlerCommandList* TGo4Master::CreateCommandList()
00067 {
00068 return new TGo4TaskHandlerCommandList("Go4ServerTaskDefaultCommandList");
00069 }
00070
00071 Bool_t TGo4Master::SubmitCommand(const char* name)
00072 {
00073 if(GetTask()==0) return kFALSE;
00074 return (GetTask()->SubmitCommand(name));
00075 }
00076
00077 Bool_t TGo4Master::SubmitEmergencyCommand(Go4EmergencyCommand_t val)
00078 {
00079 if(GetTask()==0) return kFALSE;
00080 return (GetTask()->SubmitEmergencyCommand(val));
00081 }
00082
00083 Bool_t TGo4Master::SubmitCommand(TGo4Command* com)
00084 {
00085 if(GetTask()==0) return kFALSE;
00086 return (GetTask()->SubmitCommand(com));
00087 }
00088
00089 Bool_t TGo4Master::DisconnectSlave(const char* name, Bool_t waitforslave)
00090 {
00091 Bool_t rev=kTRUE;
00092 if(IsServer())
00093 {
00094 TGo4ServerTask* server=dynamic_cast<TGo4ServerTask*> (GetTask());
00095 if(server)
00096 rev=server->RemoveClient(name, waitforslave);
00097 else
00098 rev=kFALSE;
00099 }
00100 else
00101 {
00102 TGo4ClientTask* client=dynamic_cast<TGo4ClientTask*> (GetTask());
00103 if(client)
00104 {
00105 rev=client->DisconnectServer();
00106 client->Terminate(kFALSE);
00107 }
00108 else
00109 rev=kFALSE;
00110 }
00111 return rev;
00112 }
00113
00114