00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include "TGo4Slave.h"
00015
00016 #include "TROOT.h"
00017 #include "snprintf.h"
00018
00019 #include "TGo4Log.h"
00020 #include "TGo4TaskStatus.h"
00021 #include "TGo4ServerTask.h"
00022 #include "TGo4ClientTask.h"
00023 #include "TGo4CommandInvoker.h"
00024 #include "TGo4TaskHandlerCommandList.h"
00025
00026 TGo4Slave::TGo4Slave(const char* name, Bool_t isserver, const char* serverhost, UInt_t negotport)
00027 :TGo4TaskOwner(isserver),
00028 fbMainIsRunning(kTRUE)
00029 {
00030 TGo4CommandInvoker::Instance();
00031 TGo4CommandInvoker::SetCommandList(new TGo4TaskHandlerCommandList("ListOfTaskHandlerCommands"));
00032 TGo4CommandInvoker::Register("SlaveTask", this);
00033 TGo4Task* task=0;
00034 if(IsServer())
00035 {
00036 task=new TGo4ServerTask(name, negotport,
00037 kFALSE,
00038 kFALSE,
00039 kTRUE,
00040 kTRUE,
00041 kFALSE
00042 );
00043 }
00044 else
00045 {
00046 task=new TGo4ClientTask(name, serverhost, negotport,
00047 kFALSE,
00048 kFALSE,
00049 kFALSE,
00050 kTRUE,
00051 kFALSE,
00052 kTRUE );
00053 }
00054 SetTask(task);
00055 }
00056
00057 TGo4Slave::TGo4Slave():fbMainIsRunning(kTRUE)
00058 {
00059
00060 }
00061
00062 TGo4Slave::~TGo4Slave()
00063 {
00064 TGo4CommandInvoker::UnRegister(this);
00065 }
00066
00067
00068 void TGo4Slave::Start()
00069 {
00070 TGo4Log::Debug(" Slave ''%s'' default Start method, please override",GetName());
00071 fbMainIsRunning=kTRUE;
00072 }
00073 void TGo4Slave::Stop()
00074 {
00075 TGo4Log::Debug(" Slave ''%s'' default Stop method, please override",GetName());
00076 fbMainIsRunning=kFALSE;
00077 }
00078
00079 void TGo4Slave::KillMain()
00080 {
00081
00082
00083 }
00084 void TGo4Slave::RestartMain()
00085 {
00086
00087 }
00088
00089 void TGo4Slave::Terminate (Bool_t termapp)
00090 {
00091 if(GetTask())
00092 GetTask()->TGo4ThreadManager::Terminate(termapp);
00093 }
00094
00095 void TGo4Slave::TerminateFast ()
00096 {
00097 Terminate();
00098 }
00099
00100
00101 TGo4TaskStatus* TGo4Slave::CreateStatus()
00102 {
00103 TGo4TaskStatus* stat= new TGo4TaskStatus(GetName());
00104 UpdateStatus(stat);
00105 return stat;
00106 }
00107
00108 void TGo4Slave::UpdateStatus(TGo4TaskStatus* state)
00109 {
00110 if(GetTask())
00111 GetTask()->UpdateStatus(state);
00112 }
00113
00114 TGo4Command* TGo4Slave::NextCommand()
00115 {
00116 if(GetTask())
00117 return (GetTask()->NextCommand());
00118 else
00119 return 0;
00120 }
00121
00122
00123
00124 void TGo4Slave::SendObject(TObject * obj, const char* receiver)
00125 {
00126 if(GetTask())
00127 GetTask()->SendObject(obj, receiver);
00128 }
00129
00130 void TGo4Slave::SendStatus(TGo4Status * stat, const char* receiver)
00131 {
00132 if(GetTask())
00133 GetTask()->SendStatus(stat, receiver);
00134 }
00135
00136 Int_t TGo4Slave::Initialization()
00137 {
00138
00139 return 0;
00140 }
00141
00142 TGo4ThreadHandler* TGo4Slave::GetThreadHandler()
00143 {
00144 if(GetTask())
00145 return(GetTask()->GetWorkHandler());
00146 else
00147 return 0;
00148 }
00149
00150
00151 void TGo4Slave::SendStatusBuffer()
00152 {
00153 if(GetTask()) GetTask()->SendStatusBuffer();
00154 }
00155
00156 void TGo4Slave::SendStatusMessage(Int_t level, Bool_t printout, const char* text,...)
00157 {
00158 if(GetTask()==0) return;
00159 Int_t lbuflen=256;
00160
00161 char txtbuf[256];
00162 va_list args;
00163 va_start(args, text);
00164 vsnprintf(txtbuf, lbuflen, text, args);
00165 va_end(args);
00166 GetTask()->SendStatusMessage(level, printout, txtbuf);
00167 }
00168
00169 void TGo4Slave::UpdateStatusBuffer()
00170 {
00171 if(GetTask()) GetTask()->UpdateStatusBuffer();
00172 }
00173
00174 void TGo4Slave::ExecuteString(const char* command)
00175 {
00176 gROOT->ProcessLineSync(command);
00177 }
00178