Hi Egon,
To get your test running on a socket, you must use the normal
streaming mode for TClonesArray (default is to bypass Streamer).
Modify your TLRunState constructor as follows:
TLRunState::TLRunState(Int_t programlines) {
fNProgram=programlines;
if (!fgProgram) {
fgProgram = new TClonesArray("TLProgramLine",fNProgram);
fgProgram->BypassStreamer(kFALSE); //THIS LINE IS NEW
}
fProgram = fgProgram;
}
Rene Brun
On Thu, 28 Nov 2002, Egon Pavlica wrote:
> hello,
>
> i have a strange problem. i am sending a class over network. this class
> has TClonesArray of another class. When i send the class, the members of
> the TClonesArray are mixed, but not changed.
>
> in details: i have a class TLRunState, which contains a pointer to
> TClonesArray of TLProgramLine class (fProgram member). class TProgramLine
> contains three Float_t variables and represents a line.
> in an example of client script(copied from tutorial) i generate
> TClonesArray of two program lines, first has values 1,2 and 3
> the second has values 4,5 and 6. This is seen when ->Dump().
> {
> gDebug=1;
> gSystem->Load("libLRunState.so");
> TSocket *sock = new TSocket("localhost", 9090);
> TMessage mess(kMESS_OBJECT);
> TLRunState* glrunstate=new TLRunState(2);
> glrunstate->AddProgramLine(0,1,2,3);//first line
> glrunstate->AddProgramLine(1,4,5,6);//second line
> mess.WriteObject(glrunstate);
> sock->Send(mess);
> sock->Close();
> glrunstate->Dump();
> }
>
> the class is send to server script
>
> {
> gSystem->Load("libLRunState.so");
> gDebug=1;
> TServerSocket *ss = new TServerSocket(9090, kTRUE);
> TSocket *s0 = ss->Accept();
> ss->Close();
> TMonitor *mon = new TMonitor;
> mon->Add(s0);
> while (1) {
> TMessage *mess;
> TSocket *s;
> s = mon->Select();
> s->Recv(mess);
> if (mess->What() == kMESS_OBJECT) {
> printf("got object of class: %s\n", mess->GetClass()->GetName());
> TLRunState *h = (TLRunState *)mess->ReadObject(mess->GetClass());
> h->Dump();
> delete h;
> }
> delete mess;
> }
> s0->Close();
> }
>
> but the ->Dump() is different!! first line is 1,4,2 and 2nd is 5,3,6
>
> to compile libLRunState.so i have attached class header, source,
> linkdef and Makefile.
>
> my system is:
> AMD Athlon(tm) XP 1600+ 512RAM
> linux 2.4.18-10 (based on redhat 7.3+sgi)
> gcc 2.96
> ldd (GNU libc) 2.2.5
> ROOT 3.03/09 18 September 2002
>
> thanks!!
>
> --
> ------------------------------------------
> Egon Pavlica e-mail:egon.pavlica@p-ng.si
> Laboratory for epitaxy and nanostructures
> Nova Gorica Polytechnic (www.p-ng.si)
> tel.+386-5-3315-249
> fax.+386-5-3315-359
> ------------------------------------------
>
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:51:21 MET