ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/host/c++/Config.cpp
(Generate patch)

Comparing projects/cms/source/host/c++/Config.cpp (file contents):
Revision 1.1 by ab11, Wed Jan 24 19:32:32 2001 UTC vs.
Revision 1.4 by ab11, Thu Mar 1 20:10:53 2001 UTC

# Line 1 | Line 1
1   #include "Config.h"
2  
3 < Config::Config( string serverName, int serverPort ){
3 > Config::Config( string serverName, int serverPort, int printDebug ){
4          // the constructor for the class
5          
6 +        
7          configConnectionRetryTime = 1; // one second
8 +        debug = printDebug;
9 +        MAX_CONNECTION_ATTEMPTS = 10; //
10          
11 +        configName = serverName;
12 +        configPort = serverPort;
13 +        
14 +        if ( debug == 1 ){
15 +                std::cout << "Config Constructor\n";
16 +        }
17 +        
18 +        
19          // make a reference to smallnet
20 <        SmallNet net();
20 >        if ( debug == 1 ){
21 >                std::cout << "Config::Constructor::Constructing SmallNet\n";
22 >        }
23 >        net = new SmallNet(debug);
24 >        // net->setDebug(1);
25          
26          // read the values which we want to retrieve from the
27          // config manager from the "config.values.txt" file
# Line 19 | Line 34 | Config::Config( string serverName, int serverPort ){
34          propertyNames[1] = "TCPUpdateTime";
35          propertyNames[2] = "FilterRetryTime";
36          propertyNames[3] = "ConfigRetryTime";
37 +        numProperties = 4;
38          
39          // read the Chat dialog we 'expect' to have with the config
40          // manager from disk. This is a new idea so that the client
# Line 28 | Line 44 | Config::Config( string serverName, int serverPort ){
44          
45          if ( loadConfig() == 0 ){
46                  // successful just continue
47 +                if ( debug == 1 ){
48 +                        std::cout << "Config::Constructor::loadConfig() Successful\n";
49 +                }
50          }
51          else {
52 +                if ( debug == 1 ){
53 +                        std::cout << "Config::Constructor::loadConfig() failed-retrying\n";
54 +                }
55                  // woops something went wrong. we'll just keep retrying
56                  // and increasing the time between trys
57                  int loadConfigResult = -1;
58                                  
59                  // the following could cause problems if it is fed the
60                  // incorrect filter name and/or port it'll never stop trying    
61 +                int retrys = 1; // # of times we have tried to connect but failed..
62                  while ( loadConfigResult != 0 ){
63 +                        if ( retrys > MAX_CONNECTION_ATTEMPTS ){
64 +                                std::cout << "Maxium number of retries reached, Quitting";
65 +                                // exit("Failed to connect");
66 +                        }
67                          // make the connection retry time greater
68                          configConnectionRetryTime = configConnectionRetryTime * 2;
69 +                        std::cout << "Waiting " << configConnectionRetryTime << " seconds before retrying\n";
70                          sleep(configConnectionRetryTime); // seconds
71 +                        // increment the number of times we have tried to connect
72 +                        retrys++;
73                          loadConfigResult = loadConfig();
74                  } // while
75                  
76          
77          } // if
78          
79 +        if ( debug == 1 ){
80 +                std::cout << "Config::Constructor - Finished!\n";
81 +        }
82 +        
83   } // Config
84  
85   int Config::loadConfig(){
86          // establishes a connection to the config manager (filter manager?) and
87          // tries to load all the info which it needs, if it fails returns !0
88          
89 +        if ( debug == 1 ){
90 +                std::cout << "Config::loadConfig()\n";
91 +        }
92 +        
93          // make a connection
94 +        
95 +        if ( debug == 1 ){
96 +                std::cout << "Config::loadConfig::establishing config connection\n";
97 +        }
98          int established = establishConfig();
99          if ( established != 0 ){
100                  return established;
101          }
102          
103          // do the talk ;)
104 +        
105 +        if ( debug == 1 ){
106 +                std::cout << "Config::loadConfig::Processing chat script\n";
107 +        }
108          int chat = chatConfig();
109          if ( chat != 0 ){
110                  // and close the connection
111                  destroyConfig();
112 <                return chat;
112 >                // return chat;
113          }
114          
115          // and close the connection
116 +        
117 +        if ( debug == 1 ){
118 +                std::cout << "Config::loadConfig::closing config connection\n";
119 +        }
120          destroyConfig();
121          
122          // return everything ok
# Line 76 | Line 126 | int Config::loadConfig(){
126  
127   int Config::establishHeartbeat(){
128          // just an interface onto smallnet
129 +        if ( debug == 1 ){
130 +                std::cout << "Config::establishHeartbeat()\n";
131 +        }
132          
133 <        int establish = 0; //net.connectHeartbeat(configName, configPort);
133 >        int establish = net->connectHeartBeat(configName, configPort);
134          
135 +        if ( debug == 1 ){
136 +                std::cout << "->" << establish << "\n";
137 +        }
138 +        
139          return establish;
140                  
141   } // establishHeartBeat
# Line 86 | Line 143 | int Config::establishHeartbeat(){
143  
144   int Config::destroyHeartbeat(){
145          // just hooks into the smallnet interface
146 +        if ( debug == 1 ){
147 +                std::cout << "Config::destroyHeartbeat()\n";
148 +        }
149          
150 <        net.closeHeartBeatConnection();
150 >        net->closeHeartBeatConnection();
151          
152   } // destroyHeartBeat
153  
# Line 95 | Line 155 | int Config::destroyHeartbeat(){
155   int Config::establishConfig(){
156          // ask smallnet to make a connection to the filtermanager so we can get some config
157          // details
158 +        if ( debug == 1 ){
159 +                std::cout << "Config::establishConfig()\n";
160 +        }
161          
99        net.connectConfig();
162          
163 +        /* MODIFY THIS */
164 +        int response = net->connectConfig(configName, configPort);
165          
166 <        return 0;
166 >        if ( debug == 1 ){
167 >                std::cout << "->" << response << "\n";
168 >        }
169          
170 +        return response;
171 +        
172   } // establishConfig
173  
174  
175   int Config::chatConfig(){
176          // do some funky jibble.. ;)
177 +        if ( debug == 1 ){
178 +                std::cout << "Config::chatConfig()\n";
179 +        }
180          
181          string response;
182          
183 +        
184          // hard coeded for the moment
185 <        response = net.heartBeatSend("STARTCONFIG");
185 >        if ( debug == 1 ){
186 >                std::cout << "Config::chatConfig::STARTCONFIG\n";
187 >        }
188 >        response = net->heartBeatSend("STARTCONFIG");
189          if ( response != "OK" ){
190                  // something went wrong
191                  return -1;
192 +                if ( debug == 1 ){
193 +                        std::cout << "Config::chatConfig::ERROR\n";
194 +                }
195          }
196          
197 <        lastModified = net.heartBeatSend("LASTMODIFIED");
198 <        fileList = net.heartBeatSend("FILELIST");
197 >        if ( debug == 1 ){
198 >                std::cout << "Config::chatConfig::LASTMODIFIED\n";
199 >        }
200 >        lastModified = net->heartBeatSend("LASTMODIFIED");
201 >        if ( debug == 1 ){
202 >                std::cout << "Config::chatConfig::FILELIST\n";
203 >        }
204 >        fileList = net->heartBeatSend("FILELIST");
205          
206 +        fQDN = net->heartBeatSend("FQDN");
207 +        
208          // now send the properties we want
209          
210 +        if ( debug == 1 ){
211 +                std::cout << "Config::chatConfig::requesting properties\n";
212 +        }
213          if ( numProperties > 0 ){
214                  // we actually need to look for some properties
215                  for ( int i=0; i < numProperties; i++ ){
216                          // lets hope that this works! ;)
217 <                        propertyValues[i] = net.heartBeatSend(propertyNames[i]);
217 >                        if ( debug == 1 ){
218 >                                std::cout << "Config::chatConfig::" << propertyNames[i] << "\n";
219 >                        }
220 >                        propertyValues[i] = net->heartBeatSend(propertyNames[i]);
221                  } // for        
222          } // if
223          
224 <        response = net.heartBeatSend("ENDCONFIG");
224 >        if ( debug == 1 ){
225 >                std::cout << "Config::chatConfig::ENDCONFIG\n";
226 >        }
227 >        response = net->heartBeatSend("ENDCONFIG");
228          // doesn't matter what it returns
229          
230 <        response = net.heartBeatSend("FILTER");
230 >        if ( debug == 1 ){
231 >                std::cout << "Config::chatConfig::FILTER\n";
232 >        }
233 >        response = net->heartBeatSend("FILTER");
234          // now we need to pull repsonse apart to get the filter information out
235 +        int first = response.find(";",0);
236 +        int second = response.find(";",first+1);
237 +        UDPFilterName = response.substr(0,first);
238 +        UDPFilterPort = atoi( response.substr( first+1 ,second ).c_str());
239 +        TCPFilterPort = atoi(response.substr(second+1).c_str());
240          
241 <        // FIX ME
241 >        if ( debug == 1 ){
242 >                std::cout << "Config::chatConfig::END\n";
243 >        }
244 >        response = net->heartBeatSend("END");
245          
140        response = net.heartBeatSend("END");
141        
246          return 0;      
247  
248   } // chatConfig
249  
250   int Config::destroyConfig(){
251 +        if ( debug == 1 ){
252 +                std::cout << "Config::destroyConfig()\n";
253 +        }
254          
255 <        net.closeConfigConnection();
255 >        net->closeConfigConnection();
256          
257   } // destroyConfig
258  
259 < string getProperty(string propertyName){
259 > string Config::getStrProperty(string propertyName){
260          
261 <        /* // doesn't compile with this for some reason!
261 >        
262 >        if ( debug == 1 ){
263 >                std::cout << "Config::getProperty()\n";
264 >        }
265 >        
266          for ( int i=0; i<20; i++ ){
267                  if ( propertyName == propertyNames[i] ){
268 <                        return propertyValues[i];
268 >                        if ( propertyValues[i] != "" ){
269 >                                return propertyValues[i];
270 >                        } // if
271                  } // if
272          } // for
160        */
273                          
274          // otherwise return ERROR
275          return "ERROR";
276          
277 < } // getProperty
277 > } // getStrProperty
278 >
279 > int Config::getIntProperty( string propertyName ){
280 >        
281 >        if ( debug == 1 ){
282 >                std::cout << "Config::getProperty()\n";
283 >        }
284 >        
285 >        string response = getStrProperty( propertyName );
286 >        if ( response == "ERROR" ){
287 >                return -1;
288 >        } // if
289 >        
290 >        int i = atoi(response.c_str());
291 >        
292 >        if ( i > 0 ){
293 >                return i;
294 >        }
295 >                                        
296 >        // otherwise return ERROR
297 >        return -1;
298 >        
299 > } // getIntProperty

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines