#include <TGo4ServerTask.h>
Public Types | |
enum | ELaunchmodes { kSecureShell = BIT(0), kGuiEmbed = BIT(1) } |
Public Member Functions | |
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) | |
virtual | ~TGo4ServerTask () |
virtual void | Quit () |
void | Shutdown () |
virtual void | LockAll () |
virtual void | UnLockAll () |
TGo4TaskManager * | GetTaskManager () |
TGo4TaskHandler * | GetCurrentTaskHandler () |
TGo4TaskHandler * | GetTaskHandler () |
TGo4TaskHandler * | GetTaskHandler (const char *name) |
TGo4BufferQueue * | GetCommandQueue (const char *task=0) |
TGo4BufferQueue * | GetStatusQueue (const char *task=0) |
TGo4BufferQueue * | GetDataQueue (const char *task=0) |
virtual TGo4Command * | NextCommand () |
virtual void | SendStatus (TGo4Status *stat, const char *receiver=0) |
virtual void | SendStatusBuffer () |
virtual Bool_t | StartConnectorThread () |
virtual Bool_t | StopConnectorThread () |
Bool_t | ConnectorThreadIsStopped () |
void | SetCurrentTask (const char *name) |
void | SetConnect (TGo4Socket *trans, const char *host, UInt_t port, Bool_t keepserv=kFALSE) |
void | SetDisConnect (TGo4Socket *trans) |
TGo4Socket * | GetConnectTransport () |
const char * | GetConnectorName () const |
const char * | GetConnectHost () const |
virtual Int_t | TimerConnect () |
virtual Int_t | RemoveAllClients (Bool_t force=false) |
virtual Bool_t | RemoveClient (const char *name, Bool_t clientwait=kTRUE, Bool_t isterminating=kFALSE) |
Bool_t | RemoveCurrentClient () |
Int_t | WaitForOpen () |
Int_t | WaitForClose () |
Int_t | WaitForConnection () |
Static Public Member Functions | |
static const char * | Get_fgcLAUNCHPREFSFILE () |
Static Protected Attributes | |
static const Int_t | fgiOPENWAITCYCLES = 100 |
static const UInt_t | fguOPENWAITCYCLETIME = 100 |
static const Int_t | fgiCLOSEWAITCYCLES = 100 |
static const UInt_t | fguCLOSEWAITCYCLETIME = 100 |
static const Int_t | fgiCONNECTWAITCYCLES = 20 |
static const UInt_t | fguCONNECTWAITCYCLETIME = 200 |
static const UInt_t | fguCONNECTTIMERPERIOD = 100 |
static const char * | fgcLAUNCHPREFSFILE = "etc/Go4LaunchPrefs.txt" |
Private Attributes | |
TString | fxConnectorName |
TGo4TaskManager * | fxTaskManager |
TGo4TaskHandler * | fxCurrentTaskHandler |
TGo4Socket * | fxConnectTransport |
TGo4Socket * | fxDisConnectTransport |
TString | fxConnectHost |
UInt_t | fuConnectPort |
Bool_t | fbKeepServerSocket |
Bool_t | fbConnectRequest |
Bool_t | fbDisConnectRequest |
Bool_t | fbConnectIsOpen |
Bool_t | fbConnectIsDone |
Bool_t | fbConnectIsClose |
TGo4TaskConnectorTimer * | fxConnectorTimer |
Definition at line 28 of file TGo4ServerTask.h.
Definition at line 277 of file TGo4ServerTask.h.
TGo4ServerTask::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 | |||
) |
Definition at line 48 of file TGo4ServerTask.cxx.
References fguCONNECTTIMERPERIOD, fxConnectorName, fxConnectorTimer, fxTaskManager, TGo4ThreadManager::fxWorkHandler, GetConnectorName(), TGo4CommandInvoker::Instance(), TGo4ThreadManager::Launch(), TGo4ThreadHandler::NewThread(), and TGo4CommandInvoker::Register().
TGo4ServerTask::~TGo4ServerTask | ( | ) | [virtual] |
Definition at line 92 of file TGo4ServerTask.cxx.
References TGo4ThreadHandler::CancelAll(), fxConnectorTimer, fxTaskManager, TGo4ThreadManager::GetWorkHandler(), and TGo4CommandInvoker::UnRegister().
Bool_t TGo4ServerTask::ConnectorThreadIsStopped | ( | ) |
Returns the waiting state fbIsWaiting of the Connector Thread;
Definition at line 592 of file TGo4ServerTask.cxx.
References GetConnectorName(), TGo4ThreadHandler::GetThread(), TGo4ThreadManager::GetWorkHandler(), and TGo4Thread::IsWaiting().
const char * TGo4ServerTask::Get_fgcLAUNCHPREFSFILE | ( | ) | [static] |
Definition at line 672 of file TGo4ServerTask.cxx.
References fgcLAUNCHPREFSFILE.
Referenced by TGo4AnalysisProxy::GetLaunchString().
TGo4BufferQueue * TGo4ServerTask::GetCommandQueue | ( | const char * | task = 0 |
) | [virtual] |
Reimplemented from TGo4Task.
Definition at line 462 of file TGo4ServerTask.cxx.
References TGo4TaskHandler::GetCommandQueue(), GetCurrentTaskHandler(), and GetTaskHandler().
const char* TGo4ServerTask::GetConnectHost | ( | ) | const [inline] |
Definition at line 131 of file TGo4ServerTask.h.
References fxConnectHost.
Referenced by TimerConnect().
const char* TGo4ServerTask::GetConnectorName | ( | ) | const [inline] |
Definition at line 129 of file TGo4ServerTask.h.
References fxConnectorName.
Referenced by ConnectorThreadIsStopped(), StartConnectorThread(), StopConnectorThread(), and TGo4ServerTask().
TGo4Socket * TGo4ServerTask::GetConnectTransport | ( | ) |
Definition at line 457 of file TGo4ServerTask.cxx.
References fxConnectTransport.
TGo4TaskHandler * TGo4ServerTask::GetCurrentTaskHandler | ( | ) |
Get task handler of the currently activated client connection
Definition at line 279 of file TGo4ServerTask.cxx.
References fxCurrentTaskHandler.
Referenced by GetCommandQueue(), GetDataQueue(), GetStatusQueue(), GetTaskHandler(), TGo4TaskOwner::IsConnected(), RemoveClient(), RemoveCurrentClient(), TGo4TaskManager::RemoveTaskHandler(), TGo4LoggingRunnable::Run(), and TGo4ControllerRunnable::Run().
TGo4BufferQueue * TGo4ServerTask::GetDataQueue | ( | const char * | task = 0 |
) | [virtual] |
Reimplemented from TGo4Task.
Definition at line 489 of file TGo4ServerTask.cxx.
References GetCurrentTaskHandler(), TGo4TaskHandler::GetDataQueue(), and GetTaskHandler().
Referenced by TGo4ExampleServer::StopWorkThreads().
TGo4BufferQueue * TGo4ServerTask::GetStatusQueue | ( | const char * | task = 0 |
) | [virtual] |
Reimplemented from TGo4Task.
Definition at line 475 of file TGo4ServerTask.cxx.
References GetCurrentTaskHandler(), TGo4TaskHandler::GetStatusQueue(), and GetTaskHandler().
Referenced by TGo4ExampleServer::StopWorkThreads().
TGo4TaskHandler * TGo4ServerTask::GetTaskHandler | ( | const char * | name | ) |
Get task handler for client specified by name
Definition at line 269 of file TGo4ServerTask.cxx.
References fxTaskManager, and TGo4TaskManager::GetTaskHandler().
TGo4TaskHandler * TGo4ServerTask::GetTaskHandler | ( | ) | [virtual] |
Get task handler for client specified by name
Reimplemented from TGo4Task.
Definition at line 274 of file TGo4ServerTask.cxx.
References GetCurrentTaskHandler().
Referenced by GetCommandQueue(), GetDataQueue(), GetStatusQueue(), and RemoveClient().
TGo4TaskManager * TGo4ServerTask::GetTaskManager | ( | ) |
Definition at line 284 of file TGo4ServerTask.cxx.
References fxTaskManager.
Referenced by TGo4AnalysisProxy::ConnectorPort(), TGo4TaskOwner::GetTaskManagerMutex(), TGo4AnalysisProxy::LaunchAsClient(), and TGo4ConnectorRunnable::TGo4ConnectorRunnable().
void TGo4ServerTask::LockAll | ( | ) | [virtual] |
Lock all go4 mutexes in correct order to avoid deadlocking. to be used from cintlocktimer
Reimplemented from TGo4Task.
Definition at line 648 of file TGo4ServerTask.cxx.
References TGo4Task::fxStatusMutex, fxTaskManager, TGo4TaskManager::GetMutex(), and TGo4LockGuard::LockMainMutex().
TGo4Command * TGo4ServerTask::NextCommand | ( | ) | [virtual] |
Delivers next command. This implementation will poll over command queues of all existing connections. Command is labeled with name of ordering task, so data may be returned to command sender only.
Reimplemented from TGo4Task.
Definition at line 503 of file TGo4ServerTask.cxx.
References fxTaskManager, TGo4TaskHandler::GetCommandQueue(), TGo4TaskManager::GetMutex(), TGo4TaskHandler::GetRole(), TGo4Queue::IsEmpty(), TGo4Task::IsMaster(), TGo4TaskManager::NextTaskHandler(), TGo4Command::SetMode(), TGo4Command::SetTaskName(), and TGo4BufferQueue::WaitObjectFromBuffer().
void TGo4ServerTask::Quit | ( | ) | [virtual] |
Quit method used by quit command; may be overridden in special application
Reimplemented from TGo4Task.
Definition at line 598 of file TGo4ServerTask.cxx.
References TGo4Log::Debug(), fxTaskManager, TGo4Task::Get_fgiTERMID(), TGo4TaskManager::GetMutex(), TGo4Task::GetSlave(), TGo4Task::IsMaster(), RemoveAllClients(), TGo4Task::SendStatusMessage(), TGo4Slave::Stop(), TGo4Task::Terminate(), and TGo4Task::WakeCommandQueue().
Referenced by TGo4ComServerQuit::ExeCom().
Int_t TGo4ServerTask::RemoveAllClients | ( | Bool_t | force = false |
) | [virtual] |
Remove all connected client task from this server. with option force=true, remove without waiting
Definition at line 171 of file TGo4ServerTask.cxx.
References fxTaskManager, TGo4TaskManager::NextTaskHandler(), and RemoveClient().
Referenced by Quit(), and Shutdown().
Bool_t TGo4ServerTask::RemoveClient | ( | const char * | name, | |
Bool_t | clientwait = kTRUE , |
|||
Bool_t | isterminating = kFALSE | |||
) | [virtual] |
Remove the client task specified by name from this server. If clientwait=true, remove with client handshake. If isterminating=true, do not restart workthreads after removing the client.
Definition at line 100 of file TGo4ServerTask.cxx.
References TGo4Log::Debug(), TGo4TaskManager::DisConnectClient(), fxTaskManager, GetCurrentTaskHandler(), GetTaskHandler(), TGo4Task::IsMaster(), kComQuit, TGo4Task::SendStopBuffers(), TGo4Task::StartWorkThreads(), TGo4Task::StopWorkThreads(), TGo4Task::SubmitEmergencyCommand(), TGo4Task::SubmitEmergencyData(), and TGo4TaskManager::WaitForClientRemoved().
Referenced by TGo4Master::DisconnectSlave(), TGo4ComRemoveClient::ExeCom(), RemoveAllClients(), and RemoveCurrentClient().
Bool_t TGo4ServerTask::RemoveCurrentClient | ( | ) |
removes the currently active client from server (disconnect)
Definition at line 199 of file TGo4ServerTask.cxx.
References TGo4Log::Debug(), GetCurrentTaskHandler(), and RemoveClient().
void TGo4ServerTask::SendStatus | ( | TGo4Status * | stat, | |
const char * | receiver = 0 | |||
) | [virtual] |
Send status object via status channel to the master. Master name may be specified, if more than one master is connected. By default, object is send to all connected tasks
Reimplemented from TGo4Task.
Definition at line 529 of file TGo4ServerTask.cxx.
References TGo4BufferQueue::AddBufferFromObject(), TGo4Log::Debug(), fxTaskManager, TGo4TaskManager::GetMutex(), TGo4Task::IsMaster(), and TGo4TaskManager::NextTaskHandler().
void TGo4ServerTask::SendStatusBuffer | ( | ) | [virtual] |
Send internal status buffer to the master(s).
Reimplemented from TGo4Task.
Definition at line 550 of file TGo4ServerTask.cxx.
References TGo4BufferQueue::AddBuffer(), TGo4Log::Debug(), TGo4Task::fxStatusBuffer, TGo4Task::fxStatusMutex, fxTaskManager, TGo4TaskManager::GetMutex(), TGo4Task::IsMaster(), and TGo4TaskManager::NextTaskHandler().
void TGo4ServerTask::SetConnect | ( | TGo4Socket * | trans, | |
const char * | host, | |||
UInt_t | port, | |||
Bool_t | keepserv = kFALSE | |||
) |
Definition at line 289 of file TGo4ServerTask.cxx.
References fbConnectRequest, fbKeepServerSocket, fuConnectPort, fxConnectHost, and fxConnectTransport.
Referenced by TGo4TaskHandler::ConnectServerChannel(), and TGo4TaskManager::ServeClient().
void TGo4ServerTask::SetCurrentTask | ( | const char * | name | ) |
sets current client task (i.e. taskhandler) by name
Definition at line 216 of file TGo4ServerTask.cxx.
References TGo4Log::Debug(), fxCurrentTaskHandler, fxTaskManager, TGo4TaskManager::GetLastTaskHandler(), TGo4TaskManager::GetTaskHandler(), TGo4Task::IsWorkStopped(), TGo4Task::StartWorkThreads(), and TGo4Task::StopWorkThreads().
Referenced by TGo4TaskManager::AddClient(), and TGo4TaskManager::RemoveTaskHandler().
void TGo4ServerTask::SetDisConnect | ( | TGo4Socket * | trans | ) |
Definition at line 298 of file TGo4ServerTask.cxx.
References fbDisConnectRequest, and fxDisConnectTransport.
Referenced by TGo4TaskManager::ServeClient().
void TGo4ServerTask::Shutdown | ( | ) |
Fast Quit() without waiting for proper disconnection. For analysis server shutdown.
Definition at line 622 of file TGo4ServerTask.cxx.
References TGo4Log::Debug(), fguCONNECTTIMERPERIOD, fxTaskManager, TGo4Task::Get_fgiTERMID(), TGo4TaskManager::GetMutex(), TGo4Task::GetSlave(), RemoveAllClients(), TGo4Task::SendStatusMessage(), TGo4TaskOwner::SetTask(), TGo4Thread::Sleep(), TGo4Slave::Stop(), TGo4Task::StopWorkThreads(), and TGo4Task::WakeCommandQueue().
Bool_t TGo4ServerTask::StartConnectorThread | ( | ) | [virtual] |
starts the thread that listens to the connector port for a client negotiation request; used after launching an rsh client from server
Definition at line 571 of file TGo4ServerTask.cxx.
References GetConnectorName(), TGo4ThreadManager::GetWorkHandler(), and TGo4ThreadHandler::Start().
Referenced by TGo4AnalysisProxy::LaunchAsClient().
Bool_t TGo4ServerTask::StopConnectorThread | ( | ) | [virtual] |
stops the thread that listens to the connector port for a client negotiation request; used before launching an rsh client from server. A dummy connection is performed to release socket pending in listening state, thus runnable may wait afterwards , and no server socket is listening on spawning the client. Tests showed that any child process took over the listening server socket, which is not desired here and probably a bug of the system.
Definition at line 576 of file TGo4ServerTask.cxx.
References TGo4Socket::Close(), fxTaskManager, TGo4TaskHandler::Get_fgcERROR(), GetConnectorName(), TGo4TaskManager::GetNegotiationPort(), TGo4ThreadManager::GetWorkHandler(), TGo4Socket::Open(), TGo4Socket::Send(), and TGo4ThreadHandler::Stop().
Int_t TGo4ServerTask::TimerConnect | ( | ) | [virtual] |
this method is used by the connectortimer Notify to connect or disconnect a transportchannel (TSocket) on demand; the connection process itself is handled by the connector runnable which uses services of the TaskManager class
Definition at line 304 of file TGo4ServerTask.cxx.
References TGo4Socket::Close(), fbConnectIsClose, fbConnectIsDone, fbConnectIsOpen, fbConnectRequest, fbDisConnectRequest, fbKeepServerSocket, fuConnectPort, fxConnectTransport, fxDisConnectTransport, GetConnectHost(), TGo4Socket::IsOpen(), and TGo4Socket::Open().
Referenced by TGo4TaskConnectorTimer::Notify().
void TGo4ServerTask::UnLockAll | ( | ) | [virtual] |
UnLock all go4 mutexes in correct order to avoid deadlocking to be used from cintlocktimer
Reimplemented from TGo4Task.
Definition at line 661 of file TGo4ServerTask.cxx.
References TGo4Task::fxStatusMutex, fxTaskManager, TGo4TaskManager::GetMutex(), and TGo4LockGuard::UnLockMainMutex().
Int_t TGo4ServerTask::WaitForClose | ( | ) |
Overrides the ThreadManager Initialization; is used to setup the client connections on demand; checks for fbConnectRequest flag
Definition at line 409 of file TGo4ServerTask.cxx.
References fbConnectIsClose, fgiCLOSEWAITCYCLES, fguCLOSEWAITCYCLETIME, and TGo4Thread::Sleep().
Referenced by TGo4TaskManager::ServeClient().
Int_t TGo4ServerTask::WaitForConnection | ( | ) |
Definition at line 430 of file TGo4ServerTask.cxx.
References fbConnectIsDone, fguCONNECTWAITCYCLETIME, TGo4ThreadManager::IsTerminating(), and TGo4Thread::Sleep().
Referenced by TGo4TaskHandler::ConnectServerChannel(), and TGo4TaskManager::ServeClient().
Int_t TGo4ServerTask::WaitForOpen | ( | ) |
Definition at line 387 of file TGo4ServerTask.cxx.
References fbConnectIsOpen, fgiOPENWAITCYCLES, fguOPENWAITCYCLETIME, and TGo4Thread::Sleep().
Referenced by TGo4TaskHandler::ConnectServerChannel(), and TGo4TaskManager::ServeClient().
Bool_t TGo4ServerTask::fbConnectIsClose [private] |
True if fxConnectTransport has returned from Close(), i.e. connection was established
Definition at line 267 of file TGo4ServerTask.h.
Referenced by TimerConnect(), and WaitForClose().
Bool_t TGo4ServerTask::fbConnectIsDone [private] |
True if fxConnectTransport has returned from Open(), i.e. connection was established
Definition at line 261 of file TGo4ServerTask.h.
Referenced by TimerConnect(), and WaitForConnection().
Bool_t TGo4ServerTask::fbConnectIsOpen [private] |
True if fxConnectTransport waits in server Open() call
Definition at line 255 of file TGo4ServerTask.h.
Referenced by TimerConnect(), and WaitForOpen().
Bool_t TGo4ServerTask::fbConnectRequest [private] |
True if fxConnectTransport shall be Open() by AppControlTimer
Definition at line 244 of file TGo4ServerTask.h.
Referenced by SetConnect(), and TimerConnect().
Bool_t TGo4ServerTask::fbDisConnectRequest [private] |
True if fxConnectTransport shall be Close() by AppControlTimer
Definition at line 249 of file TGo4ServerTask.h.
Referenced by SetDisConnect(), and TimerConnect().
Bool_t TGo4ServerTask::fbKeepServerSocket [private] |
True if open in server mode shall keep the server socket instance
Definition at line 239 of file TGo4ServerTask.h.
Referenced by SetConnect(), and TimerConnect().
const char * TGo4ServerTask::fgcLAUNCHPREFSFILE = "etc/Go4LaunchPrefs.txt" [static, protected] |
Name of the Preferences file for the client startup
Definition at line 197 of file TGo4ServerTask.h.
Referenced by Get_fgcLAUNCHPREFSFILE().
const Int_t TGo4ServerTask::fgiCLOSEWAITCYCLES = 100 [static, protected] |
maximum cycles to wait until transport is closed
Definition at line 182 of file TGo4ServerTask.h.
Referenced by WaitForClose().
const Int_t TGo4ServerTask::fgiCONNECTWAITCYCLES = 20 [static, protected] |
maximum cycles to wait until transport is connected
Definition at line 188 of file TGo4ServerTask.h.
const Int_t TGo4ServerTask::fgiOPENWAITCYCLES = 100 [static, protected] |
maximum cycles to wait until transport is open
Definition at line 176 of file TGo4ServerTask.h.
Referenced by WaitForOpen().
const UInt_t TGo4ServerTask::fguCLOSEWAITCYCLETIME = 100 [static, protected] |
time for each close wait cycle
Definition at line 185 of file TGo4ServerTask.h.
Referenced by WaitForClose().
const UInt_t TGo4ServerTask::fguCONNECTTIMERPERIOD = 100 [static, protected] |
period of task connector timer
Definition at line 194 of file TGo4ServerTask.h.
Referenced by Shutdown(), and TGo4ServerTask().
const UInt_t TGo4ServerTask::fguCONNECTWAITCYCLETIME = 200 [static, protected] |
time for each connect wait cycle
Definition at line 191 of file TGo4ServerTask.h.
Referenced by WaitForConnection().
const UInt_t TGo4ServerTask::fguOPENWAITCYCLETIME = 100 [static, protected] |
time for each open wait cycle
Definition at line 179 of file TGo4ServerTask.h.
Referenced by WaitForOpen().
UInt_t TGo4ServerTask::fuConnectPort [private] |
port number for timer connect
Definition at line 233 of file TGo4ServerTask.h.
Referenced by SetConnect(), and TimerConnect().
TString TGo4ServerTask::fxConnectHost [private] |
hostname for timer connect
Definition at line 228 of file TGo4ServerTask.h.
Referenced by GetConnectHost(), and SetConnect().
TString TGo4ServerTask::fxConnectorName [private] |
remember name of connector thread
Definition at line 204 of file TGo4ServerTask.h.
Referenced by GetConnectorName(), and TGo4ServerTask().
timer responsible for the connection/disconnection of clients; independent of application control timer 1
Definition at line 274 of file TGo4ServerTask.h.
Referenced by TGo4ServerTask(), and ~TGo4ServerTask().
TGo4Socket* TGo4ServerTask::fxConnectTransport [private] |
link to the next TaskHandler transport instance that shall be connected by the Application Control Timer with the client
Definition at line 217 of file TGo4ServerTask.h.
Referenced by GetConnectTransport(), SetConnect(), and TimerConnect().
1
Definition at line 211 of file TGo4ServerTask.h.
Referenced by GetCurrentTaskHandler(), and SetCurrentTask().
TGo4Socket* TGo4ServerTask::fxDisConnectTransport [private] |
link to the next TaskHandler transport instance that shall be disconnected by the Application Control Timer with the client
Definition at line 223 of file TGo4ServerTask.h.
Referenced by SetDisConnect(), and TimerConnect().
TGo4TaskManager* TGo4ServerTask::fxTaskManager [private] |
Definition at line 208 of file TGo4ServerTask.h.
Referenced by GetTaskHandler(), GetTaskManager(), LockAll(), NextCommand(), Quit(), RemoveAllClients(), RemoveClient(), SendStatus(), SendStatusBuffer(), SetCurrentTask(), Shutdown(), StopConnectorThread(), TGo4ServerTask(), UnLockAll(), and ~TGo4ServerTask().