bool GameNetConnection::_handle_message(int sender, SerializeBuffer& serializer) { // Read type from buffer message_t type; serializer.read_int(type); switch (type) { case PACKET_CLIENT2SERV_CONNECTION_AFFIRM: { net_recv_connection_affirm(serializer, sender, pd); break; } case PACKET_SERV2CLIENT_INITIALPLAYERDATA: { net_recv_game_init_data(serializer, sender, init_data, pd); break; } case PACKET_ACTION: { net_recv_player_actions(serializer, sender, pd); break; } case PACKET_CHAT_MESSAGE: { ChatMessage msg; msg.deserialize(serializer); chat.add_message(msg); break; } default: serializer.move_read_position(-(int)sizeof(int)); return false; } return true; }
static bool has_message(std::vector<QueuedMessage>& delayed_messages, int type) { for (int i = 0; i < delayed_messages.size(); i++) { SerializeBuffer* msg = delayed_messages[i].message; int msg_type; msg->read_int(msg_type); msg->move_read_position(-(int)sizeof(int)); if (type == msg_type) { return true; } } return false; }
static int find_message_type(QueuedMessage& qm, std::vector<QueuedMessage>& delayed_messages, int type) { for (int i = 0; i < delayed_messages.size(); i++) { qm = delayed_messages[i]; SerializeBuffer* msg = qm.message; int msg_type; msg->read_int(msg_type); msg->move_read_position(-(int) sizeof(int)); if (type == msg_type) { return i; } } return -1; }
static bool extract_message(QueuedMessage& qm, std::vector<QueuedMessage>& delayed_messages, int type) { for (int i = 0; i < delayed_messages.size(); i++) { qm = delayed_messages[i]; SerializeBuffer* msg = qm.message; int msg_type; msg->read_int(msg_type); if (type == msg_type) { delayed_messages.erase(delayed_messages.begin() + i); return true; } msg->move_read_position(-(int)sizeof(int)); } return false; }