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); }
private void OnLogin(NetworkMessage netMsg) { if (InvokeRequired) { Invoke(new MethodInvoker(delegate { OnLogin(netMsg); })); return; } ReLogin paket = netMsg.ReadMessage <ReLogin>(); if (paket != null) { switch (paket.response) { case 0: if (connected != null) { connected.connected = true; DatabaseManager.Instance.AddOrUpdateEntry(connected); Draw(); } jLabel1.Text = "Connected."; break; case 1: JMessageBox.Show(this, "Firewall missing from server."); if (connected != null) { connected.connected = true; DatabaseManager.Instance.AddOrUpdateEntry(connected); Draw(); } jLabel1.Text = "Connected."; break; default: jLabel1.Text = "Wrong user or password!"; break; } } }