public override int ProcessCLogin(CLogin protocol) { Session session = Session.Get(protocol); SLogin result = new SLogin(); result.Argument.RoleId = protocol.Argument.RoleId; BAccount account = _taccount.Get(session.Account); if (null == account) { result.ResultCode = 1; session.SendResponse(result); return(Zeze.Transaction.Procedure.LogicError); } account.LastLoginRoleId = protocol.Argument.RoleId; BRoleData role = _trole.Get(protocol.Argument.RoleId); if (null == role) { result.ResultCode = 2; session.SendResponse(result); return(Zeze.Transaction.Procedure.LogicError); } BOnline online = _tonline.GetOrAdd(protocol.Argument.RoleId); online.RoleId = protocol.Argument.RoleId; // 对于同一个 session,允许重复登录 role,直接覆盖 online.SessionId = session.SessionId; session.LoginRoleId = protocol.Argument.RoleId; session.SendResponse(result); return(Zeze.Transaction.Procedure.Success); }
public override int ProcessGetRoleListRequest(GetRoleList rpc) { Session session = Session.Get(rpc); BAccount account = _taccount.Get(session.Account); if (null != account) { foreach (var roleId in account.Roles) { BRoleData roleData = _trole.Get(roleId); if (null != roleData) { rpc.Result.RoleList.Add(new BRole() { Id = roleId, Name = roleData.Name }); } } rpc.Result.LastLoginRoleId = account.LastLoginRoleId; } session.SendResponse(rpc); return(Procedure.Success); }
public override int ProcessReLoginRequest(ReLogin rpc) { Session session = Session.Get(rpc); BAccount account = _taccount.Get(session.Account); if (null == account) { return(ReturnCode(ResultCodeAccountNotExist)); } if (account.LastLoginRoleId != rpc.Argument.RoleId) { return(ReturnCode(ResultCodeNotLastLoginRoleId)); } BRoleData role = _trole.Get(rpc.Argument.RoleId); if (null == role) { return(ReturnCode(ResultCodeRoleNotExist)); } BOnline online = _tonline.Get(rpc.Argument.RoleId); if (null == online) { return(ReturnCode(ResultCodeOnlineDataNotFound)); } online.LinkName = session.LinkName; online.LinkSid = session.SessionId; online.State = BOnline.StateOnline; // 先发结果,再发送同步数据(ReliableNotifySync)。 // 都使用 WhileCommit,如果成功,按提交的顺序发送,失败全部不会发送。 session.SendResponseWhileCommit(rpc); Transaction.Current.RunWhileCommit(() => { var setUserState = new gnet.Provider.SetUserState(); setUserState.Argument.LinkSid = session.SessionId; setUserState.Argument.States.Add(rpc.Argument.RoleId); rpc.Sender.Send(setUserState); // 直接使用link连接。 }); var syncResultCode = ReliableNotifySync( session, rpc.Argument.ReliableNotifyConfirmCount, online); if (syncResultCode != ResultCodeSuccess) { return(ReturnCode((ushort)syncResultCode)); } App.Load.LoginCount.IncrementAndGet(); return(Procedure.Success); }
public override int ProcessLoginRequest(Login rpc) { Session session = Session.Get(rpc); BAccount account = _taccount.Get(session.Account); if (null == account) { return(ReturnCode(ResultCodeAccountNotExist)); } account.LastLoginRoleId = rpc.Argument.RoleId; BRoleData role = _trole.Get(rpc.Argument.RoleId); if (null == role) { return(ReturnCode(ResultCodeRoleNotExist)); } BOnline online = _tonline.GetOrAdd(rpc.Argument.RoleId); online.LinkName = session.LinkName; online.LinkSid = session.SessionId; online.State = BOnline.StateOnline; online.ReliableNotifyConfirmCount = 0; online.ReliableNotifyTotalCount = 0; online.ReliableNotifyMark.Clear(); online.ReliableNotifyQueue.Clear(); var linkSession = session.Link.UserState as Game.Server.LinkSession; online.ProviderId = App.Zeze.Config.AutoKeyLocalId; online.ProviderSessionId = linkSession.ProviderSessionId; // 先提交结果再设置状态。 // see linkd::gnet.Provider.ModuleProvider。ProcessBroadcast session.SendResponseWhileCommit(rpc); Transaction.Current.RunWhileCommit(() => { var setUserState = new gnet.Provider.SetUserState(); setUserState.Argument.LinkSid = session.SessionId; setUserState.Argument.States.Add(rpc.Argument.RoleId); rpc.Sender.Send(setUserState); // 直接使用link连接。 }); App.Load.LoginCount.IncrementAndGet(); return(Procedure.Success); }
public override int ProcessCGetRoleList(CGetRoleList protocol) { Session session = Session.Get(protocol); SGetRoleList result = new SGetRoleList(); BAccount account = _taccount.Get(session.Account); foreach (var roleId in account.Roles) { BRoleData roleData = _trole.Get(roleId); if (null != roleData) { result.Argument.RoleList.Add(new BRole() { Id = roleId, Name = roleData.Name }); } } result.Argument.LastLoginRoleId = account.LastLoginRoleId; session.SendResponse(result); return(Zeze.Transaction.Procedure.Success); }