]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - EVE/EveBase/AliEveEventManager.cxx
1. Fixing memory leaks in alistorage
[u/mrichter/AliRoot.git] / EVE / EveBase / AliEveEventManager.cxx
index 3e7eae11067bcf28bd30cb7e647c3b88f0d3116e..18e310483f2fe7a594fd68a868197d49972cb539 100644 (file)
@@ -848,7 +848,61 @@ void AliEveEventManager::GotoEvent(Int_t event)
     }
     if (fExternalCtrl)
     {
-        throw (kEH + "Event-loop is under external control.");
+        // throw (kEH + "Event-loop is under external control.");
+
+#ifdef ZMQ
+
+      if (fESD) {
+       int runNumber=fESD->GetRunNumber();
+       int eventNumber=fESD->GetEventNumberInFile();
+       struct serverRequestStruct *requestMessage = new struct serverRequestStruct;
+       struct eventStruct eventToLoad;
+       eventToLoad.runNumber = runNumber;
+       // // careful! check if exists!
+       eventToLoad.eventNumber = eventNumber;
+
+       if (event == -1) {
+         requestMessage->messageType = REQUEST_GET_LAST_EVENT;
+       } 
+       else  if (event == 0) {
+         requestMessage->messageType = REQUEST_GET_FIRST_EVENT;
+       } 
+       else  if (event == 1) {
+         requestMessage->messageType = REQUEST_GET_PREV_EVENT;
+       } 
+       else  if (event == 2) {
+         requestMessage->messageType = REQUEST_GET_NEXT_EVENT;
+       } 
+
+       requestMessage->event = eventToLoad;
+
+       AliStorageEventManager *eventManager =
+         AliStorageEventManager::GetEventManagerInstance();
+       AliESDEvent *resultEvent = NULL;
+      
+       eventManager->CreateSocket(SERVER_COMMUNICATION_REQ);
+       fMutex.Lock();
+       eventManager->Send(requestMessage,SERVER_COMMUNICATION_REQ);
+       resultEvent = eventManager->GetEvent(SERVER_COMMUNICATION_REQ);
+
+       if(resultEvent)
+         {
+           cout<<"Event Manager -- first/last or prev/next event loaded "<<resultEvent->GetRunNumber() <<endl;
+           DestroyElements();
+           InitOCDB(resultEvent->GetRunNumber());
+           SetEvent(0,0,resultEvent,0);
+           fMutex.UnLock();
+
+         }
+       else{cout<<"No first/last event is avaliable."<<endl;}
+      }
+      else {
+
+      }
+
+
+#endif 
+
     }
     else if (!fIsOpen)
     {