protected virtual async Task <IRemoteService> CreateLogicServiceAsync(ClientEnterGameRequest enter_game) { var cfg = await InitConfig(); var ret = await this.Provider.CreateAsync( ServerNames.GetLogicServiceAddress(enter_game.c2s_roleUUID, this.SelfAddress.ServiceNode), cfg); this.remote_logic_service = ret; return(ret); }
public virtual Task <ServerPassportEnterGame> VerifyEnterGameAsync(ClientEnterServerRequest server, ClientEnterGameRequest req) { return(Task.FromResult(new ServerPassportEnterGame() { Verified = true })); }
public virtual async Task <ClientEnterGameResponse> client_rpc_Handle(ClientEnterGameRequest enter) { //第三方/一号通验证// var serverPassportResult = await RPGServerManager.Instance.Passport.VerifyEnterGameAsync(this.enter, enter); if (!serverPassportResult.Verified) { return(new ClientEnterGameResponse() { s2c_code = ClientEnterGameResponse.CODE_ROLE_SUSPEND, s2c_msg = serverPassportResult.Message }); } //log.Log("ClientEnterGameRequest"); #region 账号封停验证. var statusSnap = await queryRoleDataStatusSnap.LoadDataAsync(enter.c2s_roleUUID); if (statusSnap != null) { //没过期代表已封停. if (!((DateTime.UtcNow - statusSnap.SuspendDate).TotalMilliseconds > 0)) { return(new ClientEnterGameResponse() { s2c_code = ClientEnterGameResponse.CODE_ROLE_SUSPEND, s2c_suspendTime = statusSnap.SuspendDate }); } } #endregion last_heartbeat = DateTime.Now; this.enter_game = enter; bool reconnect = false; var rec = new SessionReconnectNotify(); rec.sessionName = SelfAddress.ServiceName; if (enter_game != null) { rec.roleID = enter_game.c2s_roleUUID; } var logic = remote_logic_service; if (logic != null) { var oldRoleID = logic.Config["roleID"].ToString(); if (oldRoleID != enter.c2s_roleUUID) { log.WarnFormat(string.Format("Role Already Login : Acc={0} : Role={1} -> {2}", accountID, oldRoleID, enter.c2s_roleUUID)); //cb(new ClientEnterGameResponse() { s2c_code = ClientEnterGameResponse.CODE_LOGIC_ALREADY_LOGIN }); await logic.ShutdownAsync("switch role"); logic = await this.CreateLogicServiceAsync(enter); //return; } else { log.InfoFormat(string.Format("Role Reconnect : Acc={0} : Role={1}", accountID, enter.c2s_roleUUID)); reconnect = true; rec.config = await InitConfig(); } } else { log.InfoFormat(string.Format("Role Connect : Acc={0} : Role={1}", accountID, enter.c2s_roleUUID)); logic = await this.CreateLogicServiceAsync(enter); } if (logic != null) { accountSave.SetField(nameof(AccountData.lastLoginRoleID), enter.c2s_roleUUID); await accountSave.FlushAsync(); try { mDisconnected = false; var ret = await logic.CallAsync <ClientEnterGameResponse>(enter); //log.Log("ClientEnterGameResponse: " + ret.IsSuccess); return(ret); } finally { if (reconnect) { logic.Invoke(rec); } } } else { return(new ClientEnterGameResponse() { s2c_code = ClientEnterGameResponse.CODE_LOGIC_NOT_FOUND, }); } }