DataBuffer NetGameNetworkData::encode_event(const NetGameEvent &e) { unsigned int length = 3 + e.get_name().length(); for (unsigned int i = 0; i < e.get_argument_count(); i++) length += get_encoded_length(e.get_argument(i)); DataBuffer data(length + 2); *data.get_data<unsigned short>() = length; unsigned char *d = data.get_data<unsigned char>() + 2; // Write name (2 + name length) unsigned int name_length = e.get_name().length(); *reinterpret_cast<unsigned short*>(d) = name_length; d += 2; memcpy(d, e.get_name().data(), name_length); d += name_length; for (unsigned int i = 0; i < e.get_argument_count(); i++) d += encode_value(d, e.get_argument(i)); // Write end marker *d = 0; return data; }
void ServerLobbyEvents::on_event_join_game(const NetGameEvent &e, ServerLobbyPlayer *player) { int lobby_game_id = e.get_argument(0); ServerLobbyGame *lobby_game = lobby_model->games.get_lobby_game(lobby_game_id); if(lobby_game) lobby_game->get_player_collection()->add_player(player); else player->send_event(NetGameEvent(STC_LOBBY_ERROR_MESSAGE, "Game not found")); }
void ServerLobbyEvents::on_event_change_game_settings(const NetGameEvent &e, ServerLobbyPlayer *player) { std::string game_name = e.get_argument(0); std::string map_name = e.get_argument(1); int max_players = e.get_argument(2); if(player->current_game) { ServerLobbyGame *lobby_game = player->current_game; lobby_game->set_map_name(map_name); lobby_game->set_max_players(max_players); lobby_game->set_name(game_name); lobby_game->send_game_info(); } else { player->send_event(NetGameEvent(STC_LOBBY_ERROR_MESSAGE, "You do not own a game")); } }
// "Login" event was received void Server::on_event_login(const NetGameEvent &e, ServerUser *user) { log_event("events", "Client requested login"); std::string user_name = e.get_argument(0); if(user_name.length() == 0) { user->send_event(NetGameEvent("Login-Fail", "Missing user name")); } else { // Assign name and id to User object (created when user connected earlier) user->user_name = user_name; user->id = next_user_id++; user->send_event(NetGameEvent("Login-Success")); } }
void ServerLobbyEvents::on_event_add_lobby_message(const NetGameEvent &e, ServerLobbyPlayer *lobby_player) { std::string message = e.get_argument(0); if(message.length() > 0) server->get_network_server()->send_event(NetGameEvent(STC_LOBBY_PLAYER_MESSAGE, lobby_player->player->id, message)); }