Example #1
0
void Client::service()
{
	ENetEvent event;
	while(enet_host_service(m_Host, &event, NetworkServiceTimeout) > 0)
	{
		switch(event.type)
		{
			case ENET_EVENT_TYPE_RECEIVE:
			{
				IPacket p(event.channelID, event.packet);
				switch(p.messageId())
				{
					case SM_LoginResponse:
					{
						int slot = p.read<Int32>("Slot");
						m_LocalClientSlot = slot;
					} break;
					
					case SM_ClientList:
					{
						while(p.available(sizeof(Int32)))
						{
							int slot = p.read<Int32>("Slot");
							std::string name = p.readString("Name");
							clientInfoBySlot(slot)->activate(name);
						}
					} break;
					
					case SM_ClientConnected:
					{
						int slot = p.read<Int32>("Slot");
						std::string name = p.readString("Name");
						clientInfoBySlot(slot)->activate(name);
					} break;
					
					case SM_ClientDisconnected:
					{
						int slot = p.read<Int32>("Slot");
						ClientInfo* ci = clientInfoBySlot(slot);
						ci->reset();
					} break;
					
					case SM_ObjectUpdate:
					{
						Singleton<ClientObjectManager>()->readUpdate(&p);
					} break;
					
					default:
					{
						// Wenn sonst nix passt wirds ans Script geleitet
						m_PacketCallback.prepareCall();
// 						p.pushHandle();
						m_PacketCallback.executeCall(0, false, true);
						
// 						Error("Got unknown network message");
					}
				}
				
				enet_packet_destroy(event.packet);
			} break;
			
			case ENET_EVENT_TYPE_DISCONNECT:
			{
				Log("Server disconnected.\n");
				m_ServerPeer = NULL;
				// TODO: What now?
			} break;
			
			default:
			{
				Log("This should not be called O_o\n");
			}
		}
	}
}