GSI Object Oriented Online Offline (Go4)  GO4-5.3.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
TGo4DabcProxy.cxx
Go to the documentation of this file.
1 // $Id: TGo4DabcProxy.cxx 1461 2015-05-29 11:12:14Z linev $
2 //-----------------------------------------------------------------------
3 // The GSI Online Offline Object Oriented (Go4) Project
4 // Experiment Data Processing at EE department, GSI
5 //-----------------------------------------------------------------------
6 // Copyright (C) 2000- GSI Helmholtzzentrum für Schwerionenforschung GmbH
7 // Planckstr. 1, 64291 Darmstadt, Germany
8 // Contact: http://go4.gsi.de
9 //-----------------------------------------------------------------------
10 // This software can be used under the license agreements as stated
11 // in Go4License.txt file which is part of the distribution.
12 //-----------------------------------------------------------------------
13 
14 #include "TGo4DabcProxy.h"
15 
16 #ifndef WITHOUT_DABC
17 
18 #include "TROOT.h"
19 #include "TGraph.h"
20 #include "TClass.h"
21 #include "TAxis.h"
22 #include "TTimer.h"
23 #include "TBufferFile.h"
24 #include "TMemFile.h"
25 
26 #include "TGo4Log.h"
27 #include "TGo4Slot.h"
28 #include "TGo4ObjectManager.h"
29 
30 #include "dabc/api.h"
31 #include "dabc/version.h"
32 #include "dabc/Hierarchy.h"
33 #include "dabc/Manager.h"
34 #include "dabc/Publisher.h"
35 #include "dabc/Configuration.h"
36 
37 extern "C" int R__unzip_header(int *nin, unsigned char *bufin, int *lout);
38 extern "C" void R__unzip(int *nin, unsigned char* bufin, int *lout, unsigned char *bufout, int *nout);
39 
40 bool IsRateHistory(const dabc::Hierarchy& item)
41 {
42  if ((item.GetField("dabc:kind").AsStr() == "rate") ||
43  (item.GetField("dabc:history").AsInt() > 0)) return kTRUE;
44  return kFALSE;
45 }
46 
47 TString GetRootClassName(const dabc::Hierarchy& item)
48 {
49  std::string kind = item.GetField("dabc:kind").AsStr();
50  if (kind.find("ROOT.") == 0) {
51  kind.erase(0,5);
52  return kind.c_str();
53  }
54  if (IsRateHistory(item)) return "TGraph";
55 
56  return "";
57 }
58 
59 // we use fake file only to correctly reconstruct streamer infos
60 class TFakeFile : public TMemFile {
61  public:
62  TList* mylist;
63 
64  TFakeFile(TList* sinfo) : TMemFile("dummy.file", "RECREATE"), mylist(sinfo)
65  {
66  gROOT->GetListOfFiles()->Remove(this);
67  }
68 
69  virtual ~TFakeFile() {}
70 
71  virtual TList* GetStreamerInfoList() { return (TList*) mylist->Clone(); }
72 
73 };
74 
75 
76 class TGo4DabcAccess : public TGo4Access {
77  protected:
78  std::string fNodeName;
79  std::string fObjName;
80  std::string fItemName;
81  std::string fRootClassName;
82  std::string fMasterName;
83  std::string fMasterItemName;
84  bool fIsRate;
87  TString fxRecvPath;
88  dabc::Buffer fRawData;
89  Bool_t fCompression;
90 
91  public:
92 
93  TGo4DabcAccess(const std::string& node, const std::string& sinfoname) :
94  TGo4Access(),
95  fNodeName(node),
96  fObjName(),
97  fItemName(),
98  fRootClassName(),
99  fMasterName(),
100  fMasterItemName(),
101  fIsRate(false),
102  fHistoryLength(0),
103  fxReceiver(0),
104  fxRecvPath(),
105  fRawData(),
106  fCompression(kTRUE)
107  {
108  fObjName = "StreamerInfo";
109  fItemName = sinfoname;
110  fRootClassName = "TList";
111 
112  //printf("Create MASTER ACCESS %p\n", this);
113  }
114 
115 
116  TGo4DabcAccess(const std::string& node, const dabc::Hierarchy& item) :
117  TGo4Access(),
118  fNodeName(node),
119  fObjName(),
120  fItemName(),
121  fRootClassName(),
122  fMasterName(),
123  fMasterItemName(),
124  fIsRate(false),
125  fHistoryLength(0),
126  fxReceiver(0),
127  fxRecvPath(),
128  fRawData(),
129  fCompression(kTRUE)
130  {
131  fObjName = item.GetName();
132  fItemName = item.ItemName();
133  std::string kind = item.GetField(dabc::prop_kind).AsStr();
134  fHistoryLength = item.GetField(dabc::prop_history).AsInt();
135 
136  fMasterName = item.GetField(dabc::prop_masteritem).AsStr();
137  fMasterItemName = item.FindMaster().ItemName();
138 
139  if (kind.find("ROOT.") == 0) {
140  kind.erase(0,5);
141  fRootClassName = kind;
142  } else
143  if (kind=="rate") {
144  fIsRate = true;
145  if (fHistoryLength > 0) fRootClassName = "TGraph";
146  }
147 
148  //printf("Create ACCESS %p\n", this);
149  }
150 
151  virtual ~TGo4DabcAccess()
152  {
153  //printf("Destroy ACCESS %p\n", this);
154  }
155 
156  virtual Bool_t IsRemote() const { return kTRUE; }
157 
158  virtual Bool_t CanGetObject() const { return kFALSE; }
159 
160  virtual Bool_t GetObject(TObject* &obj, Bool_t &owner) const { return kFALSE; }
161 
162  virtual TClass* GetObjectClass() const
163  {
164  if (fRootClassName.length() > 0)
165  return TGo4Proxy::GetClass(fRootClassName.c_str());
166  return 0;
167  }
168 
169  virtual const char* GetObjectName() const
170  {
171  return fObjName.c_str();
172  }
173 
174  virtual const char* GetObjectClassName() const
175  {
176  if (fRootClassName.length()>0) return fRootClassName.c_str();
177 
178  return "dabc::Hierarchy";
179  }
180 
181 
182  virtual Int_t AssignObjectTo(TGo4ObjectManager* rcv, const char* path)
183  {
184  if (rcv==0) return 0;
185 
186  dabc::WorkerRef wrk = dabc::mgr.FindItem("/Go4ReplWrk");
187  if (wrk.null()) return 0;
188 
189  if (fIsRate && (fHistoryLength>0)) {
190  dabc::CmdGetBinary cmd2;
191  cmd2.SetStr("Item", fItemName);
192  cmd2.SetStr("Kind","hierarchy");
193  cmd2.SetStr("Query", Form("history=%d",fHistoryLength));
194  cmd2.SetTimeout(10.);
195  cmd2.SetReceiver(fNodeName + dabc::Publisher::DfltName());
196 
197  cmd2.SetPtr("#DabcAccess", this);
198  fxReceiver = rcv;
199  fxRecvPath = path;
200  wrk()->Assign(cmd2);
201 
202  if (dabc::mgr.GetCommandChannel().Submit(cmd2)) return 2;
203  } else
204 
205  if (!fRootClassName.empty()) {
206 
207  TClass *cl = TClass::GetClass(fRootClassName.c_str());
208  if (!cl) {
209  TGo4Log::Error("GetObject Unknown class %s", fRootClassName.c_str());
210  return 0;
211  }
212 
213  if (!cl->InheritsFrom(TObject::Class())) {
214  // in principle user should call TKey::ReadObjectAny!
215  TGo4Log::Error("GetObject Class %s not derived from TObject", fRootClassName.c_str());
216  return 0;
217  }
218 
219  dabc::CmdGetBinary cmd(fItemName, "root.bin", fCompression ? "zipped" : "");
220  // cmd.SetStr("Item", fItemName);
221  // cmd.SetUInt("version", version);
222  cmd.SetTimeout(10.);
223  cmd.SetReceiver(fNodeName + dabc::Publisher::DfltName());
224 
225  cmd.SetPtr("#DabcAccess", this);
226  fxReceiver = rcv;
227  fxRecvPath = path;
228 
229  //printf("Request for recv %p path %s master %s\n", rcv, path, fMasterName.c_str());
230  wrk()->Assign(cmd);
231 
232  if (dabc::mgr.GetCommandChannel().Submit(cmd)) return 2;
233  }
234 
235  return 0;
236  }
237 
239  double ProcessCommandReply(dabc::Command cmd)
240  {
241  // DOUT0("ProcessCommandReply");
242 
243  if (cmd.GetResult() != dabc::cmd_true) {
244  TGo4Log::Error("dabc::Command %s execution failed", cmd.GetName());
245  return -1;
246  }
247 
248  if (fRawData.null())
249  fRawData = cmd.GetRawData();
250 
251  if (fRawData.null() || (fRawData.NumSegments()==0)) {
252  TGo4Log::Error("Did not get raw data from dabc::Command %s", cmd.GetName());
253  return -1;
254  }
255 
256  if (fIsRate && (fHistoryLength>0)) {
257  dabc::Hierarchy res;
258  res.Create("get");
259  res.SetVersion(cmd.GetUInt("version"));
260  res.ReadFromBuffer(fRawData);
261 
262  //DOUT0("GET:%s RES = \n%s", item.ItemName().c_str(), res.SaveToXml(dabc::xmlmask_History).c_str());
263 
264  dabc::HistoryIter iter = res.MakeHistoryIter();
265  int cnt = 0;
266  while (iter.next()) cnt++;
267 
268  // DOUT0("ITERATOR cnt %d", cnt);
269 
270  if (cnt==0) return kFALSE;
271 
272  TGraph* gr = new TGraph(cnt);
273  gr->SetName(fObjName.c_str());
274  gr->SetTitle(Form("%s ratemeter", fItemName.c_str()));
275  int i = 0;
276  while (iter.next()) {
277 
278  double v = iter.GetField("value").AsDouble();
279  uint64_t tm = iter.GetField("time").AsUInt();
280 
281  // DOUT0("pnt %d tm %20u value %5.2f", i, tm / 1000, v);
282 
283  i++;
284  gr->SetPoint(cnt-i, tm / 1000, v);
285  }
286 
287  gr->GetXaxis()->SetTimeDisplay(1);
288  gr->GetXaxis()->SetTimeFormat("%H:%M:%S%F1970-01-01 00:00:00");
289 
290  DoObjectAssignement(fxReceiver, fxRecvPath.Data(), gr, kTRUE);
291  return -1.;
292  }
293 
294  if (!fRootClassName.empty()) {
295  TClass *cl = TClass::GetClass(fRootClassName.c_str());
296 
297  // dabc::BinDataHeader* hdr = (dabc::BinDataHeader*) fRawData.SegmentPtr();
298 
299  TGo4Slot* tgtslot = fxReceiver->GetSlot(fxRecvPath.Data());
300 
301  TGo4Slot* masterslot = 0;
302 
303  if (!fMasterName.empty() && tgtslot && tgtslot->GetParent())
304  masterslot = tgtslot->GetParent()->FindSlot(fMasterName.c_str());
305 
306  if (masterslot) {
307  // always request master
308 
309  Int_t local_master_version = 0;
310 
311  if (!masterslot->GetIntPar("dabc_version", local_master_version))
312  local_master_version = 0;
313 
314  if (local_master_version >= cmd.GetInt("MVersion")) {
315  //printf("MASTER version %d required %d EXISTS!!!\n", local_master_version, cmd.GetInt("MVersion"));
316  } else
317  if (masterslot->GetPar("dabc_loading")!=0) {
318  // if master slot loading, we will try to check again 1 sec later
319  return 1.;
320  } else {
321 
322  TGo4DabcAccess* maccess = new TGo4DabcAccess(fNodeName, fMasterItemName);
323 
324  if (maccess->AssignObjectToSlot(fxReceiver) != 2) {
325  delete maccess;
326  TGo4Log::Error("Fail to request MASTER item %s from DABC node %s", fMasterItemName.c_str(), fNodeName.c_str());
327  return -1;
328  }
329 
330  masterslot->SetPar("dabc_loading", "true");
331  return 1.; // try after 1 seconds
332  }
333  }
334 
335  TGo4Log::Debug("Item %s raw_data size %u master_version %u", fItemName.c_str(), fRawData.GetTotalSize(), cmd.GetInt("MVersion"));
336 
337  char *pobj = (char*) cl->New();
338 
339  if (!pobj) {
340  TGo4Log::Error("ReadObj - Cannot create new object of class %s", cl->GetName());
341  return true;
342  }
343 
344  Int_t baseOffset = cl->GetBaseClassOffset(TObject::Class());
345  if (baseOffset==-1) {
346  // cl does not inherit from TObject.
347  // Since this is not possible yet, the only reason we could reach this code
348  // is because something is screw up in the ROOT code.
349  TGo4Log::Error("ReadObj Incorrect detection of the inheritance from TObject for class %s.",
350  cl->GetName());
351  return -1;
352  }
353 
354  TObject *tobj = (TObject*)(pobj+baseOffset);
355  // Create an instance of this class
356 
357  char* rawbuf(0);
358  Int_t rawbuflen(0);
359 
360  if (fCompression) {
361 
362  int sizeinp(fRawData.GetTotalSize()), sizeout(0), irep(0);
363 
364  if (R__unzip_header(&sizeinp, (unsigned char*) fRawData.SegmentPtr(), &sizeout)) {
365  printf("Fail to decode zip header\n");
366  } else {
367  rawbuf = (char*) malloc(sizeout);
368 
369  R__unzip(&sizeinp, (unsigned char*) fRawData.SegmentPtr(), &sizeout, (unsigned char*) rawbuf, &irep);
370 
371  rawbuflen = irep;
372  }
373  } else {
374  rawbuf = (char*) fRawData.SegmentPtr();
375  rawbuflen = fRawData.GetTotalSize();
376  }
377 
378  if (rawbuflen>0) {
379  TBufferFile buf(TBuffer::kRead, rawbuflen, rawbuf, kFALSE);
380  buf.MapObject(pobj,cl);
381  tobj->Streamer(buf);
382  } else {
383  cl->Destructor(pobj);
384  pobj = 0;
385  tobj = 0;
386  }
387 
388  if (fCompression) free(rawbuf);
389 
390  if ((fObjName == "StreamerInfo") &&
391  (fRootClassName == "TList") &&
392  tobj && tobj->InheritsFrom(TList::Class()) &&
393  fMasterName.empty()) {
394 
395  TFakeFile fff((TList*) tobj);
396  fff.ReadStreamerInfo();
397 
398  TGo4Log::Debug("Get streamer infos from remote");
399  }
400 
401  if (tobj) {
402  if (tgtslot) {
403  tgtslot->RemovePar("dabc_loading"); // indicate that loading is finished
404  tgtslot->SetIntPar("dabc_version", cmd.GetInt("BVersion"));
405  }
406  DoObjectAssignement(fxReceiver, fxRecvPath.Data(), tobj, kTRUE);
407  }
408  return -1;
409  }
410 
411  return -1;
412  }
413 
414 };
415 
416 
417 // ===================================================================================
418 
419 // Timer used to invoke reply in the main process
420 
421 class TReplyTimer : public TTimer {
422  public:
423  dabc::Command fCmd;
424 
425  TReplyTimer(dabc::Command cmd) :
426  TTimer(0),
427  fCmd(cmd)
428  {
429  Add();
430  }
431 
432  virtual Bool_t Notify()
433  {
434  double res_tm = -1.;
435 
436  TGo4DabcAccess* acc = 0;
437 
438  if (!fCmd.null()) {
439 
440  acc = (TGo4DabcAccess*) fCmd.GetPtr("#DabcAccess");
441  TGo4DabcProxy* prox = (TGo4DabcProxy*) fCmd.GetPtr("#DabcProxy");
442 
443  if (acc) {
444  res_tm = acc->ProcessCommandReply(fCmd);
445  } else
446  if (prox) {
447  prox->ReplyCommand(&fCmd);
448  fCmd.Reply();
449  }
450  }
451 
452  if (res_tm<0) {
453  fCmd.Release();
454  if (acc) delete acc;
455  Remove();
456  delete this;
457  return kFALSE;
458  }
459 
460  Start((Long_t)res_tm*1000, kTRUE);
461 
462  return kTRUE;
463  }
464 };
465 
466 class ReplyWorker : public dabc::Worker {
467  protected:
468  virtual bool ReplyCommand(dabc::Command cmd)
469  {
470  if ((cmd.GetPtr("#DabcAccess") != 0) || (cmd.GetPtr("#DabcProxy") != 0)) {
471  // DOUT0("CreateReplTimer");
472  new TReplyTimer(cmd);
473  return false;
474  }
475 
476  return dabc::Worker::ReplyCommand(cmd);
477  }
478 
479  public:
480  ReplyWorker(const std::string& name) :
481  dabc::Worker(MakePair(name))
482  {
483  }
484 
485 };
486 
487 
488 
489 // ===================================================================================
490 
492  protected:
493  dabc::Hierarchy fParent;
494  dabc::Hierarchy fChild;
495  TString fClNameBuf;
496  unsigned fCnt;
497 
498  public:
499  TGo4DabcLevelIter(const dabc::Hierarchy& item) :
500  TGo4LevelIter(),
501  fParent(item),
502  fChild(),
503  fCnt(0)
504  {
505  }
506 
507  virtual ~TGo4DabcLevelIter() {}
508 
509  virtual Bool_t next()
510  {
511  if (fParent.NumChilds()==0) return kFALSE;
512 
513  if (fChild.null()) {
514  fCnt = 0;
515  fChild = fParent.GetChild(fCnt);
516 // printf("Extract first child %s from iter\n", fChild.GetName());
517  } else {
518  fCnt++;
519  fChild.Release();
520  if (fCnt>=fParent.NumChilds()) return kFALSE;
521  fChild = fParent.GetChild(fCnt);
522 // printf("Extract %u child %s from iter\n", fCnt, fChild.GetName());
523  }
524 
525  return !fChild.null();
526  }
527 
528  virtual Bool_t isfolder() { return fChild.NumChilds()>0; }
529 
530  virtual Int_t getflag(const char* flagname)
531  {
532  if (strcmp(flagname,"IsRemote")==0) return 1;
533  return -1;
534  }
535 
537  {
538  return fChild.NumChilds() > 0 ? new TGo4DabcLevelIter(fChild) : 0;
539  }
540 
541  virtual TGo4Slot* getslot() { return 0; }
542 
543  virtual const char* name() { return fChild.GetName(); }
544  virtual const char* info() { return "item from dabc"; }
545  virtual Int_t sizeinfo() { return 0; }
546 
547  virtual Int_t GetKind() {
548  if (isfolder()) return TGo4Access::kndFolder;
549 
550  if (IsRateHistory(fChild)) return TGo4Access::kndObject;
551 
552  fClNameBuf = GetRootClassName(fChild);
553 
554  if (fClNameBuf.Length()>0) return TGo4Access::kndObject;
555 
556  return -1;
557  }
558 
559  virtual const char* GetClassName()
560  {
561  if (IsRateHistory(fChild)) return "TGraph";
562 
563  fClNameBuf = GetRootClassName(fChild);
564 
565  if (fClNameBuf.Length()>0) return fClNameBuf.Data();
566 
567  return "dabc::Hierarchy";
568  }
569 };
570 
571 
572 // =====================================================================================
573 
574 
576  TGo4ServerProxy(),
577  fNodeName(),
578  fxHierarchy(0),
579  fxParentSlot(0)
580 {
581 }
582 
584 {
585  if (fxHierarchy!=0) {
586  delete ((dabc::Hierarchy*) fxHierarchy);
587  fxHierarchy = 0;
588  }
589 }
590 
592 {
593  return DABC_RELEASE;
594 }
595 
596 Bool_t TGo4DabcProxy::Connect(const char* nodename)
597 {
598  if (!dabc::CreateManager("cmd", 0)) return kFALSE;
599 
600  std::string node = dabc::MakeNodeName(nodename);
601 
602  if (!dabc::ConnectDabcNode(node)) {
603  fNodeName = node;
604  return kFALSE;
605  }
606 
607  dabc::WorkerRef wrk = dabc::mgr.FindItem("/Go4ReplWrk");
608 
609  if (wrk.null()) {
610  wrk = new ReplyWorker("/Go4ReplWrk");
611  wrk()->AssignToThread(dabc::mgr.thread());
612  }
613 
614  // printf("Connection to %s done\n", nodename);
615 
616  fNodeName = node;
617 
618  return UpdateHierarchy(kTRUE);
619 }
620 
621 Bool_t TGo4DabcProxy::ReplyCommand(void* _cmd)
622 {
623  dabc::Command cmd = *((dabc::Command*)_cmd);
624 
625  if (cmd.IsName(dabc::CmdGetNamesList::CmdName())) {
626 
627  dabc::Buffer buf = cmd.GetRawData();
628 
629  if (buf.null()) return kFALSE;
630 
631  if (fxHierarchy==0) {
632  fxHierarchy = new dabc::Hierarchy();
633  }
634 
635  dabc::Hierarchy& hierarchy = *((dabc::Hierarchy*) fxHierarchy);
636  hierarchy.Release();
637 
638  // DOUT0("Get raw data %p %u", buf.SegmentPtr(), buf.GetTotalSize());
639  if (!hierarchy.ReadFromBuffer(buf)) return kFALSE;
640 
641  if (fxParentSlot!=0)
643  }
644 
645  //printf("Read from DABC node %s done\n", fNodeName.Data());
646  return kTRUE;
647 }
648 
649 
651 {
652  if (fNodeName.Length() == 0) return kFALSE;
653 
654  dabc::CmdGetNamesList cmd2;
655  cmd2.SetReceiver(std::string(fNodeName.Data()) + dabc::Publisher::DfltName());
656  cmd2.SetTimeout(10.);
657 
658  dabc::WorkerRef wrk = dabc::mgr.FindItem("/Go4ReplWrk");
659 
660  if (!sync && !wrk.null()) {
661  cmd2.SetPtr("#DabcProxy", this);
662  wrk()->Assign(cmd2);
663 
664  dabc::mgr.GetCommandChannel().Submit(cmd2);
665  return kTRUE;
666  }
667 
668  if (dabc::mgr.GetCommandChannel().Execute(cmd2)!=dabc::cmd_true) {
669  TGo4Log::Error("Fail to get remote hierarchy");
670  return kFALSE;
671  }
672 
673  return ReplyCommand(&cmd2);
674 }
675 
677 {
678  fxParentSlot = slot;
679 }
680 
682 {
683 }
684 
686 {
687  if (fxHierarchy == 0) return kFALSE;
688 
689  dabc::Hierarchy& hierarchy = *((dabc::Hierarchy*) fxHierarchy);
690 
691  return hierarchy.NumChilds() > 0;
692 }
693 
695 {
696  //printf("Make PROXY\n");
697 
698  if (fxHierarchy == 0) return 0;
699 
700  dabc::Hierarchy& hierarchy = *((dabc::Hierarchy*) fxHierarchy);
701 
702  if (hierarchy.null()) return 0;
703 
704  if ((name==0) || (strlen(name)==0)) {
705  //printf("Create access to current item %s\n", hierarchy.GetName());
706  return new TGo4DabcAccess(fNodeName.Data(), hierarchy);
707  }
708 
709  dabc::Hierarchy child = hierarchy.FindChild(name);
710 
711  // DOUT0("CreateREQ %s", name);
712 
713  return child.null() ? 0 : new TGo4DabcAccess(fNodeName.Data(), child);
714 }
715 
717 {
718  if (fxHierarchy == 0) return 0;
719 
720  dabc::Hierarchy& hierarchy = *((dabc::Hierarchy*) fxHierarchy);
721 
722 // printf("TGo4DabcProxy::MakeIter()\n");
723 
724  return hierarchy.null() ? 0 : new TGo4DabcLevelIter(hierarchy);
725 }
726 
727 void TGo4DabcProxy::WriteData(TGo4Slot* slot, TDirectory* dir, Bool_t onlyobjs)
728 {
729 }
730 
731 void TGo4DabcProxy::ReadData(TGo4Slot* slot, TDirectory* dir)
732 {
733 }
734 
735 void TGo4DabcProxy::Update(TGo4Slot* slot, Bool_t strong)
736 {
737  if (strong) {
738  printf("GO4 WANTS update DABC hierarchy - do it\n");
739  UpdateHierarchy(kFALSE);
740  }
741 }
742 
744 {
745  return UpdateHierarchy(kFALSE);
746 }
747 
748 
749 #else
750 
752  TGo4ServerProxy(),
753  fNodeName(),
754  fxHierarchy(0),
755  fxParentSlot(0)
756 {
757 }
758 
760 {
761 }
762 
763 const char* TGo4DabcProxy::GetDabcVersion()
764 {
765  return 0;
766 }
767 
768 Bool_t TGo4DabcProxy::Connect(const char* nodename)
769 {
770  return kFALSE;
771 }
772 
773 Bool_t TGo4DabcProxy::UpdateHierarchy(Bool_t sync)
774 {
775  return kFALSE;
776 }
777 
778 Bool_t TGo4DabcProxy::ReplyCommand(void* cmd)
779 {
780  return kFALSE;
781 }
782 
783 
785 {
786 }
787 
789 {
790 }
791 
792 Bool_t TGo4DabcProxy::HasSublevels() const
793 {
794  return kFALSE;
795 }
796 
797 TGo4Access* TGo4DabcProxy::ProvideAccess(const char* name)
798 {
799  return 0;
800 }
801 
803 {
804  return 0;
805 }
806 
807 void TGo4DabcProxy::WriteData(TGo4Slot* slot, TDirectory* dir, Bool_t onlyobjs)
808 {
809 
810 }
811 
812 void TGo4DabcProxy::ReadData(TGo4Slot* slot, TDirectory* dir)
813 {
814 
815 }
816 
817 void TGo4DabcProxy::Update(TGo4Slot* slot, Bool_t strong)
818 {
819 }
820 
822 {
823  return kFALSE;
824 }
825 
826 
827 #endif
Bool_t Connect(const char *nodename)
void R__unzip(int *nin, unsigned char *bufin, int *lout, unsigned char *bufout, int *nout)
virtual const char * GetObjectName() const
Bool_t GetIntPar(const char *name, Int_t &value)
Definition: TGo4Slot.cxx:646
static TClass * GetClass(const char *classname, Bool_t load=kFALSE)
Definition: TGo4Proxy.cxx:75
Bool_t UpdateHierarchy(Bool_t sync=kTRUE)
TGo4DabcAccess(const std::string &node, const dabc::Hierarchy &item)
TGo4DabcAccess(const std::string &node, const std::string &sinfoname)
request compression from server
virtual ~TGo4DabcLevelIter()
void * fxHierarchy
Definition: TGo4DabcProxy.h:25
ReplyWorker(const std::string &name)
TGo4Slot * FindSlot(const char *fullpath, const char **subname=0)
Definition: TGo4Slot.cxx:489
dabc::Hierarchy fChild
std::string fMasterItemName
unsigned fCnt
buffer used for class name
virtual void Update(TGo4Slot *slot, Bool_t strong)
virtual TGo4LevelIter * subiterator()
void DoObjectAssignement(TGo4ObjectManager *rcv, const char *path, TObject *obj, Bool_t owner)
Definition: TGo4Proxy.cxx:65
virtual Int_t AssignObjectTo(TGo4ObjectManager *rcv, const char *path)
const char * GetPar(const char *name) const
Definition: TGo4Slot.cxx:621
std::string fMasterName
Bool_t fCompression
raw data, get from command
virtual const char * info()
int R__unzip_header(int *nin, unsigned char *bufin, int *lout)
virtual ~TGo4DabcAccess()
virtual Bool_t RefreshNamesList()
TGo4DabcLevelIter(const dabc::Hierarchy &item)
virtual Bool_t next()
virtual TList * GetStreamerInfoList()
std::string fNodeName
virtual void Initialize(TGo4Slot *slot)
TFakeFile(TList *sinfo)
virtual void Finalize(TGo4Slot *slot)
TString GetRootClassName(const dabc::Hierarchy &item)
virtual Bool_t isfolder()
TString fNodeName
Definition: TGo4DabcProxy.h:24
TGo4Slot * GetParent() const
Definition: TGo4Slot.h:58
std::string fRootClassName
TGo4Slot * GetSlot(const char *name, Bool_t force=kFALSE)
Definition: TGo4Slot.cxx:471
TList * mylist
virtual bool ReplyCommand(dabc::Command cmd)
TReplyTimer(dabc::Command cmd)
virtual const char * GetObjectClassName() const
virtual const char * name()
double ProcessCommandReply(dabc::Command cmd)
virtual Int_t getflag(const char *flagname)
dabc::Hierarchy fParent
virtual TGo4LevelIter * MakeIter()
std::string fItemName
virtual void WriteData(TGo4Slot *slot, TDirectory *dir, Bool_t onlyobjs)
dabc::Command fCmd
virtual Bool_t CanGetObject() const
virtual ~TFakeFile()
TGo4ObjectManager * fxReceiver
virtual Bool_t Notify()
dabc::Buffer fRawData
void ForwardEvent(TGo4Slot *source, Int_t id, void *param=0)
Definition: TGo4Slot.cxx:585
virtual const char * GetClassName()
Int_t AssignObjectToSlot(TGo4Slot *slot)
Definition: TGo4Proxy.cxx:56
virtual ~TGo4DabcProxy()
Bool_t ReplyCommand(void *cmd)
virtual TClass * GetObjectClass() const
virtual TGo4Slot * getslot()
bool IsRateHistory(const dabc::Hierarchy &item)
static const char * GetDabcVersion()
virtual Int_t GetKind()
virtual Bool_t GetObject(TObject *&obj, Bool_t &owner) const
std::string fObjName
virtual Bool_t HasSublevels() const
virtual TGo4Access * ProvideAccess(const char *name)
TGo4Slot * fxParentSlot
pointer on dabc::Hierarchy class
Definition: TGo4DabcProxy.h:26
void SetPar(const char *name, const char *value)
Definition: TGo4Slot.cxx:609
virtual void ReadData(TGo4Slot *slot, TDirectory *dir)
virtual Int_t sizeinfo()
static void Error(const char *text,...)
Definition: TGo4Log.cxx:309
static void Debug(const char *text,...)
Definition: TGo4Log.cxx:270
virtual Bool_t IsRemote() const