示例#1
0
文件: GCBiz.cs 项目: niuniuzhu/KOW
        public ErrorCode OnGC2GSAskLogin(NetSessionBase session, Google.Protobuf.IMessage message)
        {
            Protos.GC2GS_AskLogin login = (Protos.GC2GS_AskLogin)message;

            Protos.GS2CS_GCAskLogin gcAskLogin = ProtoCreator.Q_GS2CS_GCAskLogin();
            gcAskLogin.SessionID = login.SessionID;
            Logger.Log($"client:{gcAskLogin.SessionID} ask login");

            //向CS请求客户端登陆
            GS.instance.netSessionMgr.Send(SessionType.ServerG2CS, gcAskLogin,
                                           RPCEntry.Pop(OnCS2GSAskLoginRet, session.id, login));
            return(ErrorCode.Success);
        }
示例#2
0
文件: GCBiz.cs 项目: niuniuzhu/KOW
        private static void OnCS2GSAskLoginRet(NetSessionBase session, Google.Protobuf.IMessage message, object[] args)
        {
            uint sid = ( uint )args[0];

            Protos.GC2GS_AskLogin login = (Protos.GC2GS_AskLogin)args[1];

            Protos.CS2GS_GCLoginRet csLoginRet = (Protos.CS2GS_GCLoginRet)message;
            Protos.GS2GC_LoginRet   gsLoginRet = ProtoCreator.R_GC2GS_AskLogin(login.Opts.Pid);
            switch (csLoginRet.Result)
            {
            case Protos.CS2GS_GCLoginRet.Types.EResult.Success:
                //检测客户端是否断线了
                ClientSession gcSession = GS.instance.netSessionMgr.GetSession(sid) as ClientSession;
                if (gcSession == null)
                {
                    //通知CS客户端断开了
                    Protos.GS2CS_GCLost gcLost = ProtoCreator.Q_GS2CS_GCLost();
                    gcLost.SessionID = login.SessionID;
                    GS.instance.netSessionMgr.Send(SessionType.ServerG2CS, gcLost);
                    return;
                }

                //添加到管理器
                GS.instance.userMgr.AddClient(login.SessionID, sid);

                //设置该Session为受信任的连接
                gcSession.accredited = true;

                gsLoginRet.Result   = Protos.GS2GC_LoginRet.Types.EResult.Success;
                gsLoginRet.GcNID    = csLoginRet.GcNID;
                gsLoginRet.GcState  = (Protos.GS2GC_LoginRet.Types.EGCCState)csLoginRet.GcState;
                gsLoginRet.UserInfo = csLoginRet.UserInfo;
                gsLoginRet.BsIP     = csLoginRet.BsIP;
                gsLoginRet.BsPort   = csLoginRet.BsPort;
                gsLoginRet.Defs     = Defs.binary;
                GS.instance.netSessionMgr.Send(sid, gsLoginRet);
                break;

            case Protos.CS2GS_GCLoginRet.Types.EResult.IllegalLogin:
                gsLoginRet.Result = Protos.GS2GC_LoginRet.Types.EResult.SessionExpire;
                GS.instance.netSessionMgr.Send(sid, gsLoginRet);
                GS.instance.netSessionMgr.CloseSession(sid, "client login failed");
                break;
            }
        }