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(); } }
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(); }
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); } } }
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); } } }
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); }
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(); * } * /* */ }
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; } }
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); }
public async static Task OnPlayerMatchData(LobbyServerConnection client, PlayerMatchDataRequest request) { await new PlayerMatchDataRequestHandler().OnMessage(client, request); }
public async static Task OnCheckRAFStatus(LobbyServerConnection client, CheckRAFStatusRequest request) { await Task.CompletedTask; }
public async static Task OnCrashReportArchiveNameRequest(LobbyServerConnection client, CrashReportArchiveNameRequest request) { await new CrashReportArchiveNameRequestHandler().OnMessage(client, request); }
public static void RemovePlayerFromQueue(LobbyServerConnection client) { //LobbyQueue.LobbyQueue queue = LobbyQueueManager.GetInstance().FindQueue(client.PlayerInfo.GetGameType()); //queue.RemovePlayer(client); }
public async static Task OnOptionsNotification(LobbyServerConnection client, OptionsNotification notification) { await new OptionsNotificationHandler().OnMessage(client, notification); }
/// <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); }
public async static Task OnCustomKeyBindNotification(LobbyServerConnection client, CustomKeyBindNotification notification) { await Task.CompletedTask; }
public async static Task OnClientStatusReport(LobbyServerConnection client, ClientStatusReport request) { await Task.CompletedTask; }
public async static Task OnCheckAccountStatus(LobbyServerConnection client, CheckAccountStatusRequest request) { // Offers quest to the player to complete //TODO await Task.CompletedTask; }
public async static Task OnClientErrorSummary(LobbyServerConnection client, ClientErrorSummary request) { await Task.CompletedTask; }
/// <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"); }
/// <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); }
/// <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); }
public async static Task OnPricesRequest(LobbyServerConnection client, PricesRequest request) { await new PricesRequestHandler().OnMessage(client, request); }
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; }