18#include "TBufferFile.h"
21#include "TGo4LockGuard.h"
56 Bool_t useobjectserver)
76 const char *ownername;
82 ownername =
"never-come-here";
108 std::cerr <<
" Histogram Server constructor FATAL ERROR: no threadmanager !!" << std::endl;
130 INTS4 *pl_all =
nullptr;
184 static Bool_t isfirsttime = kTRUE;
188 if (waitresult == -2)
190 if (waitresult < 0) {
192 TGo4Log::Debug(
" HistogramServer: Negotiation channel open TIMEOUT");
193 std::cerr <<
" HistogramServer TIMEOUT ERROR opening socket connection !!! Terminating..." << std::endl;
200 TGo4Log::Debug(
" HistogramServer: Negotiation port getter TIMEOUT");
201 std::cerr <<
" HistogramServer TIMEOUT ERROR retrieving port number !!! Terminating..." << std::endl;
215 isfirsttime = kFALSE;
219 if (connectwaitseconds < 0) {
222 return connectwaitseconds;
234 const char *recvchar =
fxTransport->RecvRaw(
"dummy");
235 if (recvchar && !strcmp(recvchar,
fxServerName.Data())) {
240 std::cerr <<
"##### check login with wrong base" << std::endl;
247 if (recvchar && !strcmp(recvchar,
fxServerPass.Data())) {
252 std::cerr <<
"##### check login with wrong passwd" << std::endl;
266 std::cerr <<
"-----Object server received null character for object request!" << std::endl;
271 TObject *
object =
nullptr;
286 Bool_t retval = kTRUE;
288 TBuffer *rootbuffer =
nullptr;
292 rootbuffer =
new TBufferFile(TBuffer::kWrite);
293 TFile *filsav = gFile;
295 rootbuffer->WriteObject(
object);
305 TGo4Log::Debug(
" HistogramServer: null character on finishing object client channel ");
308 TGo4Log::Debug(
" HistogramServer: ERROR on finishing object client channel ");
318 GO4TRACE((12,
"TGo4HistogramServer::SetConnect(TGo4Socket *)", __LINE__, __FILE__));
327 GO4TRACE((12,
"TGo4HistogramServer::SetDisConnect(TGo4Socket *)", __LINE__, __FILE__));
334 GO4TRACE((12,
"TGo4HistogramServer::TimerConnect()", __LINE__, __FILE__));
339 GO4TRACE((15,
"TGo4HistogramServer::TimerConnect()--DisConnectRequest", __LINE__, __FILE__));
352 GO4TRACE((15,
"TGo4HistogramServer::TimerConnect()--NO DisConnectRequest", __LINE__, __FILE__));
360 GO4TRACE((15,
"TGo4HistogramServer::TimerConnect()--ConnectRequest", __LINE__, __FILE__));
364 GO4TRACE((10,
"TGo4HistogramServer::TimerConnect()--transport is not open", __LINE__, __FILE__));
377 GO4TRACE((10,
"TGo4HistogramServer::TimerConnect()--transport already open", __LINE__, __FILE__));
383 GO4TRACE((10,
"TGo4HistogramServer::TimerConnect()--no transport specified", __LINE__, __FILE__));
388 GO4TRACE((15,
"TGo4HistogramServer::TimerConnect()--NO ConnectRequest", __LINE__, __FILE__));
398 GO4TRACE((12,
"TGo4HistogramServer::WaitForOpen()", __LINE__, __FILE__));
420 GO4TRACE((12,
"TGo4HistogramServer::WaitForClose()", __LINE__, __FILE__));
438 GO4TRACE((12,
"TGo4HistogramServer::WaitForConnection()", __LINE__, __FILE__));
static TGo4Analysis * Instance()
return analysis instance
void Message(Int_t prio, const char *text,...)
Display a user message.
static TGo4CommandInvoker * Instance()
static void UnRegister(TGo4CommandReceiver *p)
static void Register(const char *name, TGo4CommandReceiver *p)
TGo4ObjConnectorTimer * fxConnectorTimer
timer responsible for the connection/disconnection of clients; independent of application control tim...
Bool_t fbConnectIsOpen
True if fxConnectTransport waits in server Open() call.
Bool_t fbDisConnectRequest
True if fxConnectTransport shall be Close() by Timer.
static const char * fgcSHUTDOWNNAME
This string is send as histogram name for termination connection.
TGo4Socket * fxConnectTransport
link to the next TaskHandler transport instance that shall be connected by the Object connector Timer...
TString fxServerPass
contains api server password
const char * ConnectorName() const
static const char * fgcCOMGETLIST
command string for object server nameslist request
Bool_t SendObject(TObject *obj)
Send object to the current object client.
void DisconnectObjectClient()
Terminate connection to current object client, keep waiting for the next one.
static const UInt_t fguCONNECTWAITCYCLETIME
Time for each connect wait cycle, in ms.
static const char * fgcOBJTHREADNAME
object server connector thread name
static const UInt_t fguOPENWAITCYCLETIME
Time for each open wait cycle, in ms.
Bool_t fbConnectIsDone
True if fxConnectTransport has returned from Open(), i.e.
TString fxServerName
contains api server name
TString fcConnectHost
hostname for timer connect
Bool_t CheckLogin()
Checks basename and passwd login of connected client.
friend class TGo4HisConnectorRunnable
Bool_t fbConnectRequest
True if fxConnectTransport shall be Open() by Timer.
TGo4Analysis * fxAnalysis
Bool_t fbConnectIsClose
True if fxConnectTransport has returned from Close(), i.e.
UInt_t fuConnectPort
port number for timer connect
virtual Int_t TimerConnect()
This method is used by the object connectortimer Notify to connect or disconnect a transportchannel (...
TGo4ThreadHandler * fxThreadHandler
UInt_t fuObjectPort
port number for the object server connections
Bool_t HandleObjectRequest()
Ask for which object to send and give it to the client.
static const Int_t fgiCONNECTWAITCYCLES
Maximum cycles to wait until transport is connected.
static const char * fgcCONTHREADNAME
histogram server connector thread name
TString fxObjectThreadName
Name of object server thread.
void SetDisConnect(TGo4Socket *trans)
virtual ~TGo4HistogramServer()
Int_t ConnectObjectClient()
Starts server socket waiting for the next client.
void SetConnect(TGo4Socket *trans, const char *host, UInt_t port)
const char * ConnectHost() const
TString fxConnectorName
Name of connector thread.
TGo4AnalysisClient * fxAnalysisClient
UInt_t GetObjPort()
returns the portnumber for object server connection
Int_t fiServerPort
port number for server socket
const char * ObjectThreadName() const
static const Int_t fgiCLOSEWAITCYCLES
Maximum cycles to wait until transport is closed.
TGo4Socket * fxTransport
socket for object server
Int_t ServeObjectClient()
Used by object connector runnable to serve client request.
Int_t WaitForConnection()
static const Int_t fgiOPENWAITCYCLES
Maximum cycles to wait until transport is open.
static const UInt_t fguCLOSEWAITCYCLETIME
Time for each close wait cycle, in ms.
static const UInt_t fguTIMERPERIOD
Period of connector timer, in ms.
TGo4Socket * fxDisConnectTransport
link to the next TaskHandler transport instance that shall be disconnected by the connector Timer wit...
Bool_t fbUseObjectServer
Switches Go4 objectserver option on/off.
static void Debug(const char *text,...) GO4_PRINTF_ARGS
User shortcut for message with prio 0.
Runnable that serves an object request for object client.
timer aggregated to the histogram server which is responsible to establish connections of the go4 obj...
static UInt_t Get_fguPORTWAITTIME()
static const char * Get_fgcERROR()
static const char * Get_fgcOK()
static Int_t Get_fgiPORTWAITCYCLES()
Exception which terminates the threadmanager and the application.
Bool_t IsTerminating() const
returns termination status of Threadmanager
static void Sleep(UInt_t millisecs)
wrapper for gSystem->Sleep with consecutive TThread::CancelPoint - necessary for proper pthread termi...
INTS4 f_his_gethis(CHARS *pc_server, INTS4 l_port, CHARS *pc_base, CHARS *pc_access, CHARS *pc_histo, s_his_head **p_head, INTS4 **p_buffer, INTS4 *pl_size)
INTS4 f_his_server(CHARS *pc_base, CHARS *pc_access, INTS4 *pl_port)