Example #1
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"));
}
Example #2
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"));
	}
}
Example #3
0
void ServerLobbyEvents::on_event_start_game(const NetGameEvent &e, ServerLobbyPlayer *player)
{
    if(player->current_game)
    {
        if(player->current_game->get_player_collection()->get_owner() == player)
        {
            ServerGame *game = lobby_model->games.create_game(player->current_game);
            if(game->start())
                player->current_game->set_state(ServerLobbyGame::playing);
        }
        else
        {
            player->send_event(NetGameEvent(STC_LOBBY_ERROR_MESSAGE, "Can not start a game without owning it"));
        }
    }
    else
    {
        player->send_event(NetGameEvent(STC_LOBBY_ERROR_MESSAGE, "Not joined any game"));
    }
}
Example #4
0
void ServerLobbyEvents::on_event_leave_game(const NetGameEvent &e, ServerLobbyPlayer *player)
{
    if(player->current_game)
    {
        player->current_game->get_player_collection()->remove_player(player);
        lobby_model->games.remove_empty_games();
    }
    else
    {
        player->send_event(NetGameEvent(STC_LOBBY_ERROR_MESSAGE, "Not joined any game"));
    }
}
Example #5
0
NetGameEvent NetGameNetworkData::receive_data(const void *data, int size, int &out_bytes_consumed)
{
	if (size >= 2)
	{
		int payload_size = *static_cast<const unsigned short *>(data);
		if (payload_size > packet_limit)
			throw Exception("Incoming message too big");

		if (size >= 2 + payload_size)
		{
			out_bytes_consumed = 2 + payload_size;
			DataBuffer buffer(static_cast<const char*>(data) + 2, payload_size);
			return decode_event(buffer);
		}
	}

	out_bytes_consumed = 0;
	return NetGameEvent(std::string());
}
Example #6
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"));
    }
}
Example #7
0
// "Game-RequestStartGame" event was received
void Server::on_event_game_requeststart(const NetGameEvent &e, ServerUser *user)
{
	log_event("events", "Client requested game start");

	if(game_running == false)
	{
		game_running = true;

		std::string map_name = "Map1";
		int max_players = 6;

		CustomType position(143,22,3);

		NetGameEvent loadMapEvent("Game-LoadMap");
		loadMapEvent.add_argument(map_name);
		loadMapEvent.add_argument(max_players);
		loadMapEvent.add_argument(position);
		network_server.send_event(loadMapEvent);

		network_server.send_event(NetGameEvent("Game-Start"));
	}
}
Example #8
0
void GameViewChat::on_lineedit_chat_enter_pressed()
{
	client->get_network_client()->send_event(NetGameEvent(CTS_GAME_ADD_MESSAGE, lineedit_chat->get_text()));
	lineedit_chat->set_text("");
}
Example #9
0
	void NetGameConnectionImpl::connection_main()
	{
		try
		{
			if (!is_connected)
				connection = TCPConnection::connect(socket_name);
			is_connected = true;
			site->add_network_event(NetGameNetworkEvent(base, NetGameNetworkEvent::client_connected));

			int bytes_received = 0;
			int bytes_sent = 0;
			const int max_event_packet_size = 32000 + 2;
			auto receive_buffer = DataBuffer::create(max_event_packet_size);
			auto send_buffer = DataBuffer::create(0);

			bool send_graceful_close = false;

			while (true)
			{
				if (read_connection_data(*receive_buffer, bytes_received))
					break;
				if (write_connection_data(*send_buffer, bytes_sent, send_graceful_close))
					break;

				std::unique_lock<std::mutex> lock(mutex);
				if (stop_flag)
					break;
				NetworkEvent *events[] = { connection.get() };
				worker_event.wait(lock, 1, events);
			}

			site->add_network_event(NetGameNetworkEvent(base, NetGameNetworkEvent::client_disconnected));
		}
		catch (const Exception& e)
		{
			site->add_network_event(NetGameNetworkEvent(base, NetGameNetworkEvent::client_disconnected, NetGameEvent(e.message)));
		}
	}
Example #10
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));
}