|
@@ -8,6 +8,7 @@
|
|
|
#include <arpa/inet.h>
|
|
|
#include <sys/types.h>
|
|
|
#include "Stream.h"
|
|
|
+#include "SocketUtils.h"
|
|
|
|
|
|
void serverInitDefaults(Server* s)
|
|
|
{
|
|
@@ -156,33 +157,41 @@ void* clientHandler(void* data)
|
|
|
Stream in;
|
|
|
while(1)
|
|
|
{
|
|
|
- streamInit(&in);
|
|
|
- int size = recv(s->clientSockets[id], in.data, in.size, 0);
|
|
|
+ streamInit(&in, 1024);
|
|
|
+ int size = receiveAll(s->clientSockets[id], &in);
|
|
|
if(size > 0)
|
|
|
{
|
|
|
- int package = ((int) in.data[0]);
|
|
|
- if(package >= 0 && package < s->hIndex)
|
|
|
+ char package;
|
|
|
+ if(streamGetChar(&in, &package) == -1)
|
|
|
{
|
|
|
- printf("Received package %d from %d\n", package, id);
|
|
|
- in.index = 1;
|
|
|
- in.size = size;
|
|
|
- s->handlers[package](&in);
|
|
|
+ printf("Invalid package %d from %d\n", (int) package, id);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- printf("Invalid package %d from %d\n", package, id);
|
|
|
+ if(package >= 0 && package < s->hIndex)
|
|
|
+ {
|
|
|
+ printf("Received package %d from %d\n", (int) package, id);
|
|
|
+ s->handlers[(int) package](&in);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ printf("Invalid package %d from %d\n", (int) package, id);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
else if(size == 0)
|
|
|
{
|
|
|
printf("Client %d closed remote socket\n", id);
|
|
|
+ streamRemove(&in);
|
|
|
break;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
perror("recv error");
|
|
|
+ streamRemove(&in);
|
|
|
break;
|
|
|
}
|
|
|
+ streamRemove(&in);
|
|
|
}
|
|
|
|
|
|
if(close(s->clientSockets[id]) != 0)
|
|
@@ -201,7 +210,7 @@ void* clientHandler(void* data)
|
|
|
|
|
|
int serverSend(int clientSocket, Stream* out)
|
|
|
{
|
|
|
- if(send(clientSocket, out->data, out->index, 0) == -1)
|
|
|
+ if(sendAll(clientSocket, out) == -1)
|
|
|
{
|
|
|
perror("Cannot send data");
|
|
|
return -1;
|
|
@@ -240,10 +249,11 @@ void serverWaitForConnection(Server* s)
|
|
|
perror("Cannot create thread");
|
|
|
|
|
|
Stream out;
|
|
|
- streamInit(&out);
|
|
|
+ streamInit(&out, 16);
|
|
|
streamWriteChar(&out, -1);
|
|
|
streamWriteChars(&out, "Cannot create thread\n");
|
|
|
serverSend(clientSocket, &out);
|
|
|
+ streamRemove(&out);
|
|
|
close(clientSocket);
|
|
|
}
|
|
|
else
|
|
@@ -251,7 +261,7 @@ void serverWaitForConnection(Server* s)
|
|
|
s->clientSockets[i] = clientSocket;
|
|
|
|
|
|
Stream out;
|
|
|
- streamInit(&out);
|
|
|
+ streamInit(&out, 64);
|
|
|
streamWriteChar(&out, 1);
|
|
|
streamWriteChars(&out, "Welcome to the server, please enter your command:\n");
|
|
|
if(serverSend(clientSocket, &out) == -1)
|
|
@@ -260,6 +270,7 @@ void serverWaitForConnection(Server* s)
|
|
|
close(clientSocket);
|
|
|
s->clientSockets[i] = -1;
|
|
|
}
|
|
|
+ streamRemove(&out);
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
@@ -270,10 +281,11 @@ void serverWaitForConnection(Server* s)
|
|
|
printf("max clients reached\n");
|
|
|
|
|
|
Stream out;
|
|
|
- streamInit(&out);
|
|
|
+ streamInit(&out, 16);
|
|
|
streamWriteChar(&out, -1);
|
|
|
streamWriteChars(&out, "the server is full\n");
|
|
|
serverSend(clientSocket, &out);
|
|
|
+ streamRemove(&out);
|
|
|
close(clientSocket);
|
|
|
break;
|
|
|
}
|