#include "stdlibincl.h" #include #include #include "shell_buffer.h" #include "class_list.h" #include "network_manager.h" #include "network_socket.h" #include "network_stream.h" #include "synchronizeable.h" #include "simple_sync.h" int verbose = 4; /* outputs the help */ int startHelp(int argc, char** argv) { printf("Network is a network unit test\n"); printf(" --help: this output\n"); printf(" --sockettest test network_socket\n"); printf(" --frameworktest test the network module\n"); printf("\n"); } /* test SDL network socket */ int testSocket(int argc, char** argv) { IPaddress ip; SDLNet_ResolveHost(&ip, "127.0.0.1", 9999); NetworkSocket server; server.listen(9999); SDL_Delay(20); NetworkSocket client(ip, 9999); char buf[1024]; printf("read from client before sending data\n"); printf("result: %d bytes\n", client.readBytes((byte*)buf, 1024)); printf("read from server before sending data\n"); printf("result: %d bytes\n", server.readBytes((byte*)buf, 1024)); int n; char * str1 = "client to server"; char * str2 = "server to client"; n = client.writeBytes((byte*)str1, strlen(str1)+1); printf("%d bytes send from client\n", n); n = server.writeBytes((byte*)str2, strlen(str2)+1); printf("%d bytes send from server\n", n); SDL_Delay(1000); printf("read from server\n"); n = server.readBytes((byte*)buf, 1024); printf("read %d bytes\n", n); if (n<0) return -1; printf("data: %s\n", buf); printf("read from client\n"); n = client.readBytes((byte*)buf, 1024); printf("read %d bytes\n", n); if (n<0) return -1; printf("data: %s\n", buf); printf("testing a bigger amount of data\n"); #define _N_ELEMENTS 212994 char sendbuf[_N_ELEMENTS+1]; char recvbuf[_N_ELEMENTS+1]; sendbuf[_N_ELEMENTS] = '\0'; recvbuf[_N_ELEMENTS] = '\0'; for (int i = 0; i<_N_ELEMENTS; i++) sendbuf[i] = i%26 + 65; printf("write\n"); printf("result = %d\n", client.writeBytes((byte*)sendbuf, _N_ELEMENTS)); SDL_Delay(50); printf("read\n"); int nbytes = server.readBytes((byte*)recvbuf, _N_ELEMENTS); int offset = nbytes; while (nbytes>0) { SDL_Delay(10); //printf("read\n"); nbytes = server.readBytes((byte*)recvbuf+offset, _N_ELEMENTS-offset); offset += nbytes; //printf("nbytes=%d, offset=%d\n", nbytes, offset); } printf("strcmp = %d (0 is good :D not 0 is evil)\noffset = %d\n", strncmp(sendbuf, recvbuf, _N_ELEMENTS), offset); //printf("%s\n%s\n", sendbuf, recvbuf); for (int i = 0; i<_N_ELEMENTS; i++) { if (sendbuf[i]!=recvbuf[i]) { printf("byte %d is the first difference\n", i+1); break; } } return 0; } int testFramework(int argc, char** argv) { printf("=================\n"); printf("TestFramework\n"); printf("=================\n"); IPaddress ip; //SDLNet_ResolveHost(&ip, "127.0.0.1", 9999); SDLNet_ResolveHost(&ip, "localhost", 9999); Synchronizeable* clientSync = new SimpleSync(); Synchronizeable* serverSync = new SimpleSync(); /* create the network manager */ NetworkManager* nm = new NetworkManager(); /* initialize the network manager */ nm->initialize(); /* create a server stream */ nm->createServer(*serverSync, 9999); /* esatblish a connection */ nm->establishConnection(ip, *clientSync); /* synchronize the data 1 time (increment for longer tests) */ for( int i = 0; i < 1; i++) { nm->synchronize(); } /* delete the network manager again */ delete nm; return 0; } /** * * main function * * here the journey begins */ int main(int argc, char** argv) { // here the pre-arguments are loaded, these are needed to go either to orxonx itself, Help, or Benchmark. int i; for(i = 1; i < argc; ++i) { //else if(!strcmp( "--gui", argv[i]) || !strcmp("-g", argv[i])) showGui = true; if (! strcmp( "--sockettest", argv[i]) || !strcmp("-s", argv[i])) return testSocket(argc, argv); else if (! strcmp( "--frameworktest", argv[i]) || !strcmp("-f", argv[i])) return testFramework(argc, argv); } startHelp(argc, argv); return 0; } bool ShellBuffer::addBufferLineStatic(const char* line, ...) { //va_list arguments; //vprintf(line, arguments); printf("%s", line); }