//private System.Timers.Timer _userStateCheck = new System.Timers.Timer(10000); //private void _userStateCheck_Elapsed(object sender, ElapsedEventArgs e) //{ // this._userStateCheck.Stop(); // try // { // string[] tokens = ClientManager.GetInvalidClients(); // if (null != tokens) // { // foreach (var token in tokens) // { // string userName = ClientManager.GetClientUserName(token); // LogHelper.Instance.AddInfoLog("玩家 [" + userName + "] 掉线,退出登录, IP=" + ClientManager.GetClientIP(token)); // PlayerController.Instance.LogoutPlayer(userName); // RSAProvider.RemoveRSA(token); // ClientManager.RemoveClient(token); // lock (this._callbackDicLocker) // { // this._callbackDic.Remove(token); // } // } // } // } // catch // { // } // finally // { // if (App.ServiceToRun.IsStarted) // { // this._userStateCheck.Start(); // } // } //} public OperResultObject Login(string UserLoginName, string password, string key, string mac, string clientVersion) { #if Delay Thread.Sleep(5000); #endif OperResultObject resultObj = new OperResultObject(); #if V1 resultObj.OperResultCode = OperResult.RESULTCODE_FALSE; return(resultObj); #endif if (String.IsNullOrEmpty(UserLoginName) || String.IsNullOrEmpty(password)) { resultObj.OperResultCode = OperResult.RESULTCODE_USERNAME_PASSWORD_ERROR; return(resultObj); } if (!string.IsNullOrEmpty(GlobalConfig.CurrentClientVersion) && GlobalConfig.CurrentClientVersion != clientVersion) { resultObj.OperResultCode = OperResult.RESULTCODE_CLIENT_VERSION_OLD; //resultObj.Message = "VERSIONERROR"; return(resultObj); } string token = null; string ip = ClientManager.GetCurrentIP(); string userName = ""; PlayerInfo player = null; try { player = PlayerController.Instance.GetPlayerInfoByUserLoginName(UserLoginName); if (player == null) { resultObj.OperResultCode = OperResult.RESULTCODE_USERNAME_PASSWORD_ERROR; return(resultObj); } userName = player.SimpleInfo.UserName; token = ClientManager.GetToken(player.SimpleInfo.UserName); if (!string.IsNullOrEmpty(token)) { new Thread(new ParameterizedThreadStart(o => { this.KickoutByUser(o.ToString()); })).Start(token); //return "ISLOGGED"; } if (password != player.SimpleInfo.Password) { resultObj.OperResultCode = OperResult.RESULTCODE_USERNAME_PASSWORD_ERROR; return(resultObj); } resultObj = PlayerController.Instance.CheckPlayerIsLocked(player.SimpleInfo.UserID, player.SimpleInfo.UserName); if (resultObj.OperResultCode != OperResult.RESULTCODE_TRUE) { return(resultObj); } if (player.SimpleInfo.InvitationCode == GlobalData.TestInvitationCode) { try { var logState = DBProvider.TestUserLogStateDBProvider.GetTestUserLogStateByMac(mac); if (logState == null) { logState = DBProvider.TestUserLogStateDBProvider.GetTestUserLogStateByUserName(player.SimpleInfo.UserName); if (logState != null) { resultObj.OperResultCode = OperResult.RESULTCODE_USERLOGIN_ISTESTUSER_LOGINLIMIT; return(resultObj); } DBProvider.TestUserLogStateDBProvider.AddTestUserLogState(player.SimpleInfo.UserName, mac, ip); } else { if (logState.UserName != player.SimpleInfo.UserName) { resultObj.OperResultCode = OperResult.RESULTCODE_USERLOGIN_ISTESTUSER_LOGINLIMIT; return(resultObj); } } } catch (Exception exc) { LogHelper.Instance.AddErrorLog("Test User [" + userName + "] Add Exception.", exc); } } player.SimpleInfo.LastLoginIP = ip; player.SimpleInfo.LastLoginMac = mac; PlayerController.Instance.LoginPlayer(player); RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.FromXmlString(key); token = Guid.NewGuid().ToString(); RSAProvider.SetRSA(token, rsa); RSAProvider.LoadRSA(token); ClientManager.AddClient(player.SimpleInfo.UserName, token); lock (this._callbackDicLocker) { this._callbackDic[token] = new Queue <CallbackInfo>(); } LogHelper.Instance.AddInfoLog("玩家 [" + userName + "] 登录矿场, IP=" + ip + ", Mac=" + mac); } catch (Exception ex) { LogHelper.Instance.AddErrorLog("玩家 [" + userName + "] 登录矿场失败, IP=" + ip + ", Mac=" + mac, ex); } if (!string.IsNullOrEmpty(token)) { PlayerActionController.Instance.AddLog(userName, MetaData.ActionLog.ActionType.Login, (int)player.FortuneInfo.Exp / 2000); new Thread(new ParameterizedThreadStart(o => { this.LogedIn(o.ToString()); })).Start(token); } resultObj.OperResultCode = OperResult.RESULTCODE_TRUE; resultObj.Message = token; return(resultObj); }