From 85252fd9c8ac525c46a827b49312a850937914a4 Mon Sep 17 00:00:00 2001 From: Adrien Matta <matta@lpccaen.in2p3.fr> Date: Mon, 25 Feb 2019 15:28:59 +0100 Subject: [PATCH] * Adding facility to pass RawTree pointer to NPSpectraServer - Raw Tree could be requested via NPClientSpectra --- NPLib/Core/NPSpectraServer.cxx | 15 +++++++---- NPLib/Core/NPSpectraServer.h | 4 +++ NPLib/Online/NPSpectraClient.cxx | 43 ++++++++++++++++++++++++++++++-- NPLib/Online/NPSpectraClient.h | 1 + 4 files changed, 56 insertions(+), 7 deletions(-) diff --git a/NPLib/Core/NPSpectraServer.cxx b/NPLib/Core/NPSpectraServer.cxx index 35331733f..d97e3f1be 100644 --- a/NPLib/Core/NPSpectraServer.cxx +++ b/NPLib/Core/NPSpectraServer.cxx @@ -62,19 +62,18 @@ NPL::SpectraServer::SpectraServer(){ m_Spectra = new TList; NPL::SendInformation("NPL::SpectraServer","Server started"); + m_RawTree = NULL; } /////////////////////////////////////////////////////////////////////////////// void NPL::SpectraServer::CheckRequest(){ - /*FIXME if(m_Server && m_Monitor){ m_Monitor->ResetInterrupt(); - TSocket* s = m_Monitor->Select(); - if(s){ + TSocket* s = m_Monitor->Select(1); + if(s && s!=(TSocket*)-1){ HandleSocket(s); } } - */ } //////////////////////////////////////////////////////////////////////////////// @@ -107,7 +106,7 @@ void NPL::SpectraServer::HandleSocket(TSocket* s){ } // send requested object back - static TMessage answer(kMESS_OBJECT); + static TMessage answer(kMESS_OBJECT|kMESS_ACK); answer.SetCompressionLevel(1); answer.Reset(); TObject* h =NULL; @@ -125,6 +124,12 @@ void NPL::SpectraServer::HandleSocket(TSocket* s){ answer.WriteObject(tree); s->Send(answer); } + + else if (!strcmp(request, "RequestRawTree")){ + answer.WriteObject(m_RawTree); + s->Send(answer); + } + else{ h = m_Spectra->FindObject(request); diff --git a/NPLib/Core/NPSpectraServer.h b/NPLib/Core/NPSpectraServer.h index 7c13d4526..d1f45d57b 100644 --- a/NPLib/Core/NPSpectraServer.h +++ b/NPLib/Core/NPSpectraServer.h @@ -26,6 +26,7 @@ #include "TServerSocket.h" #include "TMonitor.h" #include "TMessage.h" +#include "TTree.h" #include "TList.h" #include "TH1.h" #include "TH2.h" @@ -52,11 +53,14 @@ namespace NPL{ void FillSpectra(const std::string& name,const double& valx); void FillSpectra(const std::string& name,const double& valx, const double& valy); void CheckRequest(); + // Use for Online purpose + void SetRawTree(TTree* tree){m_RawTree=tree;} ; private: bool m_stop; TServerSocket* m_Server; TMonitor* m_Monitor; + TTree* m_RawTree; TList* m_Sockets; TList* m_Spectra; }; diff --git a/NPLib/Online/NPSpectraClient.cxx b/NPLib/Online/NPSpectraClient.cxx index e90b5f1a2..ef182be5b 100644 --- a/NPLib/Online/NPSpectraClient.cxx +++ b/NPLib/Online/NPSpectraClient.cxx @@ -63,7 +63,6 @@ bool NPL::SpectraClient::Connect(){ m_Sock = new TSocket(m_Address.c_str(),m_Port); if(m_Sock->IsValid()){ NPL::SendInformation("NPL::SpectraClient","Successful connection to spectra server"); - Sync(); return true; } else{ @@ -187,7 +186,7 @@ TTree* NPL::SpectraClient::GetTree(){ } TMessage* message=NULL; - m_Sock->Send("RequestTree",kMESS_STRING||kMESS_ACK); + m_Sock->Send("RequestTree",kMESS_STRING|kMESS_ACK); if(m_Sock->Recv(message)<=0){ if(m_Sock){ @@ -211,6 +210,46 @@ TTree* NPL::SpectraClient::GetTree(){ return NULL; } } +//////////////////////////////////////////////////////////////////////////////// +TTree* NPL::SpectraClient::GetRawTree(){ + if(!m_Sock || !(m_Sock->IsValid())){ + if(m_Sock){ + m_Sock->Close("force"); + delete m_Sock; + m_Sock = NULL; + } + NPL::SendWarning("NPL::SpectraClient","Update failed: Connection lost"); + + return NULL; + } + + TMessage* message=NULL; + m_Sock->Send("RequestRawTree",kMESS_STRING|kMESS_ACK); + + if(m_Sock->Recv(message)<=0){ + if(m_Sock){ + m_Sock->Close("force"); + delete m_Sock; + m_Sock = NULL; + } + + NPL::SendWarning("NPL::SpectraClient","Update failed: message return unreadable"); + + return NULL; + } + + if(message){ + TTree* tree = (TTree*) message->ReadObject(message->GetClass()); + return tree; + } + + else{ + NPL::SendInformation("NPL::SpectraClient","Server return an empty tree"); + return NULL; + } +} + + //////////////////////////////////////////////////////////////////////////////// diff --git a/NPLib/Online/NPSpectraClient.h b/NPLib/Online/NPSpectraClient.h index cca37e1ea..8046c0e0f 100644 --- a/NPLib/Online/NPSpectraClient.h +++ b/NPLib/Online/NPSpectraClient.h @@ -47,6 +47,7 @@ namespace NPL{ void UpdateTH1(TH1* Old, TH1* New ); // Access the tree TTree* GetTree(); + TTree* GetRawTree(); private: // The sochet use for connection TSocket* m_Sock; std::string m_Address; -- GitLab