GSI Object Oriented Online Offline (Go4) GO4-6.4.0
Loading...
Searching...
No Matches
TGo4HttpProxy.h
Go to the documentation of this file.
1// $Id$
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 fuer 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#ifndef TGO4HTTPPROXY_H
15#define TGO4HTTPPROXY_H
16
17#include "TGo4ServerProxy.h"
18
19#include "TXMLEngine.h"
20
21#include <QNetworkAccessManager>
22#include <QNetworkReply>
23
24class TGo4HttpProxy;
25class TGo4HttpAccess;
27
29class QHttpProxy : public QObject {
30 Q_OBJECT
31
32 friend class TGo4HttpProxy;
33 friend class TGo4HttpAccess;
34
35 protected:
36 QNetworkAccessManager qnam;
37 QNetworkReply *fHReply{nullptr};
39
40 public slots:
41 void httpFinished();
42 void httpHReqError(QNetworkReply::NetworkError);
43 void authenticationRequiredSlot(QNetworkReply *, QAuthenticator *);
44
45 void updateRatemeter();
46 void updateHierarchy();
47
49
50 public:
51
53 virtual ~QHttpProxy();
54
55 void StartRequest(const char *url);
56};
57
58// -----------------------------------------------------------------------------------
59
60class TGo4HttpAccess : public QObject, public TGo4Access {
61
62 Q_OBJECT
63
64 protected:
66 XMLNodePointer_t fNode{nullptr};
67 TString fUrlPath;
68 // Request kind. Can be:
69 // 0 - h.xml request,
70 // 1 - root.bin request,
71 // 2 - dabc get.xml request,
72 // 3 - dabc get.xml history requests
73 // 4 - parameter status request
74 // 5 - sample tree
75 // 6 - analysis status request
76 Int_t fKind{0};
77 TString fNameAttr;
78 TString fKindAttr;
79 TString fExtraArg;
81 TString fRecvPath;
82 QNetworkReply *fReply{nullptr};
83
84 public slots:
85 void httpFinished();
86 void httpError(QNetworkReply::NetworkError);
87
88 public:
89
90 TGo4HttpAccess(TGo4HttpProxy *proxy, XMLNodePointer_t node, Int_t kind = 1, const char *extra_arg = nullptr);
91
92 virtual ~TGo4HttpAccess() { }
93
94 Bool_t IsRemote() const override { return kTRUE; }
95
96 Bool_t CanGetObject() const override { return kFALSE; }
97
98 Bool_t GetObject(TObject *&obj, Bool_t &owner) const override { return kFALSE; }
99
100 TClass *GetObjectClass() const override;
101
102 const char *GetObjectName() const override;
103
104 const char *GetObjectClassName() const override;
105
106 Int_t AssignObjectTo(TGo4ObjectManager *rcv, const char *path) override;
107
108};
109
110// -----------------------------------------------------------------------------------
111
114
115 friend class QHttpProxy;
116 friend class TGo4HttpAccess;
117
118 protected:
119 TXMLEngine *fXML{nullptr};
120 XMLDocPointer_t fxHierarchy{nullptr};
122 Int_t fRateCnt{0};
123 Int_t fStatusCnt{0};
124 Int_t fDebugCnt{0};
125 Bool_t fbAnalysisRunning{kFALSE};
126 TString fUserName;
127 TString fPassword;
128 Bool_t fConnected{kFALSE};
129 QNetworkReply *fRegularReq{nullptr};
130 Int_t fShutdownCnt{0};
131
132 void GetHReply(QByteArray& res);
133
134 XMLNodePointer_t FindItem(const char *name, XMLNodePointer_t curr = nullptr) const;
135
136 TString MakeUrlPath(XMLNodePointer_t item);
137
138 void ProcessUpdateTimer();
139
140 void ProcessRegularMultiRequest(Bool_t finished = kFALSE);
141
142 Bool_t ServerHasRestrict() const;
143
144 Bool_t ServerHasMulti();
145
146 Bool_t SubmitURL(const char *path, Int_t waitres = -1);
147
148 Bool_t PostObject(const char *prefix, TObject *obj, Int_t waitres = -1, Bool_t destroy_after = kTRUE);
149
150 Bool_t CheckUserName(const char *expects, Bool_t dflt = kFALSE) const;
151
152 Bool_t CheckShutdown(Bool_t force = kFALSE);
153
154 TGo4HttpAccess* SubmitRequest(const char *itemname, Int_t kind, TGo4Slot *tgtslot, const char *extra_arg = nullptr);
155
156 public:
158 virtual ~TGo4HttpProxy();
159
160 void SetAccount(const char *username, const char *passwd);
161
162 Bool_t Connect(const char *nodename);
163 Bool_t UpdateHierarchy(Bool_t sync = kTRUE);
164
165 void Initialize(TGo4Slot *slot) override;
166 void Finalize(TGo4Slot *slot) override {}
167
168 Bool_t HasSublevels() const override;
169 std::unique_ptr<TGo4Access> ProvideAccess(const char *name) override;
170 TGo4LevelIter *MakeIter() override;
171
172 Int_t GetObjectKind() const override { return TGo4Access::kndFolder; }
173 const char *GetContainedClassName() const override { return ClassName(); }
174 TObject *GetAssignedObject() override { return this; }
175 const char *GetContainedObjectInfo() override;
176 Int_t GetObjectSizeInfo() const override { return -1; }
177
178 void WriteData(TGo4Slot *slot, TDirectory *dir, Bool_t onlyobjs) override;
179 void ReadData(TGo4Slot *slot, TDirectory *dir) override;
180
181 void Update(TGo4Slot *slot, Bool_t strong) override;
182
183 TString FindCommand(const char *name) override;
184 Int_t NumCommandArgs(const char *name) override;
185 Bool_t SubmitCommand(const char *name, Int_t waitres = -1, const char *arg1 = nullptr, const char *arg2 = nullptr, const char *arg3 = nullptr) override;
186
187 const char *GetUserName() const override { return fUserName.Data(); }
188
189 Bool_t IsAnalysisServer() const override { return kTRUE; }
190 Bool_t IsGo4Analysis() const override;
191 Bool_t IsConnected() const override { return fConnected; }
192 Bool_t IsViewer() const override { return CheckUserName("observer", kFALSE); }
193 Bool_t IsController() const override { return CheckUserName("controller", kFALSE); }
194 Bool_t IsAdministrator() const override { return CheckUserName("admin", kTRUE); }
195
196 Bool_t CanSubmitObjects() const override;
197 void RequestAnalysisSettings() override;
198 void SubmitAnalysisSettings() override;
199 void CloseAnalysisSettings() override;
200
201 Bool_t NamesListReceived() const override;
202 Bool_t RefreshNamesList() override;
203 Bool_t DelayedRefreshNamesList(Int_t delay_sec) override;
204
205 Bool_t IsAnalysisRunning() const override { return fbAnalysisRunning; }
206 void StartAnalysis() override;
207 void StopAnalysis() override;
208
209 Bool_t RequestObjectStatus(const char *objectname, TGo4Slot *tgtslot) override;
210
211 Bool_t UpdateAnalysisObject(const char *objectname, TObject *obj) override;
212
213 void ClearAllAnalysisObjects() override;
214 void ClearAnalysisObject(const char *fullpath) override;
215
216 void RemoteTreeDraw(const char *treename,
217 const char *varexp,
218 const char *cutcond,
219 const char *hname) override;
220
221 void RequestEventStatus(const char *evname, Bool_t astree, TGo4Slot *tgtslot) override;
222
223 void RemotePrintEvent(const char *evname,
224 Int_t evnumber,
225 Int_t subid,
226 Bool_t ishex,
227 Bool_t islong) override;
228
229 void ChageObjectProtection(const char *fullpath, const char *flags) override;
230
231 void RemoveObjectFromAnalysis(const char *fullpath) override;
232
233 void ExecuteLine(const char *line) override;
234
235 void PrintDynListEntry(const char *fullpath) override;
236
237 void LoadConfigFile(const char *fname) override;
238 void SaveConfigFile(const char *fname) override;
239
240 void WriteAutoSave(const char *fname,
241 Int_t complevel,
242 Bool_t overwrite) override;
243
244 void ResetDebugOutputRequests() override;
245
246 void DisconnectAnalysis(Int_t waittime = 30, Bool_t servershutdown = kFALSE) override;
247
248
249};
250
251#endif
void httpHReqError(QNetworkReply::NetworkError)
friend class TGo4HttpAccess
virtual ~QHttpProxy()
void updateRatemeter()
TGo4HttpProxy * fProxy
used only to receive hierarchy
void authenticationRequiredSlot(QNetworkReply *, QAuthenticator *)
QHttpProxy(TGo4HttpProxy *p)
friend class TGo4HttpProxy
void StartRequest(const char *url)
void httpFinished()
void updateHierarchy()
void regularRequestFinished()
QNetworkReply * fHReply
central manager of network requests
QNetworkAccessManager qnam
Bool_t GetObject(TObject *&obj, Bool_t &owner) const override
Bool_t CanGetObject() const override
Returns kTRUE, when object can be directly obtained with GetObject() method.
QNetworkReply * fReply
TGo4HttpProxy * fProxy
TGo4ObjectManager * fReceiver
TGo4HttpAccess(TGo4HttpProxy *proxy, XMLNodePointer_t node, Int_t kind=1, const char *extra_arg=nullptr)
Bool_t IsRemote() const override
Indicate if object is remote.
Int_t AssignObjectTo(TGo4ObjectManager *rcv, const char *path) override
Have to assign object to provided receiver.
TClass * GetObjectClass() const override
const char * GetObjectClassName() const override
void httpError(QNetworkReply::NetworkError)
virtual ~TGo4HttpAccess()
XMLNodePointer_t fNode
const char * GetObjectName() const override
Here Go4/ROOT-specific functionality of HttpProxy.
TGo4LevelIter * MakeIter() override
Int_t fShutdownCnt
multiple request for rate, log and messages
virtual ~TGo4HttpProxy()
XMLDocPointer_t fxHierarchy
Bool_t IsAnalysisServer() const override
Bool_t DelayedRefreshNamesList(Int_t delay_sec) override
QHttpProxy fComm
pointer on dabc::Hierarchy class
friend class TGo4HttpAccess
void PrintDynListEntry(const char *fullpath) override
TXMLEngine * fXML
void RemoteTreeDraw(const char *treename, const char *varexp, const char *cutcond, const char *hname) override
Bool_t SubmitCommand(const char *name, Int_t waitres=-1, const char *arg1=nullptr, const char *arg2=nullptr, const char *arg3=nullptr) override
XMLNodePointer_t FindItem(const char *name, XMLNodePointer_t curr=nullptr) const
Int_t GetObjectSizeInfo() const override
Bool_t CheckUserName(const char *expects, Bool_t dflt=kFALSE) const
Bool_t IsAnalysisRunning() const override
void StartAnalysis() override
Bool_t IsAdministrator() const override
void RemotePrintEvent(const char *evname, Int_t evnumber, Int_t subid, Bool_t ishex, Bool_t islong) override
Bool_t UpdateAnalysisObject(const char *objectname, TObject *obj) override
void ReadData(TGo4Slot *slot, TDirectory *dir) override
Bool_t IsConnected() const override
Bool_t ServerHasRestrict() const
Bool_t RequestObjectStatus(const char *objectname, TGo4Slot *tgtslot) override
void SetAccount(const char *username, const char *passwd)
friend class QHttpProxy
void SubmitAnalysisSettings() override
void Update(TGo4Slot *slot, Bool_t strong) override
Int_t NumCommandArgs(const char *name) override
void DisconnectAnalysis(Int_t waittime=30, Bool_t servershutdown=kFALSE) override
Close connection to analysis and destroys proxy with correspondent slot.
TGo4HttpAccess * SubmitRequest(const char *itemname, Int_t kind, TGo4Slot *tgtslot, const char *extra_arg=nullptr)
Bool_t IsController() const override
Int_t fStatusCnt
counter for ratemeter updates
TString fPassword
user name and password -
void ResetDebugOutputRequests() override
Int_t GetObjectKind() const override
Bool_t UpdateHierarchy(Bool_t sync=kTRUE)
TString MakeUrlPath(XMLNodePointer_t item)
void ProcessRegularMultiRequest(Bool_t finished=kFALSE)
void StopAnalysis() override
Bool_t IsGo4Analysis() const override
void ClearAllAnalysisObjects() override
void GetHReply(QByteArray &res)
counter during shutdown
void ExecuteLine(const char *line) override
std::unique_ptr< TGo4Access > ProvideAccess(const char *name) override
void SaveConfigFile(const char *fname) override
void WriteAutoSave(const char *fname, Int_t complevel, Bool_t overwrite) override
void RequestAnalysisSettings() override
Bool_t SubmitURL(const char *path, Int_t waitres=-1)
void Finalize(TGo4Slot *slot) override
Bool_t CanSubmitObjects() const override
TObject * GetAssignedObject() override
Bool_t HasSublevels() const override
QNetworkReply * fRegularReq
true if connected
Bool_t IsViewer() const override
Bool_t PostObject(const char *prefix, TObject *obj, Int_t waitres=-1, Bool_t destroy_after=kTRUE)
const char * GetContainedObjectInfo() override
void ClearAnalysisObject(const char *fullpath) override
Bool_t CheckShutdown(Bool_t force=kFALSE)
Bool_t ServerHasMulti()
void WriteData(TGo4Slot *slot, TDirectory *dir, Bool_t onlyobjs) override
void RemoveObjectFromAnalysis(const char *fullpath) override
void Initialize(TGo4Slot *slot) override
Bool_t fbAnalysisRunning
counter for debug output updates
void RequestEventStatus(const char *evname, Bool_t astree, TGo4Slot *tgtslot) override
const char * GetUserName() const override
void LoadConfigFile(const char *fname) override
Bool_t RefreshNamesList() override
Int_t fDebugCnt
counter for status messages updates
TString FindCommand(const char *name) override
Bool_t NamesListReceived() const override
void ChageObjectProtection(const char *fullpath, const char *flags) override
void CloseAnalysisSettings() override
Bool_t Connect(const char *nodename)
const char * GetContainedClassName() const override
TGo4ServerProxy()
contained object info