diff --git a/NPLib/Core/NPSpectraServer.cxx b/NPLib/Core/NPSpectraServer.cxx index 35331733fab6aec8c09301a09b5c73ffecc952dc..d97e3f1bef1957fa015d3dd9aaa9349427c3bf29 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 7c13d4526d319de2922e5052f9ed5f02951ef65c..d1f45d57bf2123615fe00f9936c2e96902843f12 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 e90b5f1a2b5b32983ddf8420bba4b2fa522f6db7..ef182be5b03250e48616f7221615e2ccf3bbe24a 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 cca37e1ea540055e94f50e84545284b029c707b1..8046c0e0fe39d80abfd2c91edcbc83a5dd4fc738 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;