1 // Author: Mihai Niculescu 2013
3 /**************************************************************************
4 * Copyright(c) 1998-2013, ALICE Experiment at CERN, all rights reserved. *
5 * See http://aliceinfo.cern.ch/Offline/AliRoot/License.html for *
6 * full copyright notice. *
7 **************************************************************************/
12 #include <TCondition.h>
13 #include <TBufferFile.h>
15 #include <TObjArray.h>
16 #include <TStreamerInfo.h>
19 #include <AliESDEvent.h>
20 #include <AliESDfriend.h>
21 #include <AliRawReader.h>
22 #include <AliRunLoader.h>
23 #include <AliReconstruction.h>
25 #include <AliNetMessage.h>
26 #include <AliSocket.h>
30 #include "AliRecoServerThread.h"
32 ClassImp(AliRecoServerThread)
33 AliRecoServerThread::AliRecoServerThread(zmq::context_t *context, AliReconstruction* reco)
34 : AliThreadedSocket(context, AliThreadedSocket::WRITE),
41 AliRecoServerThread::~AliRecoServerThread()
46 Bool_t AliRecoServerThread::Start(const char* endpoint)
50 return AliThreadedSocket::Start();
53 void* AliRecoServerThread::RunThrdWrite(void* arg)
55 TThread::SetCancelAsynchronous();
56 TThread::SetCancelOn();
58 AliRecoServerThread* recoTh = (AliRecoServerThread*)arg;
60 const char* host = recoTh->GetHost();
61 zmq::context_t* context = recoTh->GetContext();
62 AliReconstruction* reco = recoTh->GetReconstruction();
64 // generate a publish socket
65 AliSocket publisher(context, ZMQ_PUB);
73 if (reco->GetAbort() != TSelector::kContinue) return 0;
75 reco->SlaveBegin(NULL);
76 if (reco->GetAbort() != TSelector::kContinue) return 0;
78 //******* The loop over events
80 while ( reco->HasNextEventAfter(iEvent) ) {
81 // check if process has enough resources
82 if (!reco->HasEnoughResources(iEvent)) break;
83 Bool_t status = reco->ProcessEvent(iEvent);
87 event = reco->GetESDEvent();
89 AliNetMessage tmess(kMESS_OBJECT);
91 tmess.WriteObject(event);
93 publisher.Send(tmess);
98 reco->Abort("ProcessEvent",TSelector::kAbortFile);
101 reco->CleanProcessedEvent();
102 if(recoTh->Condition()->TimedWaitRelative(500)==0){
107 reco->SlaveTerminate();
108 if (reco->GetAbort() != TSelector::kContinue) return 0;
110 if (reco->GetAbort() != TSelector::kContinue) return 0;