static int manageEnet(ServerData *data) { ENetEvent event; PacketGeneric *packet; Client *client; assert(data); /* Wait up to 1000 milliseconds for an event. */ while (enet_host_service(data->server, &event, 1000) > 0) { switch (event.type) { case ENET_EVENT_TYPE_CONNECT: printf("A new client connected from %x:%u.\n", event.peer->address.host, event.peer->address.port); /* broadcast join message to others */ sendJoin(data, &event); client = (Client*)event.peer->data; break; case ENET_EVENT_TYPE_RECEIVE: /* discard bad packets */ if (event.packet->dataLength < sizeof(PacketGeneric)) break; printf("A packet of length %u was received on channel %u.\n", event.packet->dataLength, event.channelID); /* handle packet */ client = (Client*)event.peer->data; packet = (PacketGeneric*)event.packet->data; switch (packet->id) { case PACKET_ID_ACTOR_STATE: handleState(data, &event); break; case PACKET_ID_ACTOR_FULL_STATE: handleFullState(data, &event); break; } /* Clean up the packet now that we're done using it. */ enet_packet_destroy(event.packet); break; case ENET_EVENT_TYPE_DISCONNECT: /* broadcast part message to others */ sendPart(data, &event); /* Reset the peer's client information. */ serverFreeClient(data, event.peer->data); event.peer->data = NULL; } } /* send all response packets */ enet_host_flush(data->server); return RETURN_OK; }
///////////////////// // Parse a mode packet void IRCClient::parseMode(const IRCClient::IRCCommand &cmd) { if (m_authorizedState == AUTH_USER_SENT) { sendJoin(); } }