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