#include "TLClient.h"
#include <iostream>

ClassImp(TLClient)

//
//
// Logs:
//
//  $Log: TLClient.cc,v $
//  Revision 1.4  2003/11/15 10:52:35  cvs
//  upgraded TLServeer to new scheme
//
//  Revision 1.3  2003/08/20 10:26:50  cvs
//  Added scripts directory with two utilities now:
//  modify_header which modify existing header and send it database
//  deliver_header program and script which deliver header to clients
//
//  libLComm was made ROOT compatible and GetBias(z) was added to LDataHeader
//
//  Revision 1.2  2003/06/26 09:27:11  cvs
//  added log fields...
//
using namespace std;

 TLClient::TLClient(const ELClientTypes elc, const char* host, 
		   const Int_t port) 
  : TSocket(host,port)
{
  efClType=elc;
  fConnected=kFALSE;
  char str[80],rstr[80];
  sprintf(str,"%d",efClType);
  Send(str);
  Recv(rstr,80);
  if(!strcmp(str,rstr))
    fConnected=kTRUE;
  SetOption(kRecvBuffer,65535*4);
  SetOption(kSendBuffer,65535*4);
}

 TLClient::~TLClient() {
}

 Bool_t TLClient::IsConnected() 
{
  return fConnected;
}

 Int_t TLClient::SendTo(const ELClientTypes elcto,const char* mess) 
{
  char str[80];
  sprintf(str,"S %d",elcto);
  Send(str,kMESS_STRING|kMESS_ACK);
  Int_t rc=Send(mess,kMESS_STRING|kMESS_ACK);
  return rc;
}

 Int_t TLClient::RecvFrom(const ELClientTypes elcfrom, char* mess, Bool_t wait) 
{
  char str[80],rstr[80];
  if(wait)
    sprintf(str,"R %d",elcfrom);
  else
    sprintf(str,"N %d",elcfrom);
  int rc = Send(str);
  if(rc==-1) return rc;
  rc= Recv(rstr,80);
  if(rc==-4) return rc;
  //cout<<"RecvFrom:"<<rstr<<endl;
  sprintf(str,"%d",elcfrom);
  if(strcmp(rstr,str)) {
    //cout<<"Wrong Message Received:"<<rstr<<":"<<str<<":"<<endl;
    return kFALSE;
  }
  rc=Recv(mess,80);
  //cout<<"RecvFromMessage:"<<mess<<endl;
  return rc;
}

 Int_t TLClient::SendTo(const ELClientTypes elcto,const TObject& obj) 
{
  char str[80];
  sprintf(str,"S %d",elcto);
  Send(str,kMESS_STRING|kMESS_ACK);
  TMessage mess(kMESS_OBJECT|kMESS_ACK);
  mess.Reset();
  mess.WriteObject(&obj);
  Int_t rc=Send(mess);
  //obj.Dump();
  return rc;
}

 Int_t TLClient::RecvFrom(const ELClientTypes elcfrom,TObject*& obj, Bool_t wait) 
{
  char str[80],rstr[80];
  TMessage *mess;

  if(wait)
    sprintf(str,"R %d",elcfrom);
  else
    sprintf(str,"N %d",elcfrom);

  int rc = Send(str);
  if(rc==-1) return rc;

  rc=Recv(rstr,80);
  if(rc==-4) return rc;
  //cout<<"RecvFrom"<<rstr<<endl;
  sprintf(str,"%d",elcfrom);
  if(strcmp(rstr,str)) {
    //cout<<"Wrong Message Received:"<<rstr<<":"<<str<<":"<<endl;
    return 0;
  }
  rc=Recv(mess);
  if(mess->What() == kMESS_OBJECT) {
    obj=(TObject*)mess->ReadObject(mess->GetClass());
    delete mess;
    //obj->Dump();
    //printf("POINTER %dn",obj);
    return rc;
  }
  delete mess;
  return -1;
}


 Int_t TLClient::QueueSize(const ELClientTypes elcto) 
  //query TLServer for the size of queue from this client to client elcto
  //if error occured, then negative number is returned
{
  char str[80],rstr[80];
  int size;
  sprintf(str,"Q %d",elcto);
  int rc = Send(str);
  if(rc==-1) return -1;
  rc= Recv(rstr,80);
  if(rc==-4) return -2;
  //cout<<"RecvFrom:"<<rstr<<endl;
  sprintf(str,"%d",elcto);
  if(strcmp(rstr,str)) {
    //cout<<"Wrong Message Received:"<<rstr<<":"<<str<<":"<<endl;
    return -3;
  }
  rc=Recv(rstr,80);
  //cout<<"RecvFromMessage:"<<mess<<endl;
  if (sscanf(rstr,"SIZE %d",&size)!=1) return -4;
  return size;
}


ROOT page - Class index - Top of the page

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.