Beispiel #1
0
/***
	action for clientQueue[index]
*/
void handleReadBuf(int index){
	struct clientMsg data;
	int retVal;
	//printf("readBuf:%s\n",ClientsQueue[index].readBuf);
	parseClientMsg(ClientsQueue[index].readBuf, &data);

	if(data.msg == 1){
		////printf("Read msg from client\n");
		handleIncomingMsg(data, index);
	}
	else{
		// client sent a move
		if(index != clientIndexTurn){
			// it is not the client turn
			////printf("Client played out of turn");
			sendInvalidMoveToPlayer(index);
			return;
		}

		retVal = CheckAndMakeClientMove(data);
		clientIndexTurn = (clientIndexTurn+1) % (conPlayers); // keep the turn moving only between connected players
		if(retVal ==-1){
			//printf("invalid client move\n");
			sendInvalidMoveToPlayer(index);
			updateEveryoneOnMoveExceptIndex(index);
			notifyOnTurn();
		}
		else{
			//printf("valid client move\n");
			updateEveryoneOnMove(index);
			if(retVal==0) {
				notifyOnTurn();
			}
		}
	}

	// deleting read data from readBuf
	int i;
	for (i = 0; i < MSG_SIZE; ++i)
	{
		if (ClientsQueue[index].readBuf[i] == '}')
		{
			ClientsQueue[index].readBuf[i] = '\0';
			if (ClientsQueue[index].readBuf[i+1] == '{')
			{
				//printf("in the if\n");
				strcpy(ClientsQueue[index].readBuf, ClientsQueue[index].readBuf + i+1);
				break;
			}
		}
		ClientsQueue[index].readBuf[i] = '\0'; 
	}
	//strcpy(ClientsQueue[index].readBuf, ClientsQueue[index].readBuf + CLIENT_MSG_SIZE);
	// const char *ptr = strchr(ClientsQueue[index].readBuf, ')');
	// int ind = ptr - ClientsQueue[index].readBuf + 1;
	// strcpy(ClientsQueue[index].readBuf, ClientsQueue[index].readBuf + ind);
}
Beispiel #2
0
void handleReadBuf(int index){
	struct clientMsg data;
	int retVal;
	parseClientMsg(ClientsQueue[index].readBuf, &data);

	if (data.msg != 0) handleIncomingMsg(data, index);
	else{
		// client sent a move
		if (index != clientIndexTurn){
			// it is not the client turn, if didnt catch on the client side
			sendInvalidMoveToPlayer(index);
			return;
		}

		retVal = CheckAndMakeClientMove(data);
		clientIndexTurn = (clientIndexTurn + 1) % (conPlayers); // keep the turn moving only between connected players
		if (retVal == -1){
			sendInvalidMoveToPlayer(index);
			LastTurnHeap = -1;
			//updateEveryoneOnMoveExceptIndex(index);
			notifyOnTurn();
		}
		else if (retVal == 1) notifyOnDisconnectionToAll(index);
		else notifyOnTurn();
		
		//	if (retVal == 0) {
		//		notifyOnTurn();
		//	}
		//}
	}

	// deleting read data from readBuf
	int i;
	for (i = 0; i < MSGTXT_SIZE; ++i)
	{
		if (ClientsQueue[index].readBuf[i] == '}')
		{
			ClientsQueue[index].readBuf[i] = '\0';
			if (ClientsQueue[index].readBuf[i + 1] == '{')
			{
				//printf("in the if\n");
				strcpy(ClientsQueue[index].readBuf, ClientsQueue[index].readBuf + i + 1);
				break;
			}
		}
		ClientsQueue[index].readBuf[i] = '\0';
	}
}