コード例 #1
0
 private static void HandleGetAnotherPlayerStateMessage(RestDataRequestMessage restDataRequestMessage,
                                                        GetAnotherPlayerStateMessage messageContent,
                                                        ref RestResponse response, RestRequestMessage request)
 {
     response.FunctionResult =
         new RestDataFunctionResult(new GetAnotherPlayerStateMessageResult(AnotherPlayerState.NotFound, 0));
     response.SetSuccessful(true, "ResultFromServerTask");
 }
コード例 #2
0
        private void HandleUpdateShownBadgeIdMessage(RestDataRequestMessage message,
                                                     UpdateShownBadgeIdMessage messagecontent, ref RestResponse response, RestRequestMessage request)
        {
            var user = _context.FindUserBySessionCredentials(message.SessionCredentials);

            if (user == default)
            {
                return;
            }
            user.PlayerData.ShownBadgeId = messagecontent.ShownBadgeId;

            response.SetSuccessful(true, "ResultFromServerTask");
        }
コード例 #3
0
        private void HandleRegisterCustomGameMessage(RegisterCustomGameMessage msg, ref RestResponse response,
                                                     RestDataRequestMessage message)
        {
            var user = this._context.Users.Find(x => x.Id.SessionKey == message.SessionCredentials.SessionKey);

            user.Server = new GameServerEntry(CustomBattleId.NewGuid(), msg.ServerName,
                                              this.HttpContext.Connection.RemoteIpAddress.ToString(), msg.Port, "EU", msg.GameModule, msg.GameType,
                                              msg.Map, 0, msg.MaxPlayerCount, true, false);
            Console.WriteLine($"New Server: {this.HttpContext.Connection.RemoteIpAddress.ToString()} {msg.Port}");
            response.FunctionResult =
                new RestDataFunctionResult(new RegisterCustomGameResult(true));
            response.SetSuccessful(true, "ResultFromServerTask");
        }
コード例 #4
0
        private void HandleQuitFromCustomGameMessage(RestDataRequestMessage message, QuitFromCustomGameMessage messagecontent, ref RestResponse response, RestRequestMessage request)
        {
            var user = this._context.FindUserBySessionCredentials(message.SessionCredentials);

            if (user != default)
            {
                var hoster = _context.FindServerHosterBy(user.ConnectedServer);
                if (hoster != default)
                {
                    hoster.HostedServer.PlayerCount--;
                }
            }
            response.SetSuccessful(true, "ResultFromServerTask");
        }
コード例 #5
0
        private void HandleGetPlayerBadgesMessage(RestDataRequestMessage message, GetPlayerBadgesMessage messageContent,
                                                  ref RestResponse response, RestRequestMessage request)
        {
            var user = _context.FindUserBySessionCredentials(message.SessionCredentials);

            if (user == default)
            {
                return;
            }
            response.FunctionResult =
                new RestDataFunctionResult(new GetPlayerBadgesMessageResult(new[]
                                                                            { user.CanHost ? "badge_taleworlds_primary_dev" : "" }));
            response.SetSuccessful(true, "ResultFromServerTask");
        }
コード例 #6
0
        private void HandleGetServerStatusMessage(RestDataRequestMessage message, GetServerStatusMessage messagecontent,
                                                  ref RestResponse response, RestRequestMessage request)
        {
            var user = _context.FindUserBySessionCredentials(message.SessionCredentials);

            if (user == default)
            {
                return;
            }


            response.EnqueueMessage(new RestDataResponseMessage(new ServerStatusMessage(GetServerStatusForUser(user))));

            response.SetSuccessful(true, "ResultFromServerTask");
        }
コード例 #7
0
        private void HandleEndHostingCustomGameMessage(RestDataRequestMessage message,
                                                       EndHostingCustomGameMessage messageContent,
                                                       ref RestResponse response, RestRequestMessage request)
        {
            var user = _context.FindUserBySessionCredentials(message.SessionCredentials);

            if (user != default)
            {
                user.HostedServer = null;
            }


            response.FunctionResult =
                new RestDataFunctionResult(new EndHostingCustomGameResult());
            response.SetSuccessful(true, "ResultFromServerTask");
        }
コード例 #8
0
        private void HandleUpdateCharacterMessage(RestDataRequestMessage message, UpdateCharacterMessage messagecontent,
                                                  ref RestResponse response, RestRequestMessage request)
        {
            var user = _context.FindUserBySessionCredentials(message.SessionCredentials);

            if (user == default)
            {
                return;
            }
            user.PlayerData.BodyProperties = messagecontent.BodyProperties;

            user.PlayerData.IsFemale =
                messagecontent.IsFemale;

            response.SetSuccessful(true, "ResultFromServerTask");
        }
コード例 #9
0
 private void HandleEndHostingCustomGameMessage(EndHostingCustomGameMessage msg, ref RestResponse response,
                                                RestDataRequestMessage message)
 {
     try
     {
         var user = _context.Users.Find(x => message.SessionCredentials.SessionKey == x.Id.SessionKey);
         if (user != null)
         {
             user.Server = null;
         }
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
         throw;
     }
     response.FunctionResult =
         new RestDataFunctionResult(new EndHostingCustomGameResult());
     response.SetSuccessful(true, "ResultFromServerTask");
 }
コード例 #10
0
        private void HandleResponseCustomGameClientConnectionMessage(RestDataRequestMessage message,
                                                                     ResponseCustomGameClientConnectionMessage messageContent, ref RestResponse response,
                                                                     RestRequestMessage request)
        {
            var server = _context.Users.Find(x => x.Id.SessionKey == message.SessionCredentials.SessionKey)
                         .HostedServer;

            foreach (var joindata in messageContent.PlayerJoinData)
            {
                var users = _context.Users.FindAll(usr =>
                                                   joindata.PlayerId.ConvertToPeerId() == usr.Id.PeerId && usr.HostedServer == null);

                switch (joindata.CustomGameJoinResponse)
                {
                case CustomGameJoinResponse.Success:
                    users.ForEach(u =>
                    {
                        u.QueuedMessages.Enqueue(new RestDataResponseMessage(
                                                     JoinCustomGameResultMessage.CreateSuccess(new JoinGameData(
                                                                                                   new GameServerProperties(server.entry.ServerName, server.entry.Address,
                                                                                                                            server.entry.Port, server.Region,
                                                                                                                            server.entry.GameModule, server.entry.GameType, server.entry.Map, "", "",
                                                                                                                            server.entry.MaxPlayerCount,
                                                                                                                            server.entry.IsOfficial), joindata.PeerIndex, joindata.SessionKey))));
                        server.PlayerCount++;
                    });

                    break;

                default:
                    users.ForEach(u =>
                                  u.QueuedMessages.Enqueue(
                                      new RestDataResponseMessage(
                                          JoinCustomGameResultMessage.CreateFailed(joindata.CustomGameJoinResponse))));

                    break;
                }
            }

            response.SetSuccessful(true, "ResultFromServerTask");
        }
コード例 #11
0
        private void HandleRegisterCustomGameMessage(RestDataRequestMessage restDataRequestMessage,
                                                     RegisterCustomGameMessage messageContent,
                                                     ref RestResponse response, RestRequestMessage request)
        {
            var user = _context.FindUserBySessionCredentials(restDataRequestMessage.SessionCredentials);

            if (user == default)
            {
                return;
            }
            user.HostedServer = new CommunityServerEntry(new GameServerEntry(CustomBattleId.NewGuid(),
                                                                             messageContent.ServerName,
                                                                             HttpContext.Connection.RemoteIpAddress.ToString(), messageContent.Port, "EU",
                                                                             messageContent.GameModule, messageContent.GameType,
                                                                             messageContent.Map, 1, messageContent.MaxPlayerCount, true,
                                                                             !(messageContent.GamePassword == null || messageContent.GamePassword.IsEmpty())));
            Console.WriteLine(
                $"New Server: {HttpContext.Connection.RemoteIpAddress} {messageContent.Port}");
            user.ConnectedServer    = user.HostedServer.entry.Id;
            response.FunctionResult =
                new RestDataFunctionResult(new RegisterCustomGameResult(true));
            response.SetSuccessful(true, "ResultFromServerTask");
        }
コード例 #12
0
        private void HandleLogin(RestDataRequestMessage message, InitializeSession messageContent,
                                 ref RestResponse response, RestRequestMessage request)
        {
            var session = new SessionCredentials(messageContent.PeerId, SessionKey.NewGuid());

            var playerdata = new PlayerData();

            playerdata.FillWithNewPlayer(messageContent.PlayerId,
                                         new[] { "FreeForAll", "Captain", "Siege", "Duel", "TeamDeathMatch", "FreeForAll" });
            playerdata.LastPlayerName = messageContent.PlayerName;
            playerdata.LastGameTypes  = new[] { "Captain" };

            var user = new User
            {
                Id = session, QueuedMessages = new Queue <RestResponseMessage>(), PlayerData = playerdata
            };

            if (messageContent.PlayerId.IsValidSteamId())
            {
                if (_context.SteamIDS.Contains(messageContent.PlayerId.Id2))
                {
                    user.CanHost = true;
                }
            }

            var userStatus = GetServerStatusForUser(user);

            _context.Users.Add(user);
            var initializeSessionResponse = new InitializeSessionResponse(playerdata, userStatus
                                                                          );

            response.FunctionResult =
                new RestDataFunctionResult(new LoginResult(session.PeerId, session.SessionKey,
                                                           initializeSessionResponse));
            response.UserCertificate = session.SessionKey.ToByteArray();
            response.SetSuccessful(true, "ResultFromServerTask");
        }
コード例 #13
0
        private void HandleRequestCustomGameServerListMessage(RestDataRequestMessage message,
                                                              RequestCustomGameServerListMessage messageContent, ref RestResponse response, RestRequestMessage request)
        {
            var serverList = new AvailableCustomGames();

            foreach (var server in _context.Users.Select(u => u.HostedServer))
            {
                if (server != null)
                {
                    serverList.CustomGameServerInfos
                    .Add(new GameServerEntry(server.entry.Id, server.entry.ServerName,
                                             server.entry.Address, server.entry.Port, server.entry.Region, server.entry.GameModule,
                                             server.entry.GameType, server.entry.Map
                                             , server.PlayerCount, server.entry.MaxPlayerCount, server.entry.IsOfficial,
                                             server.entry
                                             .PasswordProtected)); // serverlist.CustomGameServerInfos.Add(new GameServerEntry());
                }
            }

            var resp = new CustomGameServerListResponse(serverList);

            response.FunctionResult = new RestDataFunctionResult(resp);
            response.SetSuccessful(true, "ResultFromServerTask");
        }
コード例 #14
0
        private void HandleResponseCustomGameClientConnectionMessage(ResponseCustomGameClientConnectionMessage msg, ref RestResponse response, RestDataRequestMessage message)
        {
            var Server = _context.Users.Find(x => x.Id.SessionKey == message.SessionCredentials.SessionKey).Server;

            foreach (var joindata in msg.PlayerJoinData)
            {
                var users = this._context.Users.FindAll(usr => joindata.PlayerId.ConvertToPeerId() == usr.Id.PeerId && usr.Server == null);
                switch (msg.Response)
                {
                case CustomGameJoinResponse.Success:
                    users.ForEach(u => u.QueuedMessages.Enqueue(new RestDataResponseMessage(JoinCustomGameResultMessage.CreateSuccess(new JoinGameData(new GameServerProperties(Server.ServerName, Server.Address, Server.Port, Server.Region, Server.GameModule, Server.GameType, Server.Map, "", "", Server.MaxPlayerCount, Server.IsOfficial), joindata.PeerIndex, joindata.SessionKey)))));

                    break;

                case CustomGameJoinResponse.IncorrectPlayerState:
                case CustomGameJoinResponse.ServerCapacityIsFull:
                case CustomGameJoinResponse.ErrorOnGameServer:
                case CustomGameJoinResponse.GameServerAccessError:
                case CustomGameJoinResponse.CustomGameServerNotAvailable:
                case CustomGameJoinResponse.CustomGameServerFinishing:
                case CustomGameJoinResponse.IncorrectPassword:
                case CustomGameJoinResponse.PlayerBanned:
                case CustomGameJoinResponse.HostReplyTimedOut:
                case CustomGameJoinResponse.NoPlayerDataFound:
                case CustomGameJoinResponse.UnspecifiedError:
                case CustomGameJoinResponse.NoPlayersCanJoin:
                case CustomGameJoinResponse.AlreadyRequestedWaitingForServerResponse:
                case CustomGameJoinResponse.RequesterIsNotPartyLeader:
                case CustomGameJoinResponse.NotAllPlayersReady:
                default:
                    users.ForEach(u => u.QueuedMessages.Enqueue(new RestDataResponseMessage(JoinCustomGameResultMessage.CreateFailed(msg.Response))));

                    break;
                }
            }
            response.SetSuccessful(true, "ResultFromServerTask");
        }
コード例 #15
0
        // @TODO:  ClientWantsToConnectCustomGameMessage
        private void HandleRequestJoinCustomGameMessage(RequestJoinCustomGameMessage msg, ref RestResponse response, RestDataRequestMessage message)
        {
            User ServerOwner = _context.Users.Find(user => user.Server?.Id.Guid == msg.CustomBattleId.Guid);
            User JoiningUser = _context.Users.Find(user => user.Id.PeerId == message.SessionCredentials.PeerId);

            if (ServerOwner.Server != null)
            {
                var properties = new GameServerProperties(ServerOwner.Server.ServerName, ServerOwner.Server.Address, ServerOwner.Server.Port, ServerOwner.Server.Region, ServerOwner.Server.GameModule, ServerOwner.Server.GameType, ServerOwner.Server.Map, "", "", ServerOwner.Server.MaxPlayerCount, ServerOwner.Server.IsOfficial);

                /*@TODO:
                 * //var result =  JoinCustomGameResultMessage.CreateSuccess(new JoinGameData(properties,0,0 ));
                 * ServerOwner.QueuedMessages.Add(new ClientWantsToConnectCustomGameMessage(new PlayerJoinGameData[]{new PlayerJoinGameData(JoiningUser.PlayerData,JoiningUser.PlayerData.LastPlayerName) },msg.Password ));
                 *
                 * response.EnqueueMessage(new RestDataResponseMessage(result));
                 */
                ServerOwner.QueuedMessages.Enqueue(new RestDataResponseMessage(new ClientWantsToConnectCustomGameMessage(new PlayerJoinGameData[] { new PlayerJoinGameData(JoiningUser.PlayerData, JoiningUser.PlayerData.LastPlayerName) }, msg.Password)));

                response.SetSuccessful(true, "ResultFromServerTask");
            }
        }
コード例 #16
0
 private static void HandleChangeRegion(RestDataRequestMessage restDataRequestMessage,
                                        ChangeRegionMessage messageContent, ref RestResponse response, RestRequestMessage request)
 {
     response.SetSuccessful(true, "ResultFromServerTask");
 }
コード例 #17
0
 private void HandleMessage(RestDataRequestMessage message, Message messageContent, ref RestResponse response,
                            RestRequestMessage request)
 {
     _messageHandlers[messageContent.GetType()].DynamicInvoke(message, messageContent, response, request);
 }