Пример #1
0
        /// <summary>
        ///     Login a player
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="token"></param>
        public async Task <Player> Login(long userId, string token)
        {
            Player player;

            if (userId <= 0 && string.IsNullOrEmpty(token))
            {
                player = await PlayerDb.CreateAsync();
            }
            else
            {
                //var p = await Redis.GetPlayerAsync(userId);
                var p = Resources.ObjectCache.GetCachedPlayer(userId);

                if (p != null)
                {
                    player = p;
                }
                else
                {
                    player = await PlayerDb.GetAsync(userId);
                }

                if (player == null)
                {
                    return(null);
                }
                if (player.Home.UserToken != token)
                {
                    return(null);
                }
            }

            lock (SyncObject)
            {
                if (player == null)
                {
                    return(null);
                }

                Logout(ref player);

                var result = TryAdd(player.Home.Id, player);

                if (!result)
                {
                    return(null);
                }

                //Logger.Log($"User {player.Home.Id} logged in.", GetType(), ErrorLevel.Debug);

                return(player);
            }
        }
Пример #2
0
        public override async void Process()
        {
            if (Resources.Configuration.UseContentPatch)
            {
                if (FingerprintSha != Resources.Fingerprint.Sha)
                {
                    await new LoginFailedMessage(Device)
                    {
                        ErrorCode  = 7,
                        ContentUrl = Resources.Configuration.PatchUrl,
                        ResourceFingerprintData = Resources.Fingerprint.Json
                    }.SendAsync();
                    return;
                }
            }

            if (UserId <= 0 && string.IsNullOrEmpty(UserToken))
            {
                Device.Player = await PlayerDb.CreateAsync();

                var home = Device.Player.Home;

                home.PreferredDeviceLanguage = PreferredDeviceLanguage;

                Device.Player.Device = Device;

                Resources.Players.Login(Device.Player);

                await new LoginOkMessage(Device).SendAsync();

                await new OwnHomeDataMessage(Device).SendAsync();
            }
            else
            {
                var player = await Resources.Players.GetPlayerAsync(UserId);

                if (player != null)
                {
                    Device.Player = player;
                    player.Device = Device;

                    Resources.Players.Login(Device.Player);

                    await new LoginOkMessage(Device).SendAsync();

                    if (player.Home.AllianceInfo.HasAlliance)
                    {
                        var alliance = await Resources.Alliances.GetAllianceAsync(player.Home.AllianceInfo.Id);

                        if (alliance != null)
                        {
                            Resources.Alliances.Add(alliance);

                            await new AllianceStreamMessage(Device)
                            {
                                Entries = alliance.Stream
                            }.SendAsync();

                            alliance.UpdateOnlineCount();
                        }
                    }

                    await new OwnHomeDataMessage(Device).SendAsync();
                }
                else
                {
                    // If the account was not found we send LoginFailed
                    await new LoginFailedMessage(Device)
                    {
                        ErrorCode = 10
                    }.SendAsync();
                }
            }
        }