/// <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); } }
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(); } } }