diff --git a/NPLib/Online/NPSpectraClient.cxx b/NPLib/Online/NPSpectraClient.cxx index 473b99a189622441fe9c5f92cdd209d29d18b584..e90b5f1a2b5b32983ddf8420bba4b2fa522f6db7 100644 --- a/NPLib/Online/NPSpectraClient.cxx +++ b/NPLib/Online/NPSpectraClient.cxx @@ -173,6 +173,45 @@ bool NPL::SpectraClient::Update(std::string name){ return true; } } +//////////////////////////////////////////////////////////////////////////////// +TTree* NPL::SpectraClient::GetTree(){ + 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("RequestTree",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; + } +} + //////////////////////////////////////////////////////////////////////////////// TList* NPL::SpectraClient::GetSpectra(){ diff --git a/NPLib/Online/NPSpectraClient.h b/NPLib/Online/NPSpectraClient.h index fb67e65df181429b301dd7d45e7ccee05ac62126..cca37e1ea540055e94f50e84545284b029c707b1 100644 --- a/NPLib/Online/NPSpectraClient.h +++ b/NPLib/Online/NPSpectraClient.h @@ -27,6 +27,7 @@ #include "TMessage.h" #include "TList.h" #include "TH1.h" +#include "TTree.h" #include "string" namespace NPL{ @@ -44,6 +45,8 @@ namespace NPL{ // Update a single spectra bool Update(std::string name); void UpdateTH1(TH1* Old, TH1* New ); + // Access the tree + TTree* GetTree(); private: // The sochet use for connection TSocket* m_Sock; std::string m_Address;