source: trunk/FACT++/dim/src/examples/test_Browser.cxx@ 20115

Last change on this file since 20115 was 11071, checked in by tbretz, 14 years ago
Replaced v19r21 by a version extracted with 'unzip -a' to get proper unix text format.
File size: 3.7 KB
Line 
1#include <iostream>
2#include <dic.hxx>
3using namespace std;
4
5class ErrorHandler : public DimErrorHandler
6{
7 void errorHandler(int severity, int code, char *msg)
8 {
9 int index = 0;
10 char **services;
11 cout << severity << " " << msg << endl;
12 services = DimClient::getServerServices();
13 cout<< "from "<< DimClient::getServerName() << " services:" << endl;
14 while(services[index])
15 {
16 cout << services[index] << endl;
17 index++;
18 }
19 }
20public:
21 ErrorHandler() {DimClient::addErrorHandler(this);}
22};
23
24class StrService : public DimInfo
25{
26
27 void infoHandler()
28 {
29 int index = 0;
30 char **services;
31// cout << "Dns Node = " << DimClient::getDnsNode() << endl;
32 cout << "Received STRVAL : " << getString() << endl;
33 services = DimClient::getServerServices();
34 cout<< "from "<< DimClient::getServerName() << " services:" << endl;
35 while(services[index])
36 {
37 cout << services[index] << endl;
38 index++;
39 }
40 }
41public :
42 StrService() : DimInfo("TEST/STRVAL","not available") {};
43};
44
45
46void **AllServices;
47int *AllServiceStates;
48int NServices;
49int NBytes;
50
51class MyTimer: public DimTimer
52{
53 void timerHandler()
54 {
55 int i;
56 int missing = 0;
57 for(i = 0; i < NServices; i++)
58 {
59 if(AllServiceStates[i] == -2)
60 {
61 missing++;
62 }
63 }
64 dim_print_date_time();
65 printf("Missing %d, NBytes = %d\n", missing, NBytes);
66 if(missing)
67 start(1);
68 }
69 public:
70 MyTimer(): DimTimer(2){};
71};
72
73class TestGetService: public DimInfo
74{
75 void infoHandler()
76 {
77 int i, index, size, done = 1;
78 char *dataptr;
79
80 size = getSize();
81 NBytes += size;
82 dataptr = new char[size];
83 memcpy(dataptr, getData(), size);
84 for(i = 0; i < NServices; i++)
85 {
86 if(AllServices[i] == this)
87 {
88 index = i;
89 break;
90 }
91 }
92 AllServiceStates[index] = getInt();
93 // printf("Got %s, %d, %d\n", getName(), index, AllServiceStates[index]);
94 for(i = 0; i < NServices; i++)
95 {
96 if(AllServiceStates[i] == -2)
97 {
98 done = 0;
99 break;
100 }
101 }
102 if(done)
103 {
104 dim_print_date_time();
105 printf("All Services Received\n");
106 }
107 }
108public :
109 TestGetService(char *name): DimInfo(name, -1){};
110};
111
112
113int main(int argc, char **argv)
114{
115
116 ErrorHandler errHandler;
117// StrService servstr;
118 char *server, *ptr, *ptr1;
119 DimBrowser br;
120 int type, n, index, i, ret;
121 MyTimer *myTimer;
122 char findStr[132];
123
124 ret = 0;
125 strcpy(findStr,"*");
126 if(argc > 1)
127 {
128 if(!strcmp(argv[1],"-f"))
129 {
130 if(argc > 2)
131 strcpy(findStr,argv[2]);
132 else
133 ret = 1;
134 }
135 else
136 ret = 1;
137 if(ret)
138 {
139 printf("Parameters: [-f <search string>]\n");
140 exit(0);
141 }
142 }
143// DimClient::addErrorHandler(errHandler);
144dim_print_date_time();
145printf("Asking %s\n", findStr);
146 n = br.getServices(findStr);
147dim_print_date_time();
148 cout << "found " << n << " services" << endl;
149
150 AllServices = (void **) new TestGetService*[n];
151 AllServiceStates = new int[n];
152 NServices = n;
153 NBytes = 0;
154 index = 0;
155 for(i = 0; i < n; i++)
156 AllServiceStates[i] = 0;
157 while((type = br.getNextService(ptr, ptr1))!= 0)
158 {
159
160 // cout << "type = " << type << " - " << ptr << " " << ptr1 << endl;
161 AllServiceStates[index] = -2;
162 AllServices[index] = new TestGetService(ptr);
163 index++;
164 // if(index >= 1000)
165 // break;
166 }
167 myTimer = new MyTimer();
168 dim_print_date_time();
169 printf("Got Service Names\n");
170 /*
171 br.getServers();
172 while(br.getNextServer(server, ptr1))
173 {
174 cout << server << " @ " << ptr1 << endl;
175 }
176
177 br.getServerClients("DIS_DNS");
178 while(br.getNextServerClient(ptr, ptr1))
179 {
180 cout << ptr << " @ " << ptr1 << endl;
181 }
182 DimInfo servint("TEST/INTVAL",-1);
183 */
184 while(1)
185 {
186 sleep(10);
187 /*
188 cout << "Current INTVAL : " << servint.getInt() << endl;
189 DimClient::sendCommand("TEST/CMND","UPDATE_STRVAL");
190 */
191 }
192 return 0;
193}
Note: See TracBrowser for help on using the repository browser.