Пример #1
0
        public void HandleRegisterGame(RegisterGameClientRequest request)
        {
            try
            {
                LobbyPlayerInfo playerInfo = SessionManager.OnPlayerConnect(this, request);

                if (playerInfo != null)
                {
                    Log.Print(LogType.Lobby, string.Format(Config.Messages.LoginSuccess, this.UserName));
                    RegisterGameClientResponse response = new RegisterGameClientResponse
                    {
                        AuthInfo    = request.AuthInfo,
                        SessionInfo = request.SessionInfo,
                        ResponseId  = request.RequestId
                    };

                    Send(response);

                    SendLobbyServerReadyNotification();
                }
                else
                {
                    SendErrorResponse(new RegisterGameClientResponse(), request.RequestId, Config.Messages.LoginFailed);
                }
            }
            catch (Exception e)
            {
                SendErrorResponse(new RegisterGameClientResponse(), request.RequestId, e);
            }
        }
        public async Task OnMessage(LobbyServerConnection connection, object requestData)
        {
            RegisterGameClientRequest request = (RegisterGameClientRequest)requestData;

            PlayerData.Player p = PlayerData.GetPlayer(request.SessionInfo.Handle);

            connection.SessionToken = request.SessionInfo.SessionToken;

            //connection.PlayerInfo = SessionManager.Get(connection.SessionToken);
            //connection.PlayerInfo.SetHandle(p.UserName);
            //connection.PlayerInfo.SetAccountId(p.AccountId);
            //connection.PlayerInfo.SetBannerID(p.SelectedBackgroundBannerID);
            //connection.PlayerInfo.SetEmblemID(p.SelectedForegroundBannerID);
            //connection.PlayerInfo.SetRibbonID(p.SelectedRibbonID);
            //connection.PlayerInfo.SetTitleID(p.SelectedTitleID);
            //connection.PlayerInfo.SetCharacterType(p.LastSelectedCharacter);

            // Send RegisterGameClientResponse
            await Send_RegisterGameClientResponse(connection, request);

            // Sent LobbyServerReadyNotification
            await Send_LobbyServerReadyNotification(connection);

            // Send "{username} has connected" to global chat
            await Send_ChatConnectedNotification(connection);
        }
        private static RegisterGameClientResponse RegisterGameClient(RegisterGameClientRequest request)
        {
            RegisterGameClientResponse response = new RegisterGameClientResponse();

            response.SessionInfo = request.SessionInfo;
            response.SessionInfo.ConnectionAddress = "127.0.0.1";
            response.SessionInfo.LanguageCode      = "EN";
            response.AuthInfo               = request.AuthInfo;
            response.AuthInfo.AccountId     = request.SessionInfo.AccountId; // Override AuthInfo.AccountId with SessionInfo.AccountID, The account id from SessionInfo is set in the DirectoryServer and has the accountid value from database for the client username
            response.DevServerConnectionUrl = "127.0.0.1";                   // What is this?
            response.AuthInfo.AccountStatus = null;
            response.Status = new LobbyStatusNotification
            {
                AllowRelogin             = false,
                ClientAccessLevel        = ClientAccessLevel.Full,
                ConnectionQueueInfo      = null,
                ErrorReportRate          = TimeSpan.FromMinutes(3),
                GameplayOverrides        = null,
                HasPurchasedGame         = true,
                HighestPurchasedGamePack = 0,
                LocalizedFailure         = null,
                PacificNow             = DateTime.UtcNow, // TODO: Originally had "0001-01-01T00:00:00"
                ServerLockState        = ServerLockState.Unlocked,
                ServerMessageOverrides = new ServerMessageOverrides().FillDummyData(),
                TimeOffset             = TimeSpan.Zero,
                UtcNow     = DateTime.UtcNow, // TODO: Originally had "0001-01-01T00:00:00"
                RequestId  = 0,
                ResponseId = 0,
            };
            response.LocalizedFailure = null;
            response.RequestId        = 0;
            response.ResponseId       = request.RequestId;
            return(response);
        }
Пример #4
0
        public static LobbyPlayerInfo OnPlayerConnect(LobbyServerProtocol client, RegisterGameClientRequest clientRequest)
        {
            long sessionToken = GeneratedSessionToken++;

            Database.Account user = Database.Account.GetByUserName(clientRequest.AuthInfo.Handle);

            client.AccountId           = user.AccountId;
            client.SessionToken        = sessionToken;
            client.UserName            = user.UserName;
            client.SelectedGameType    = user.LastSelectedGameType;
            client.SelectedSubTypeMask = 0;

            LobbyPlayerInfo playerInfo = new LobbyPlayerInfo
            {
                AccountId                  = user.AccountId,
                BannerID                   = user.BannerID,
                BotCanTaunt                = false,
                BotsMasqueradeAsHumans     = false,
                CharacterInfo              = CharacterManager.GetCharacterInfo(user.AccountId, user.LastCharacter),
                ControllingPlayerId        = 0,
                EffectiveClientAccessLevel = ClientAccessLevel.Full,
                EmblemID                   = user.EmblemID,
                Handle           = user.UserName,
                IsGameOwner      = true,
                IsLoadTestBot    = false,
                IsNPCBot         = false,
                PlayerId         = 0,
                ReadyState       = ReadyState.Unknown,
                ReplacedWithBots = false,
                RibbonID         = user.RibbonID,
                TitleID          = user.TitleID,
                TitleLevel       = 1
            };

            ActivePlayers.Add(user.AccountId, playerInfo);
            SessionTokenAccountIDCache.Add(sessionToken, playerInfo.AccountId);
            ActiveConnections.Add(user.AccountId, client);

            return(playerInfo);
        }
Пример #5
0
        public async Task OnMessage(ClientConnection connection, object requestData)
        {
            RegisterGameClientRequest request = (RegisterGameClientRequest)requestData;

            PlayerData.Player p = PlayerData.GetPlayer(request.SessionInfo.Handle);
            connection.AccountId                  = p.AccountId;
            connection.UserName                   = p.UserName;
            connection.SelectedTitleID            = p.SelectedTitleID;
            connection.SelectedBackgroundBannerID = p.SelectedBackgroundBannerID;
            connection.SelectedForegroundBannerID = p.SelectedForegroundBannerID;
            connection.SelectedRibbonID           = p.SelectedTitleID;
            connection.SelectedCharacter          = p.LastSelectedCharacter;

            // Send RegisterGameClientResponse
            await Send_RegisterGameClientResponse(connection, request);

            // Sent LobbyServerReadyNotification
            await Send_LobbyServerReadyNotification(connection);

            // Send "{username} has connected" to global chat
            await Send_ChatConnectedNotification(connection);
        }
 private async Task Send_RegisterGameClientResponse(LobbyServerConnection connection, RegisterGameClientRequest request)
 {
     Log.Print(LogType.Debug, "Sending Send_RegisterGameClientResponse");
     var response = RegisterGameClient(request);
     await connection.SendMessage(response);
 }
Пример #7
0
 private async Task Send_RegisterGameClientResponse(ClientConnection connection, RegisterGameClientRequest request)
 {
     var response = RegisterGameClient(request);
     await connection.SendMessage(response);
 }
Пример #8
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");
 }