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