예제 #1
0
        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);
        }
예제 #2
0
        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;
                }
            }
        }