Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/subprojects/network/network_unit_test.cc @ 6414

Last change on this file since 6414 was 6341, checked in by bensch, 19 years ago

orxonox/trunk: merged the network branche back to the trunk, so we do not get away from each other to fast

File size: 10.1 KB
Line 
1
2#include "stdlibincl.h"
3#include <stdarg.h>
4#include <stdio.h>
5#include "shell_buffer.h"
6#include "class_list.h"
7
8#include "network_manager.h"
9#include "network_socket.h"
10#include "server_socket.h"
11#include "network_stream.h"
12#include "synchronizeable.h"
13#include "converter.h"
14
15#include "simple_sync.h"
16#include "read_sync.h"
17
18int verbose = 4;
19
20
21/* outputs the help */
22int startHelp(int argc, char** argv)
23{
24  printf("Network is a network unit test\n");
25  printf(" --help                     this output\n");
26  printf(" -st,  --sockettest         test network_socket\n");
27  printf(" -ft,  --frameworktest      test the network module\n");
28  printf(" --server [port number]     creates a test server\n");
29  printf(" --client [address] [port]  connects to a server\n");
30  printf(" --listen [address] [port]  just listens to this connection");
31  printf("\n");
32}
33
34
35/* test SDL network socket */
36int testSocket(int argc, char** argv)
37{
38  IPaddress ip;
39  SDLNet_ResolveHost(&ip, "127.0.0.1", 9999);
40  ServerSocket server;
41  server.listen(9999);
42
43  NetworkSocket* client1 = new NetworkSocket(ip);
44
45  NetworkSocket* server1 = server.getNewSocket();
46
47  NetworkSocket* client2 = new NetworkSocket(ip);
48
49  NetworkSocket* server2 = server.getNewSocket();
50
51  char buf[1024];
52
53  printf("read from client1 before sending data\n");
54  printf("result: %d bytes\n", client1->readPacket((byte*)buf, 1024));
55
56  printf("read from client2 before sending data\n");
57  printf("result: %d bytes\n", client2->readPacket((byte*)buf, 1024));
58
59  int n;
60  char * str1 = "client1 to server";
61  char * str2 = "server1 to client";
62  char * str3 = "client2 to server";
63  char * str4 = "server2 to client";
64  n = client1->writePacket((byte*)str1, strlen(str1)+1);
65  printf("%d bytes send from client1\n", n);
66  n = server1->writePacket((byte*)str2, strlen(str2)+1);
67  printf("%d bytes send from server1\n", n);
68  n = client2->writePacket((byte*)str3, strlen(str3)+1);
69  printf("%d bytes send from client2\n", n);
70  n = server2->writePacket((byte*)str4, strlen(str4)+1);
71  printf("%d bytes send from server2\n", n);
72  SDL_Delay(1000);
73
74  printf("read from server1\n");
75  n = server1->readPacket((byte*)buf, 1024);
76  printf("read %d bytes\n", n);
77  if (n<0)
78    return -1;
79
80  printf("data: '%s'\n", buf);
81
82  printf("read from server2\n");
83  n = server2->readPacket((byte*)buf, 1024);
84  printf("read %d bytes\n", n);
85  if (n<0)
86    return -1;
87
88  printf("data: '%s'\n", buf);
89
90  printf("read from client1\n");
91  n = client1->readPacket((byte*)buf, 1024);
92  printf("read %d bytes\n", n);
93  if (n<0)
94    return -1;
95
96  printf("data: '%s'\n", buf);
97
98  printf("read from client2\n");
99  n = client2->readPacket((byte*)buf, 1024);
100  printf("read %d bytes\n", n);
101  if (n<0)
102    return -1;
103
104  printf("data: '%s'\n", buf);
105
106  //sending bigger packets than 255 is not supported
107
108  printf("try to send more than 255 bytes\n");
109  printf("result: %d\n", client1->writePacket((byte*)buf, 1000));
110
111  server1->writePacket((byte*)str1, strlen(str1)+1);
112  SDL_Delay(500);
113  printf("try to read with a too small buffer\n");
114  printf("result: %d\n", client1->readPacket((byte*)buf, strlen(str1)));
115
116  return 0;
117}
118
119
120int testFramework(int argc, char** argv)
121{
122  printf("=================\n");
123  printf("TestFramework\n");
124  printf("=================\n");
125
126  Synchronizeable* clientSync = new SimpleSync("Client\0");
127  Synchronizeable* serverSync = new SimpleSync("Server\0");
128
129  unsigned int port = 9999;
130
131  /* create the network manager */
132  NetworkManager* nm = NetworkManager::getInstance();
133
134  /* initialize the network manager */
135  nm->initialize();
136
137  /* create a server stream */
138  nm->createServer(*serverSync, port);
139
140  /* esatblish a connection */
141  IPaddress ip;
142  int error = SDLNet_ResolveHost(&ip, "127.0.0.1", port);
143  //SDLNet_ResolveHost(&ip, "localhost", port);
144  if(error == -1)
145    printf("\n\nerror on address resolution, program inconsistancy\n\n");
146  nm->establishConnection(ip, *clientSync);
147  /* adding some break for connection setup */
148  SDL_Delay(20);
149
150  /* synchronize the data 1 time (increment for longer tests) */
151  for( int i = 0; i < 3; i++)
152  {
153    nm->synchronize();
154    /* simulate the network delay */
155    SDL_Delay(50);
156  }
157
158  printf("Test finished\n");
159
160
161  /* delete the network manager again */
162  delete nm;
163
164  delete clientSync;
165  delete serverSync;
166
167  return 0;
168}
169
170
171
172/**
173 *
174 * @param argc
175 * @param argv
176 * @return
177 */
178int startServer(int argc, char** argv)
179{
180  if( argc <= 2)
181  {
182    printf(" Wrong arguments try following notations:\n");
183    printf("   --server [port number]\n");
184    return 0;
185  }
186
187  int port = atoi(argv[2]);
188  printf("Starting Server on port %i\n", port);
189
190  NetworkManager* netMan = NetworkManager::getInstance();
191  Synchronizeable* ss = new SimpleSync("Server\0");
192
193  netMan->createServer(/**ss, */port);
194  SDL_Delay(20);
195
196  for(;;)
197  {
198    netMan->synchronize();
199    SDL_Delay(1000);
200  }
201
202  delete netMan;
203  delete ss;
204
205
206  return 0;
207}
208
209
210int startClient(int argc, char** argv)
211{
212  if( argc < 3)
213  {
214    printf(" Wrong arguments try following notations:\n");
215    printf("   --client [server ip] [port number]\n");
216    printf("   --client [server name] [port number]\n");
217    return 0;
218  }
219
220  char* name = argv[2];
221  int port = atoi(argv[3]);
222  printf("Connecting to %s, on port %i\n", name, port);
223
224  IPaddress ip;
225  int error = SDLNet_ResolveHost(&ip, name, port);
226  if(error == -1)
227    printf("\n\nerror on address resolution, program inconsistancy\n\n");
228
229  NetworkManager* netMan = NetworkManager::getInstance();
230  Synchronizeable* ss = new SimpleSync("Client\0");
231
232  netMan->establishConnection((const char*)"localhost", port/*,ip, *ss*/);
233
234  for(;;)
235  {
236    netMan->synchronize();
237    SDL_Delay(500);
238  }
239
240
241  delete netMan;
242  delete ss;
243
244  return 0;
245}
246
247
248
249int startListen(int argc, char** argv)
250{
251  if( argc < 3)
252  {
253    printf(" Wrong arguments try following notations:\n");
254    printf("   --listen [server ip] [port number]\n");
255    printf("   --listen [server name] [port number]\n");
256    return 0;
257  }
258
259  char* name = argv[2];
260  int port = atoi(argv[3]);
261  printf("Connecting to %s, on port %i\n", name, port);
262
263  IPaddress ip;
264  int error = SDLNet_ResolveHost(&ip, name, port);
265  if(error == -1)
266    printf("\n\nerror on address resolution, program inconsistancy\n\n");
267
268  NetworkManager* netMan = NetworkManager::getInstance();
269  Synchronizeable* ss = new ReadSync("WriteSync\0");
270
271  netMan->establishConnection(ip, *ss);
272
273  for(;;)
274  {
275    netMan->synchronize();
276    SDL_Delay(10);
277  }
278
279
280  delete netMan;
281  delete ss;
282
283  return 0;
284}
285
286void testFloatConverter(float f)
287{
288  char* s = Converter::floatToBinString(f);
289  printf("%f = ", f);
290  printf(s); printf("\n");
291 
292  byte* res = Converter::floatToByteArray(f);
293  printf("Byte Array: ");
294  for (int i = 0; i < 4; i++)
295    printf("%i  ", res[i]);
296  printf("\n");
297 
298  float b = Converter::byteArrayToFloat(res);
299  printf("ReConvert: %f \n", b);
300}
301
302void testFloatConverter2(float f)
303{
304  char* s = Converter::floatToBinString(f);
305  printf("### %f = ", f);
306  printf(s); printf("\n");
307 
308  byte* res = Converter::_floatToByteArray(f);
309  printf("Byte Array: ");
310  for (int i = 0; i < 4; i++)
311    printf("%i  ", res[i]);
312  printf("\n");
313 
314  float b = Converter::_byteArrayToFloat(res);
315  printf("ReConvert: %f \n", b);
316}
317int converter(int argc, char** argv)
318{
319  /*
320  int x = 200564786;
321  printf("To convert: %i\n", x);
322  byte* res = Converter::intToByteArray(x);
323  for (int i = 0; i < 4; i++)
324    printf("%i  ", res[i]);
325  printf("\n");
326 
327  int z = Converter::byteArrayToInt(res);
328 
329  printf("ReConvert: %i\n", z);
330
331 
332  //float a = 5.4f;
333  //float b = 2.0f;
334  //printf("%f mod %f = %f", a, b, a % b);
335 
336  printf("\n");
337 
338  */
339  /*
340  float y;
341  char* s;
342 
343  y = 12.0f;
344  s = Converter::floatToBinString(y);
345  printf("%f = ", y);
346  printf(s); printf("\n");
347 
348  y = 24549026.0f;
349  s = Converter::floatToBinString(y);
350  printf("%f = ", y);
351  printf(s); printf("\n");
352 
353  y = 12.4e20f;
354  s = Converter::floatToBinString(y);
355  printf("%f = ", y);
356  printf(s); printf("\n");
357 
358  y = 4.7824f;
359  s = Converter::floatToBinString(y);
360  printf("%f = ", y);
361  printf(s); printf("\n");
362 
363  y = -4.7824f;
364  s = Converter::floatToBinString(y);
365  printf("%f = ", y);
366  printf(s); printf("\n");
367 
368  y = -14.35e14f;
369  s = Converter::floatToBinString(y);
370  printf("%f = ", y);
371  printf(s); printf("\n");
372                                                            */
373 
374 
375  /*
376  float a = 12.3f;
377 
378  char* s = Converter::floatToBinString(a);
379  printf("%f = ", a);
380  printf(s); printf("\n");
381 
382  byte* res = Converter::floatToByteArray(a);
383  printf("Byte Array: \n");
384  for (int i = 0; i < 4; i++)
385    printf("%i  ", res[i]);
386  printf("\n");
387 
388  float b = Converter::byteArrayToFloat(res);
389  printf("ReConvert: %f \n", b);
390  */
391//  testFloatConverter(12.3e-53f); printf("\n");
392//  testFloatConverter(134.26455646546548741661675165f); printf("\n");
393 // testFloatConverter(35.67e14f); printf("\n");
394 
395  testFloatConverter(12.3e-7f); printf("\n");
396  testFloatConverter(134.26455646546548741661675165f); printf("\n");
397  testFloatConverter(35.67e14f); printf("\n");
398 
399  return 0;
400}
401
402
403
404/**
405 *
406 *  main function
407 *
408 * here the journey begins
409 */
410int main(int argc, char** argv)
411{
412  int i;
413  // here the pre-arguments are loaded, these are needed to go either to orxonx itself, Help, or Benchmark.
414  for(i = 1; i < argc; ++i)
415  {
416    //else if(!strcmp( "--gui", argv[i]) || !strcmp("-g", argv[i])) showGui = true;
417    if (! strcmp( "--sockettest", argv[i]) || !strcmp("-st", argv[i]))
418      return testSocket(argc, argv);
419    else if (! strcmp( "--frameworktest", argv[i]) || !strcmp("-ft", argv[i]))
420      return testFramework(argc, argv);
421    else if (! strcmp( "--server", argv[i]) || !strcmp("-s", argv[i]))
422      return startServer(argc, argv);
423    else if (! strcmp( "--client", argv[i]) || !strcmp("-c", argv[i]))
424      return startClient(argc, argv);
425    else if (! strcmp( "--listen", argv[i]) || !strcmp("-l", argv[i]))
426      return startListen(argc, argv);
427    else if (! strcmp( "--converter", argv[i]) || !strcmp("-o", argv[i]))
428      return converter(argc, argv);
429  }
430
431  startHelp(argc, argv);
432
433  return 0;
434}
435
436
437bool ShellBuffer::addBufferLineStatic(const char* line, ...)
438{
439  //va_list arguments;
440  //vprintf(line, arguments);
441  printf("%s", line);
442}
Note: See TracBrowser for help on using the repository browser.