Ejemplo n.º 1
0
// An event was received from a client
void Server::on_event_received(NetGameConnection *connection, const NetGameEvent &e)
{
	log_event("events", "Client sent event: %1", e.to_string());

	ServerUser *user = ServerUser::get_user(connection);
	if(user)
	{
		bool handled_event = false;

		if (user->id == 0)	// User has not logged in, so route events to login dispatcher
		{
			// Route login events
			handled_event = login_events.dispatch(e, user);
		}
		else
		{
			// Route game events
			handled_event = game_events.dispatch(e, user);
		}

		if (!handled_event)
		{
			// We received an event which we didn't hook up
			log_event("events", "Unhandled event: %1", e.to_string());
		}
	}
}
Ejemplo n.º 2
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;
}
Ejemplo n.º 3
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"));
}
Ejemplo n.º 4
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"));
    }
}
Ejemplo n.º 5
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"));
	}
}
Ejemplo n.º 6
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));
}