示例#1
0
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;
}
示例#2
0
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"));
}
示例#3
0
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"));
    }
}
示例#4
0
// "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"));
	}
}
示例#5
0
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));
}