#include "game_client.h" #include #include #include #include #include #include #include int Connect(game_server* gs) { struct sockaddr_in serverAddr; serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(gs->info.port); int blocking_mode = 1; gs->socket = socket(AF_INET, SOCK_STREAM, 0); inet_pton(AF_INET, gs->info.ip, &serverAddr.sin_addr); if(connect(gs->socket, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) < 0) { ioctl(gs->socket, FIONBIO, &blocking_mode); // Shuld be 1 return 0; } return -1; } int Client_Send(game_server* gs,packet* packet) { int sendPacketSize = sizeof(int) + sizeof(int) + packet->size; unsigned char* buffer = malloc(sizeof(int) + sizeof(int) + packet->size); memcpy(buffer, &packet->packetTpye, sizeof(int)); memcpy(buffer+sizeof(int), &packet->size, sizeof(int)); memcpy(buffer+sizeof(int)+sizeof(int), &packet->packet, packet->size); write(gs->socket, buffer, sendPacketSize); return 0; } int Client_Recive(game_server* gs, packet* packet) { if(read(gs->socket, &packet->packetTpye, sizeof(int)) <= 0) { return 0; } if(read(gs->socket, &packet->size, sizeof(int)) <= 0 ) { return -1; } packet->packet = malloc(packet->size); if(read(gs->socket, &packet->packet, packet->size) <= 0) { free(packet->packet); return -1; } return 1; } int Disconnect(game_server* gs) { close(gs->socket); return 0; }