#include #include #include #include #include #include #include #include #include #include #include #include "EasySockets.h" #include "Game.h" #include "LinkedList.h" #include "Player.h" bool wait =false; void* WaitForInput(){ if (wait) {char c = getchar();} wait=false; } int socket_id; struct sockaddr_in incoming; void InterpretReceivedSignal(Player* p, const char* buffer, int len, bool* fileSwitch){ printf("Interpreting: %s", buffer); if (state==0){ wait=false; } else { if (buffer[0] == 'u') { p->y = p->y - 1; } else if (buffer[0] == 'd') { p->y = p->y + 1; } else if (buffer[0] == 'l') { p->x = p->x - 1; } else if (buffer[0] == 'r') { p->x = p->x + 1; }else if (buffer[0] == 'f'){ *fileSwitch=true; } } } int series =0; void UpdateStateToClients(){ for (int i =0; i<200; i++){ if (playerConnected[i]){ Player* p_receiver = players[i]; for (int j =0; j<200; j++){ if (playerConnected[j]) { char* buffer[45]; Player* p = players[j]; sprintf(buffer, "%d,%d,%d,%d,%d\r\n",series, j, p->x, p->y, p->points); printf(">> %s",buffer); send(p_receiver->connectionId, buffer, strlen(buffer), 0); }} char end[8] = "end\r\n"; send(p_receiver->connectionId, end, strlen(end),0); } } series++; } void* PlayerDataReaderThread(void* arg){ char buffer[550]; Player* p = (Player*)arg; printf("%d", p->points); socklen_t size = sizeof(p->incoming); bool isFile=false; FILE* fileHandle = NULL; while (true) { int s = recv(p->connectionId, buffer, 550, 0); if (s>0) { if (!isFile) {InterpretReceivedSignal(p, buffer, 550,&isFile); continue;} if (isFile){ printf("is file \n"); if (fileHandle==NULL) fileHandle=fopen("recv", "w+"); //receiving the file in parts printf("buffer content: %s\n", buffer); fwrite(buffer,s,1,fileHandle); if (s<550){ printf("ended receiving file...\n"); //if not data was received fflush(fileHandle); fclose(fileHandle); isFile=false; } continue; } if (state >0) UpdateStateToClients(); }else{ } } } void* JoiningThread(){ while (true) { int a = AcceptClient(socket_id, &incoming); Player* p = CreatePlayer("tttt", a, incoming); AddPlayerToList(p); printf("Players: %d/200", GetPlayersCount()); pthread_create(&p->threadId, NULL, PlayerDataReaderThread, p); } return 0; } int BeginGame(){ state=1; } int main() { InitPlayers(); setvbuf(stdout, NULL, _IONBF,0); socket_id = CreateSocket(); //Connect(socket_id, "0.0.0.0", 12345); int c = CreateServer(socket_id, 1234); printf("Waiting for players to connect. \n Press any key to start..."); wait=true; pthread_t thread_id; pthread_create(&thread_id, NULL, JoiningThread, NULL); wait=true; while(wait){} printf("..."); //pthread_exit(thread_id); BeginGame(); printf("Press any key to close the server\n"); getchar(); return 0; }