ROOT logo
#ifndef HONLINECLIENTSERVERCOM_H
#define HONLINECLIENTSERVERCOM_H

#include "TList.h"
#include "TSocket.h"
#include "TServerSocket.h"
#include "TMonitor.h"
#include "TNamed.h"
#include "honlinemonhist.h"
#include "TMessage.h"
#include "TMap.h"
#include "TObjString.h"
#include "TThread.h"

#include <vector>
using namespace std;

typedef Bool_t (*fillptrHOnlineClientServerCom)(Int_t); // prototype for fill functions

class HOnlineClientServerCom : public TNamed {
public:
    

    TMap clientRequests;

    HOnlineClientServerCom(TString name, TString hostname, Int_t port);
    virtual ~HOnlineClientServerCom();

    Bool_t init();
    Bool_t processClientRequests();
    Int_t processClients(TList& histPool);

    // send histogram to client
    Bool_t sendHistToClient(TSocket* socket, HOnlineMonHistAddon* hist);

    // send text to client
    Bool_t sendTextToClient(TSocket* socket, TString msg);

    // send a list to client, i.e. list of histogram names
    Bool_t sendListToClient(TSocket* socket, TList* list);

    void setDebug(Bool_t dodebug) { fDebug = dodebug; }

    // set the counter interval to print the eventnumber
    static void setEvtCounterInterval(Int_t ct = 100) { fEvtCtInterval = ct ;}

    // run event loop in Thread
    void  eventLoop(vector < fillptrHOnlineClientServerCom >*  fillfunctions);

private:

    TMonitor *monitor;
    TServerSocket *serversocket;
    TList socketlist;
    TSocket* masterClient;         // master client connection (first socket)
    Int_t fPort;	           // server port number
    TString fHostname;
    Int_t fTimeout;	           // timeout for socket handling
    Bool_t fDebug;                 // do some prints in debug mode
    static Int_t fEvtCtInterval;   // set the counter interval to print the eventnumber (-1 = no print)
    static Float_t fSpeed;         // speed in evts/s

    // thread
    static Bool_t isInit;
    static Bool_t doStop;
    TThread* eventLoopThread;                  // thread to run the eventloop
    static void* ThreadEventLoop(void* arg);   // thread function, runs into the eventLoopThread
    ClassDef(HOnlineClientServerCom, 1);

};

#endif

 honlineclientservercom.h:1
 honlineclientservercom.h:2
 honlineclientservercom.h:3
 honlineclientservercom.h:4
 honlineclientservercom.h:5
 honlineclientservercom.h:6
 honlineclientservercom.h:7
 honlineclientservercom.h:8
 honlineclientservercom.h:9
 honlineclientservercom.h:10
 honlineclientservercom.h:11
 honlineclientservercom.h:12
 honlineclientservercom.h:13
 honlineclientservercom.h:14
 honlineclientservercom.h:15
 honlineclientservercom.h:16
 honlineclientservercom.h:17
 honlineclientservercom.h:18
 honlineclientservercom.h:19
 honlineclientservercom.h:20
 honlineclientservercom.h:21
 honlineclientservercom.h:22
 honlineclientservercom.h:23
 honlineclientservercom.h:24
 honlineclientservercom.h:25
 honlineclientservercom.h:26
 honlineclientservercom.h:27
 honlineclientservercom.h:28
 honlineclientservercom.h:29
 honlineclientservercom.h:30
 honlineclientservercom.h:31
 honlineclientservercom.h:32
 honlineclientservercom.h:33
 honlineclientservercom.h:34
 honlineclientservercom.h:35
 honlineclientservercom.h:36
 honlineclientservercom.h:37
 honlineclientservercom.h:38
 honlineclientservercom.h:39
 honlineclientservercom.h:40
 honlineclientservercom.h:41
 honlineclientservercom.h:42
 honlineclientservercom.h:43
 honlineclientservercom.h:44
 honlineclientservercom.h:45
 honlineclientservercom.h:46
 honlineclientservercom.h:47
 honlineclientservercom.h:48
 honlineclientservercom.h:49
 honlineclientservercom.h:50
 honlineclientservercom.h:51
 honlineclientservercom.h:52
 honlineclientservercom.h:53
 honlineclientservercom.h:54
 honlineclientservercom.h:55
 honlineclientservercom.h:56
 honlineclientservercom.h:57
 honlineclientservercom.h:58
 honlineclientservercom.h:59
 honlineclientservercom.h:60
 honlineclientservercom.h:61
 honlineclientservercom.h:62
 honlineclientservercom.h:63
 honlineclientservercom.h:64
 honlineclientservercom.h:65
 honlineclientservercom.h:66
 honlineclientservercom.h:67
 honlineclientservercom.h:68
 honlineclientservercom.h:69
 honlineclientservercom.h:70
 honlineclientservercom.h:71
 honlineclientservercom.h:72
 honlineclientservercom.h:73