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