Exemple #1
0
        private static async Task StartServer()
        {
            Log.Print(LogType.Lobby, "Starting LobbyServer");
            WebSocketListener server = new WebSocketListener(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6060));

            server.Standards.RegisterStandard(new WebSocketFactoryRfc6455());

            // Server doesnt start if i await StartAsync...
#pragma warning disable CS4014
            server.StartAsync();
#pragma warning restore CS4014

            Log.Print(LogType.Lobby, "Started LobbyServer on '0.0.0.0:6060'");
            LobbyQueueManager.GetInstance();
            while (true)
            {
                Log.Print(LogType.Lobby, "Waiting for clients to connect...");
                WebSocket socket = await server.AcceptWebSocketAsync(CancellationToken.None);

                Log.Print(LogType.Lobby, "Client connected");
                LobbyServerConnection newClient = new LobbyServerConnection(socket);
                newClient.OnDisconnect += NewClient_OnDisconnect;
                ConnectedClients.Add(newClient);
                new Thread(newClient.HandleConnection).Start();
            }
        }
Exemple #2
0
        private void StartGame(PendingGame game)
        {
            game.GameInfo.GameServerProcessCode = "LobbyQueueManager.StartGame";
            foreach (LobbyPlayerInfo playerInfo in game.TeamInfo.TeamPlayerInfo)
            {
                if (!playerInfo.IsNPCBot)
                {
                    LobbyServerConnection      player          = LobbyServer.GetPlayerByAccountId(playerInfo.AccountId);
                    GameAssignmentNotification assNotification = new GameAssignmentNotification
                    {
                        GameInfo          = game.GameInfo,
                        GameResult        = GameResult.NoResult,
                        GameplayOverrides = DummyLobbyData.CreateLobbyGameplayOverrides(),
                        PlayerInfo        = player.GetLobbyPlayerInfo().Clone(),
                        Reconnection      = false,
                        Observer          = false
                    };
                    assNotification.PlayerInfo.ControllingPlayerId = 0;
                    player.SendMessage(assNotification);;
                }
            }
            game.GameStatus = GameStatus.Launching; // Put in wait state until game server starts
            game.SendNotification();

            new Task(() => {
                //GameManagerHolder.CreateGameManager(game.GameInfo, game.TeamInfo, game.PlayerSessionTokens); // Launch new game
                game.GameStatus = GameStatus.Launched; // Put in wait state until game server starts
                game.SendNotification();

                PendingGames.Remove(game);
            }).Start();
        }
Exemple #3
0
 public void SendNotification()
 {
     foreach (LobbyPlayerInfo playerInfo in TeamInfo.TeamPlayerInfo)
     {
         if (!playerInfo.IsNPCBot)
         {
             LobbyServerConnection player        = LobbyServer.GetPlayerByAccountId(playerInfo.AccountId);
             LobbyTeamInfo         teamInfoClone = TeamInfo.Clone();
             foreach (LobbyPlayerInfo pi in teamInfoClone.TeamPlayerInfo)
             {
                 if (pi.PlayerId == playerInfo.PlayerId)
                 {
                     pi.ControllingPlayerId = 0;
                 }
             }
             LobbyPlayerInfo playerInfoClone = playerInfo.Clone();
             playerInfoClone.ControllingPlayerId = 0;
             //Log.Print(LogType.Debug, $"Sending notification to {Players[i]}");
             GameInfoNotification gameInfoNotification = new GameInfoNotification()
             {
                 GameInfo   = GameInfo,
                 PlayerInfo = playerInfoClone,
                 TeamInfo   = teamInfoClone
             };
             _ = player.SendMessage(gameInfoNotification);
         }
     }
 }
Exemple #4
0
 public PendingGame(LobbyGameInfo gameInfo, LobbyTeamInfo teamInfo)
 {
     GameInfo            = gameInfo;
     TeamInfo            = teamInfo;
     PlayerSessionTokens = new List <long>();
     foreach (LobbyPlayerInfo playerInfo in TeamInfo.TeamPlayerInfo)
     {
         if (!playerInfo.IsNPCBot)
         {
             LobbyServerConnection player = LobbyServer.GetPlayerByAccountId(playerInfo.AccountId);
             PlayerSessionTokens.Add(player.SessionToken);
         }
     }
 }
Exemple #5
0
        public async static Task OnJoinMatchmakingQueue(LobbyServerConnection client, JoinMatchmakingQueueRequest request)
        {
            await client.SendMessage(new JoinMatchmakingQueueResponse()
            {
                ResponseId = request.RequestId
            });

            //Log.Print(LogType.Lobby, $"{client.PlayerInfo.GetHandle()} joined Matchmaking queue");

            //client.PlayerInfo.SetGameType(request.GameType);
            client.AllyBotDifficulty  = request.AllyBotDifficulty;
            client.EnemyBotDifficulty = request.EnemyBotDifficulty;

            LobbyQueueManager.AddPlayerToQueue(client);
        }
Exemple #6
0
        public static void AddPlayerToQueue(LobbyServerConnection client)
        {
            //LobbyQueue.LobbyQueue queue = LobbyQueueManager.GetInstance().FindQueue(client.PlayerInfo.GetGameType());
            //queue.AddPlayer(client);

            /*
             * if (client.SelectedGameType == GameType.Practice)
             * {
             *  StartPracticeGame(client);
             * }
             * else
             * {
             *  if (client.SelectedGameType == GameType.Coop && client.SelectedSubTypeMask == GameTypesUtils.SubTypeMasks.SoloVsBots)
             *  {
             *      Log.Print(LogType.Debug, "AI TEAMMATES");
             *  }
             *  AddPlayerToQueue(client);
             *
             *  QueuedPlayers[client.SelectedGameType] += 1;
             *  Instance.Queue.Add(client);
             *
             *  MatchmakingQueueAssignmentNotification assignmentNotification = new MatchmakingQueueAssignmentNotification()
             *  {
             *      Reason = "",
             *      MatchmakingQueueInfo = new LobbyMatchmakingQueueInfo()
             *      {
             *          ShowQueueSize = true,
             *          QueuedPlayers = QueuedPlayers[client.SelectedGameType],
             *          PlayersPerMinute = 1,
             *          GameConfig = new LobbyGameConfig(),
             *          QueueStatus = QueueStatus.Success,
             *          AverageWaitTime = TimeSpan.FromSeconds(100),
             *          GameType = client.SelectedGameType
             *      }
             *  };
             *
             *  client.SendMessage(assignmentNotification).Wait();
             *
             *  ProcessMatchmaking();
             * }
             * /*
             */
        }
Exemple #7
0
        public static async Task sendChatAsync(ChatNotification chat, LobbyServerConnection sender)
        {
            switch (chat.ConsoleMessageType)
            {
            case ConsoleMessageType.GlobalChat:
                sendChatToAll(chat);
                break;

            case ConsoleMessageType.WhisperChat:
                await sender.SendMessage(chat);

                LobbyServerConnection recipient = GetPlayerByHandle(chat.RecipientHandle);
                if (recipient != null)
                {
                    await recipient.SendMessage(chat);
                }
                break;

            default:
                Log.Print(LogType.Warning, $"Unhandled chat type: {chat.ConsoleMessageType.ToString()}");
                break;
            }
        }
Exemple #8
0
 public async static Task OnLeaveMatchmakingQueue(LobbyServerConnection client, LeaveMatchmakingQueueRequest request)
 {
     //Log.Print(LogType.Lobby, $"{client.PlayerInfo.GetHandle()} left Matchmaking queue");
     await new LeaveMatchmakingQueueRequestHandler().OnMessage(client, request);
 }
Exemple #9
0
 public async static Task OnPlayerMatchData(LobbyServerConnection client, PlayerMatchDataRequest request)
 {
     await new PlayerMatchDataRequestHandler().OnMessage(client, request);
 }
Exemple #10
0
 public async static Task OnCheckRAFStatus(LobbyServerConnection client, CheckRAFStatusRequest request)
 {
     await Task.CompletedTask;
 }
Exemple #11
0
 public async static Task OnCrashReportArchiveNameRequest(LobbyServerConnection client, CrashReportArchiveNameRequest request)
 {
     await new CrashReportArchiveNameRequestHandler().OnMessage(client, request);
 }
Exemple #12
0
 public static void RemovePlayerFromQueue(LobbyServerConnection client)
 {
     //LobbyQueue.LobbyQueue queue = LobbyQueueManager.GetInstance().FindQueue(client.PlayerInfo.GetGameType());
     //queue.RemovePlayer(client);
 }
Exemple #13
0
 public async static Task OnOptionsNotification(LobbyServerConnection client, OptionsNotification notification)
 {
     await new OptionsNotificationHandler().OnMessage(client, notification);
 }
Exemple #14
0
 /// <summary>
 /// The client send this when there is a change in the LobbyPlayerInfo
 /// </summary>
 /// <param name="client"></param>
 /// <param name="request"></param>
 /// <returns></returns>
 public async static Task OnPlayerInfoUpdate(LobbyServerConnection client, PlayerInfoUpdateRequest request)
 {
     await new PlayerInfoUpdateRequestHandler().OnMessage(client, request);
 }
Exemple #15
0
 public async static Task OnCustomKeyBindNotification(LobbyServerConnection client, CustomKeyBindNotification notification)
 {
     await Task.CompletedTask;
 }
Exemple #16
0
 public async static Task OnClientStatusReport(LobbyServerConnection client, ClientStatusReport request)
 {
     await Task.CompletedTask;
 }
Exemple #17
0
 public async static Task OnCheckAccountStatus(LobbyServerConnection client, CheckAccountStatusRequest request)
 {
     // Offers quest to the player to complete
     //TODO
     await Task.CompletedTask;
 }
Exemple #18
0
 public async static Task OnClientErrorSummary(LobbyServerConnection client, ClientErrorSummary request)
 {
     await Task.CompletedTask;
 }
Exemple #19
0
 /// <summary>
 /// When the player starts the game and connects to lobby
 /// </summary>
 /// <param name="client"></param>
 /// <param name="request"></param>
 /// <returns></returns>
 public async static Task OnPlayerConnectToLobby(LobbyServerConnection client, RegisterGameClientRequest request)
 {
     await new RegisterGameClientRequestHandler().OnMessage(client, request);
     //Log.Print(LogType.Lobby, $"{client.PlayerInfo.GetHandle()} ID {client.PlayerInfo.GetAccountId()}, Token {client.SessionToken} connected to the server");
 }
Exemple #20
0
 /// <summary>
 /// When the user sends a message to chat
 /// </summary>
 /// <param name="notification"></param>
 /// <returns></returns>
 public async static Task OnChat(LobbyServerConnection client, ChatNotification notification)
 {
     await new ChatNotificationHandler().OnMessage(client, notification);
 }
Exemple #21
0
 /// <summary>
 /// Activates when the user changes the game mode (Practice, Vs Bots, PVP, Ranked, Custom) or change some options of the game mode
 /// </summary>
 /// <param name="client"></param>
 /// <param name="request"></param>
 /// <returns></returns>
 public async static Task OnPlayerSelectGameType(LobbyServerConnection client, SetGameSubTypeRequest request)
 {
     await new SetGameSubTypeRequestHandler().OnMessage(client, request);
 }
Exemple #22
0
 public async static Task OnPricesRequest(LobbyServerConnection client, PricesRequest request)
 {
     await new PricesRequestHandler().OnMessage(client, request);
 }
Exemple #23
0
 public async static Task OnPreviousGameInfo(LobbyServerConnection client, PreviousGameInfoRequest request)
 {
     // Ask for last game played, it probably has the information needed to reconnect to an active match
     //TODO
     await Task.CompletedTask;
 }