Просмотр исходного кода

Added convenience methods to Server for handling client data

Ivan Safrin 12 лет назад
Родитель
Сommit
559079a1d8
2 измененных файлов с 19 добавлено и 3 удалено
  1. 7 1
      Core/Contents/Include/PolyServer.h
  2. 12 2
      Core/Contents/Source/PolyServer.cpp

+ 7 - 1
Core/Contents/Include/PolyServer.h

@@ -41,6 +41,8 @@ namespace Polycode {
 		unsigned int dataSize;
 		unsigned short dataType;
 		
+		ServerClient *client;
+		
 		static const int EVENTBASE_SERVERCLIENTEVENT = 0x780;
 		static const int EVENT_CLIENT_DATA = EVENTBASE_SERVERCLIENTEVENT+0;
 	};
@@ -50,7 +52,7 @@ namespace Polycode {
 		ServerClient();
 		~ServerClient();
 		
-		void handlePacket(Packet *packet);
+		ServerClientEvent *handlePacket(Packet *packet);
 		
 		unsigned int clientID;
 		PeerConnection *connection;
@@ -63,6 +65,10 @@ namespace Polycode {
 		
 		ServerClient *client;
 		
+		char *data;
+		unsigned int dataSize;
+		unsigned short dataType;		
+		
 		static const int EVENTBASE_SERVEREVENT = 0x700;
 		static const int EVENT_CLIENT_CONNECTED = EVENTBASE_SERVEREVENT+0;
 		static const int EVENT_CLIENT_DATA = EVENTBASE_SERVEREVENT+1;

+ 12 - 2
Core/Contents/Source/PolyServer.cpp

@@ -35,12 +35,14 @@ ServerClient::~ServerClient() {
 	
 }
 
-void ServerClient::handlePacket(Packet *packet) {
+ServerClientEvent *ServerClient::handlePacket(Packet *packet) {
 	ServerClientEvent *event = new ServerClientEvent();	
 	event->data = packet->data;
 	event->dataSize = packet->header.size;
-	event->dataType = packet->header.type;		
+	event->dataType = packet->header.type;
+	event->client = this;
 	dispatchEvent(event, ServerClientEvent::EVENT_CLIENT_DATA);	
+	return event;
 }
 
 Server::Server(unsigned int port,  unsigned int rate, ServerWorld *world) : Peer(port) {
@@ -139,7 +141,15 @@ void Server::handlePacket(Packet *packet, PeerConnection *connection) {
 		}
 		break;		
 		default:
+		{
 			client->handlePacket(packet);
+			ServerEvent *serverEvent = new ServerEvent();
+			serverEvent->client = client;
+			serverEvent->data = packet->data;
+			serverEvent->dataSize = packet->header.size;
+			serverEvent->dataType = packet->header.type;
+			dispatchEvent(serverEvent, ServerEvent::EVENT_CLIENT_DATA);
+		}
 		break;
 	}
 }