|
@@ -154,16 +154,16 @@ void* clientHandler(void* data)
|
|
|
Server* s = ((ThreadData*) data)->server;
|
|
|
|
|
|
Stream in;
|
|
|
- while(strcmp(in.data, "quit") != 0)
|
|
|
+ while(1)
|
|
|
{
|
|
|
- int size = recv(s->clientSockets[id], in.data, BUFFER_SIZE - 1, 0);
|
|
|
+ streamInit(&in);
|
|
|
+ int size = recv(s->clientSockets[id], in.data, in.size, 0);
|
|
|
if(size > 0)
|
|
|
{
|
|
|
- in.data[size] = '\0';
|
|
|
int package = ((int) in.data[0]);
|
|
|
if(package >= 0 && package < s->hIndex)
|
|
|
{
|
|
|
- printf("Received package %d from %d: %s\n", package, id, in.data);
|
|
|
+ printf("Received package %d from %d\n", package, id);
|
|
|
in.index = 1;
|
|
|
in.size = size;
|
|
|
s->handlers[package](&in);
|
|
@@ -199,11 +199,19 @@ void* clientHandler(void* data)
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
+int serverSend(int clientSocket, Stream* out)
|
|
|
+{
|
|
|
+ if(send(clientSocket, out->data, out->index, 0) == -1)
|
|
|
+ {
|
|
|
+ perror("Cannot send data");
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
void serverWaitForConnection(Server* s)
|
|
|
{
|
|
|
socklen_t addrlen = sizeof(struct sockaddr_in);
|
|
|
- char buffer[BUFFER_SIZE];
|
|
|
-
|
|
|
while(1)
|
|
|
{
|
|
|
printf("Waiting for connections...\n");
|
|
@@ -231,19 +239,22 @@ void serverWaitForConnection(Server* s)
|
|
|
{
|
|
|
perror("Cannot create thread");
|
|
|
|
|
|
- strcpy(buffer, "error: cannot create thread\n");
|
|
|
- if(send(clientSocket, buffer, strlen(buffer), 0) == -1)
|
|
|
- {
|
|
|
- perror("Cannot send error");
|
|
|
- }
|
|
|
+ Stream out;
|
|
|
+ streamInit(&out);
|
|
|
+ streamWriteChar(&out, -1);
|
|
|
+ streamWriteChars(&out, "Cannot create thread\n");
|
|
|
+ serverSend(clientSocket, &out);
|
|
|
close(clientSocket);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
s->clientSockets[i] = clientSocket;
|
|
|
|
|
|
- strcpy(buffer, "Welcome to server, please enter your command:\n");
|
|
|
- if(send(clientSocket, buffer, strlen(buffer), 0) == -1)
|
|
|
+ Stream out;
|
|
|
+ streamInit(&out);
|
|
|
+ streamWriteChar(&out, 1);
|
|
|
+ streamWriteChars(&out, "Welcome to the server, please enter your command:\n");
|
|
|
+ if(serverSend(clientSocket, &out) == -1)
|
|
|
{
|
|
|
perror("Cannot send welcome message");
|
|
|
close(clientSocket);
|
|
@@ -258,11 +269,11 @@ void serverWaitForConnection(Server* s)
|
|
|
{
|
|
|
printf("max clients reached\n");
|
|
|
|
|
|
- strcpy(buffer, "error: max clients reached\n");
|
|
|
- if(send(clientSocket, buffer, strlen(buffer), 0) == -1)
|
|
|
- {
|
|
|
- perror("Cannot send error");
|
|
|
- }
|
|
|
+ Stream out;
|
|
|
+ streamInit(&out);
|
|
|
+ streamWriteChar(&out, -1);
|
|
|
+ streamWriteChars(&out, "the server is full\n");
|
|
|
+ serverSend(clientSocket, &out);
|
|
|
close(clientSocket);
|
|
|
break;
|
|
|
}
|