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"); } } } }