25 #ifndef ADF_FrameBlock
28 #ifndef ADF_NarvalInterface
33 #ifndef ROOT_TServerSocket
34 #include "TServerSocket.h"
49 template <
typename Prod_actor>
56 Prod_actor *fProducer;
70 void HandleSocket(TSocket *s);
77 Bool_t Run(Int_t askedloop = -1);
80 template <
typename Prod_actor>
82 fLog(
"WatcherServer"),
90 fSockets( new TList() )
92 fSockets->SetOwner(
true);
95 template <
typename Prod_actor>
111 template <
typename Prod_actor>
115 fLog.SetProcessMethod(
"Init");
118 NarvalInterface::process_config(fPathProd.data(),&err);
120 fLog <<
warning <<
" in NarvalInterface::process_config " <<
nline;
126 Prod_actor::process_config(fPathProd.data(),&err);
128 fLog <<
error <<
" in process_config for Producer " <<
dolog;
131 fProducer =
new Prod_actor();
132 fProducer->process_initialise(&err);
134 fLog <<
error <<
" in process_initialse for Producer " <<
dolog;
139 fServ =
new TServerSocket(fPort, kTRUE);
143 fMon =
new TMonitor();
150 template <
typename Prod_actor>
153 printf(
"************** EMULATOR MAIN LOOP ************** \n");
155 Int_t nb_loop = 0, nb_loop_throwaway = 0; UInt_t err = 0u;
159 cout <<
" Get Block " <<
endl;
160 err = fProducer->ProcessBlock(fBProd);
162 cout <<
" Block " << fBProd.GetSize() <<
endl;
166 if ( fBProd.GetSize() == 0u )
171 if ( (s = fMon->Select(1)) != (TSocket*)-1 ) {
177 cout <<
" Empty cycle " << nb_loop_throwaway <<
endl;
181 if ( nb_loop == askedloop )
187 printf(
"nb_loop %d, nb_loop_unsent %d, error %d\n",nb_loop,nb_loop_throwaway,err);
188 printf(
"************** EMULATOR MAIN LOOP ************** \n");
192 template <
typename Prod_actor>
197 printf(
"HANDLE SOCKET \n");
200 if (s->IsA() == TServerSocket::Class()) {
201 TSocket *sock = ((TServerSocket*)s)->Accept();
205 fLog <<
info <<
"accepted connection from "
206 << sock->GetInetAddress().GetHostName() <<
dolog;
210 size = fBProd.GetSize() ;
211 sock->SendRaw(&size,
sizeof(size));
213 sock->SendRaw(fBProd.GetBufferIO()->GetAddress(),
size);
219 fLog <<
info <<
"closed connection from "
220 << s->GetInetAddress().GetHostName() <<
dolog;
246 for (UInt_t i = 0u; i <nb_times ; i++) {
printf("******************************************************************** \n")
header file for FrameBlock.cpp
LogMessage & error(LogMessage &)
LogMessage & warning(LogMessage &)
LogMessage & nline(LogMessage &)
Bool_t Run(Int_t askedloop=-1)
WatcherServer(const char *path, UInt_t bsize=aMByte)
header file for BasicAFP.cpp
LogMessage & info(LogMessage &)
manipulator to modify the LogMessage
LogMessage & dolog(LogMessage &)
void RunWatcherServer(const char *path, Int_t nbloop=-1, UInt_t bsize=aMByte)
Base class for a Log message.
header file for RootAFP.cpp
ADF::LogMessage & endl(ADF::LogMessage &log)
header file for NarvalInterface.cpp
void InfiniteWatcherServer(const char *path, UInt_t bsize=aMByte, UInt_t nb_times=10000u)
void HandleSocket(TSocket *s)
It implements an in-memory block of Frames.