Example #1
0
        internal Effect CreateEffect(string id)
        {
            EntityParam param = new EntityParam();

            param.rid = id + "@" + GuidHash.GetString();
            return(this._entityManager.CreateEffect(param));
        }
Example #2
0
        private static void HandleLoginSuccess(Protos.LS2GC_AskLoginRet gcLoginRet, uint sid, LoginContext context)
        {
            ulong gcNID = GuidHash.GetUInt64();

            //通知cs,客户端登陆成功
            Protos.LS2CS_GCLogin csLogin = ProtoCreator.Q_LS2CS_GCLogin();
            csLogin.GcNID      = gcNID;
            csLogin.Id         = context.id;
            csLogin.Ukey       = context.ukey;
            csLogin.Channel    = context.channel;
            csLogin.Browser    = context.browser;
            csLogin.Platform   = context.platform;
            csLogin.SessionKey = context.sessionKey;
            csLogin.UnionID    = context.unionID;
            csLogin.Nickname   = context.nickname;
            csLogin.Avatar     = context.avatar;
            csLogin.Gender     = context.gender;
            csLogin.Money      = context.money;
            csLogin.Diamoned   = context.diamoned;
            csLogin.Rank       = context.rank;
            csLogin.Exp        = context.exp;
            csLogin.Champions  = context.champions;
            csLogin.ActorID    = context.actorID;
            LS.instance.netSessionMgr.Send(SessionType.ServerL2CS, csLogin,
                                           RPCEntry.Pop(OnGCLoginCSRet, gcLoginRet, sid, gcNID));
        }
Example #3
0
        /// <summary>
        /// LS回应BS的检查登陆合法性
        /// </summary>
        private ErrorCode MsgUserLogin(byte[] data, int offset, int size, int msgID)
        {
            GCToBS.OneClinetLogin userLoginInfo = new GCToBS.OneClinetLogin();
            userLoginInfo.MergeFrom(data, offset, size);

            //发送第3消息:验证登陆是否成功,如果成功,请求分配GS给客户端
            BSToGC.ClinetLoginCheckRet msg = new BSToGC.ClinetLoginCheckRet();
            msg.LoginSuccess = userLoginInfo.LoginSuccess;
            this.owner.SendMsgToSession(userLoginInfo.Nsid, msg, ( int )BSToGC.MsgID.EMsgToGcfromBsOneClinetLoginCheckRet);

            Logger.Log($"user({userLoginInfo.Uin})({userLoginInfo.Sessionid})({userLoginInfo.Nsid}) ask login ret");

            if (userLoginInfo.LoginSuccess == 0)
            {
                this.owner.DisconnectOne(userLoginInfo.Nsid);
            }
            else
            {
                //找到最空闲的网关服务器
                OneGsInfo littleOne = null;
                foreach (KeyValuePair <int, OneGsInfo> kv in BS.instance.bsConfig.allGsInfo)
                {
                    OneGsInfo theGsInfo = kv.Value;
                    if (theGsInfo.gs_isLost)
                    {
                        continue;
                    }
                    if (littleOne == null || theGsInfo.gs_gc_count < littleOne.gs_gc_count)
                    {
                        littleOne = theGsInfo;
                    }
                }

                if (littleOne == null)
                {
                    return(ErrorCode.GSNotFound);
                }

                ++littleOne.gs_gc_count;                //仅仅作为缓存,GS会定时汇报服务器的状态

                //这条消息的路由:BS-GS-BS-GC
                BSToGS.OneUserLoginToken oneUserLoginToken = new BSToGS.OneUserLoginToken
                {
                    Gateclient = ( int )userLoginInfo.Nsid,
                    Token      = GuidHash.GetString(),
                    UserName   = userLoginInfo.Uin,
                    //这里ip和port最终会到达GC
                    Ip   = littleOne.gs_IpExport,
                    Port = littleOne.gs_Port
                };
                //通知网关服务器有客户端登陆
                this.owner.SendMsgToSession(littleOne.gs_nets, oneUserLoginToken, ( int )BSToGS.MsgID.EMsgToGsfromBsOneUserLoginToken);
            }
            return(ErrorCode.Success);
        }
Example #4
0
        public T Create <T>() where T : Entity, new()
        {
            T entity = new T();

            entity.rid    = GuidHash.GetUInt64();
            entity.battle = this._battle;
            this._idToEntity[entity.rid] = entity;
            this._entities.Add(entity);
            entity.Awake();
            entity.Synchronize();
            return(entity);
        }
Example #5
0
        private static void HandleInput(string cmd)
        {
            string[] pairs = cmd.Split(' ');
            switch (pairs[0])
            {
            case "a":
            {
                MatchRoomUser user = new MatchRoomUser(GuidHash.GetUInt64(), int.Parse(pairs[1]));
                _matchingSystems[0].Join(user);
            }
            break;

            case "d":
                break;

            case "b":
            {
                int count = int.Parse(pairs[1]);
                for (int i = 0; i < count; i++)
                {
                    ulong id   = GuidHash.GetUInt64();
                    int   rank = _rnd.Next(0, 1000);
                    //Console.WriteLine( $"add id:{id}, rank:{rank}" );
                    MatchRoomUser user = new MatchRoomUser(id, rank);
                    _matchingSystems[0].Join(user);
                }
            }
            break;

            case "x":
                foreach (MatchSystem matchingSystem in _matchingSystems)
                {
                    Console.WriteLine(matchingSystem.Dump());
                }
                break;

            case "cls":
                Console.Clear();
                break;
            }
        }
Example #6
0
 public StepLocker(RemoteBattle owner)
 {
     this.id    = GuidHash.GetString();
     this.owner = owner;
 }
Example #7
0
 public static string MakeRidFromID(string id)
 {
     return(id + "@" + GuidHash.GetString());
 }
Example #8
0
 public Account()
 {
     //todo 数据持久化前先把id递增
     this.id = GuidHash.Get();
 }
Example #9
0
 public UILogin()
 {
     this._account  = GuidHash.GetString();
     this._password = "******";
     this._username = this._account;
 }