updated test classes (alberto)
[u/mrichter/AliRoot.git] / SHUTTLE / AliDCSMessage.h
CommitLineData
73abe331 1#ifndef ALI_DCS_MESSAGE_H
2#define ALI_DCS_MESSAGE_H
3
4/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * See cxx source for full Copyright notice */
6
7/* $Id$ */
8
9//
10// This class is a wrapper of AliDCSMessage.
11// These are the messages which form AliDCSProtocol.
58bc3020 12// Used by AliDCSClient to communicate with the DCS Amanda server
73abe331 13//
14
73abe331 15#include <TString.h>
d477ad88 16#include <TObjArray.h>
58bc3020 17#include "AliDCSValue.h"
18#include "AliSimpleValue.h"
73abe331 19
20#define HEADER_SIZE 8
21#define ID_OFFSET 0
22#define VERSION_OFFSET 2
23#define TYPE_OFFSET 3
24#define BODY_SIZE_OFFSET 4
25
26#define MAX_BODY_SIZE 40000
27
28#define REQUEST_TYPE_OFFSET HEADER_SIZE
29#define START_TIME_OFFSET (HEADER_SIZE + 1)
30#define END_TIME_OFFSET (HEADER_SIZE + 5)
31#define REQUEST_STRING_OFFSET (HEADER_SIZE + 9)
32
33#define REQUEST_STRINGS_OFFSET REQUEST_STRING_OFFSET
34
35#define COUNT_OFFSET HEADER_SIZE
36
37#define SVT_OFFSET HEADER_SIZE
38#define VALUE_COUNT_OFFSET (HEADER_SIZE + 1)
39#define VALUES_OFFSET (HEADER_SIZE + 5)
40
41#define ERROR_CODE_OFFSET HEADER_SIZE
42#define ERROR_STRING_OFFSET (HEADER_SIZE + 1)
43
73abe331 44class AliDCSMessage: public TObject {
45public:
46 enum Type {
47 kInvalid = 0,
48 kRequest = 1,
49 kCount = 2,
50 kResultSet = 3,
51 kError = 4,
52 kMultiRequest = 5
53// kNext = 6
54 };
55
56 enum RequestType {
57 kNoneType = 0,
58 kAlias = 1,
59 kDPName = 2
60 };
61
62 enum ErrorCode {
63 kNoneError = 0,
64 kUnknownAliasDPName = 1,
65 kInvalidTimeRange = 2,
66 kInvalidBufferSize = 3,
67 kInvalidRequest = 4,
68 kUnsupportedType = 5,
69 kUnknownError = 255
70 };
71
72
73 AliDCSMessage();
74
75 AliDCSMessage(const char* buffer, UInt_t size);
76
58bc3020 77 virtual ~AliDCSMessage();
73abe331 78
79
80 void CreateRequestMessage(RequestType type,
81 UInt_t startTime, UInt_t endTime, const char* request);
82
83 void CreateMultiRequestMessage(RequestType type,
84 UInt_t startTime, UInt_t endTime);
85
86 void CreateCountMessage(UInt_t count);
87
88 void CreateResultSetMessage(AliSimpleValue::Type type);
89
90 void CreateErrorMessage(ErrorCode code, const char* errorString);
91
92 //void CreateNextMessage();
93
94 void DestroyMessage();
95
96
97 Bool_t SetRawHeader(const char* header);
98
99 void StoreToBuffer();
100
101 void LoadFromBuffer();
102
103 void DestroyBuffer();
104
105
106 Bool_t IsValid() const {return fType != kInvalid;};
107
108 UInt_t GetMessageSize() const {return fMessageSize;};
109
110 char* GetMessage() const {return fMessage;};
111
112 UInt_t GetBodySize() const {return fMessageSize - HEADER_SIZE;};
113
114 char* GetBody() const {return fMessage + HEADER_SIZE;};
115
116 Type GetType() const {return fType;};
117
118 // RequestType and MultiReuqestType Message getters
119 RequestType GetRequestType() const;
120
121 UInt_t GetStartTime() const;
122
123 UInt_t GetEndTime() const;
124
125 TString GetRequestString() const;
126
127 // MultiRequestType Message getters and setters
d477ad88 128 void GetRequestStrings(TObjArray& result) const;
73abe331 129
130 Bool_t AddRequestString(const char* request);
131
132 void ClearRequestStrings();
133
134 // CountType Message getters
135 UInt_t GetCount() const;
136
137 // ResultSetType Message getters ans setters
138 AliSimpleValue::Type GetSimpleValueType() const;
139
140 UInt_t GetValueCount() const;
141
d477ad88 142 UInt_t GetValues(TObjArray& result) const;
73abe331 143
144 Bool_t AddValue(const AliDCSValue& value);
145
146 void ClearValues();
147
148 // ErrorType Message getters
149 ErrorCode GetErrorCode() const;
150
151 TString GetErrorString() const;
152
153
154 virtual void Print(Option_t* option = NULL) const;
155
156 static void PrintBuffer(const char* buf, UInt_t size, TString& output);
157
158private:
159
58bc3020 160 AliDCSMessage(const AliDCSMessage& other);
161 AliDCSMessage& operator= (const AliDCSMessage& other);
162
163
164 char* fMessage; // Array of bytes building the message
73abe331 165
58bc3020 166 UInt_t fMessageSize; // Size of the message array
73abe331 167
168
58bc3020 169 Type fType; // Message type (request, count...)
73abe331 170
171 //Request message fields
58bc3020 172 RequestType fRequestType; // Type of request message
73abe331 173
58bc3020 174 UInt_t fStartTime; // Start time of query
73abe331 175
58bc3020 176 UInt_t fEndTime; // End time of query
73abe331 177
58bc3020 178 TString fRequestString; // Request string
73abe331 179
180 //Count message fields
58bc3020 181 UInt_t fCount; // count counter
73abe331 182
183 //ResultSet message fields
58bc3020 184 AliSimpleValue::Type fSimpleValueType; // Simple value type
73abe331 185
58bc3020 186 TObjArray fValues; // array of received values
73abe331 187
188 //Error message fields
58bc3020 189 ErrorCode fErrorCode; // error code
73abe331 190
58bc3020 191 TString fErrorString; // error string
73abe331 192
193 //MultiRequest message fields
58bc3020 194 TObjArray fRequestStrings; // multi request string array
73abe331 195
196
197 // Message setter helpers
198 void StoreHeader();
199
200 void StoreRequestMessage();
201
202 void StoreCountMessage();
203
204 void StoreResultSetMessage();
205
206 void StoreErrorMessage();
207
208 void StoreMultiRequestMessage();
209
210 //void StoreNextMessage();
211
212
213 Bool_t ValidateHeader(const char* buf);
214
215 void LoadRequestMessage();
216
217 void LoadCountMessage();
218
219 void LoadResultSetMessage();
220
221 void LoadErrorMessage();
222
223 void LoadMultiRequestMessage();
224
225 //void LoadNextMessage();
226
227 // Buffer helpers
228 static void SetBool(char* buf, Bool_t val);
229
230 static void SetByte(char* buf, Char_t val);
231
232 static void SetUByte(char* buf, UChar_t val);
233
234 static void SetInt(char* buf, Int_t val);
235
236 static void SetUInt(char* buf, UInt_t val);
237
238 static void SetFloat(char* buf, Float_t val);
239
240 static Bool_t GetBool(const char* buf);
241
242 static Char_t GetByte(const char* buf);
243
244 static UChar_t GetUByte(const char* buf);
245
246 static Int_t GetInt(const char* buf);
247
248 static UInt_t GetUInt(const char* buf);
249
250 static Float_t GetFloat(const char* buf);
251
252 static TString GetString(const char* buf, Int_t maxLen);
253
254
255 ClassDef(AliDCSMessage, 0);
256};
257
258#endif