Exemplo n.º 1
0
        /// <summary>
        /// 登出一筆會員資料,會順便移除Peer
        /// </summary>
        /// <param name="primaryID"></param>
        public void ActorKick(int primaryID)
        {
            isKick = !isKick;
            Log.Debug("KICK");
            ActorReturn actorReturn = new ActorReturn();
            Guid        guid        = Guid.Empty;

            lock (this)
            {
                try
                {
                    if (PrimaryGetGuid.ContainsKey(primaryID))
                    {
                        guid = GetGuidFromPrimary(primaryID);

                        RemoveConnectedPeer(guid); // 移除Peer
                        Log.Debug("(IN)HE Guid IS :" + guid);
                    }

                    Log.Debug("(OUT)HE Guid IS :" + guid);

                    int _PrimaryID = 0;
                    if (GuidGetPrimary.ContainsKey(guid)) // 若有資料
                    {
                        Log.Debug("KICK 移除GUID:" + guid);
                        _PrimaryID = GuidGetPrimary[guid];
                        GuidGetPrimary.Remove(guid);                        // 移除guid列表資料

                        if (PrimaryGetActor.ContainsKey(_PrimaryID))        // 若會員列表有資料
                        {
                            Actor actor = GetActorFromPrimary(_PrimaryID);  // 先取得會員資料

                            if (PrimaryGetNickname.ContainsKey(_PrimaryID)) // 移除 索引找會員名稱列表
                            {
                                PrimaryGetNickname.Remove(_PrimaryID);
                            }

                            if (PrimaryGetAccount.ContainsKey(_PrimaryID))           // 移除 索引找會員名稱列表
                            {
                                PrimaryGetAccount.Remove(_PrimaryID);
                            }

                            if (PrimaryGetGuid.ContainsKey(_PrimaryID))             // 移除線上GUID名稱列表
                            {
                                PrimaryGetGuid.Remove(_PrimaryID);
                            }

                            if (AccountGetPrimary.ContainsKey(actor.Account))       // 移除會員帳號索引列表資料
                            {
                                AccountGetPrimary.Remove(actor.Account);
                            }

                            if (NicknameGetPrimary.ContainsKey(actor.Nickname))     // 移除會員暱稱索引列表資料
                            {
                                NicknameGetPrimary.Remove(actor.Nickname);
                            }

                            PrimaryGetActor.Remove(_PrimaryID);                     // 移除會員列表資料

                            actorReturn.ReturnCode   = "S308";
                            actorReturn.DebugMessage = "移除玩家成功";
                        }
                    }
                }
                catch (Exception e)
                {
                    Log.Debug("沒移除PrimaryID:" + primaryID);
                    actorReturn.ReturnCode   = "S309";
                    actorReturn.DebugMessage = "不在線上列表 " + e.Message;
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 加入一筆線上會員資料(成功回傳 (1),不成功回傳 (2)錯誤碼)
        /// </summary>
        /// <param name="guid"></param>
        /// <param name="PrimaryID"></param>
        /// <param name="Account"></param>
        /// <param name="Nickname"></param>
        /// <param name="Age"></param>
        /// <param name="Sex"></param>
        /// <param name="IP"></param>
        /// <param name="ServerPeer"></param>
        /// <returns></returns>

        public ActorReturn ActorOnline(Guid guid, int PrimaryID, string Account, string Nickname, byte Age, byte Sex, string IP, MPServerPeer serverPeer)
        {
            ActorReturn actorReturn = new ActorReturn();

            actorReturn.ReturnCode = "S300";

            if (PrimaryID <= 0)
            {
                actorReturn.ReturnCode   = "S303";
                actorReturn.DebugMessage = "PrimaryID必須有索引值!";
                return(actorReturn);
            }

            if (Account.Length <= 0)
            {
                actorReturn.ReturnCode   = "S304";
                actorReturn.DebugMessage = "Account必須填入帳號!";
                return(actorReturn);
            }

            if (Nickname.Length <= 0)
            {
                actorReturn.ReturnCode   = "S305";
                actorReturn.DebugMessage = "Nickname必須填入角色名稱!";
                return(actorReturn);
            }

            if (Age <= 0)
            {
                actorReturn.ReturnCode   = "S306";
                actorReturn.DebugMessage = "Age必須填入年齡!";
                return(actorReturn);
            }

            if (Sex < 0)
            {
                actorReturn.ReturnCode   = "S307";
                actorReturn.DebugMessage = "Sex必須填入性別!";
                return(actorReturn);
            }


            try
            {
                lock (this)
                {
                    // PrimaryGetGuid[i] 不能有null值 不能用來判斷bool ,PrimaryGetGuid.ContainsKey(i) 可以用來判斷bool
                    // 檢查dictGetAccounts的索引確保沒有重複登入
                    if (PrimaryGetGuid.ContainsKey(PrimaryID))
                    {
                        actorReturn.ReturnCode   = "S302";
                        actorReturn.DebugMessage = "重複登入!";
                        return(actorReturn);                              // 不允許重複登入
                    }
                    else
                    {
                        Log.Debug("登入的GUID:" + guid);
                        GuidGetPrimary.Add(guid, PrimaryID);             // 加入guid索引會員編號的列表

                        Actor actor = new Actor(guid, PrimaryID, Account, Nickname, Age, Sex, IP);
                        actor.LoginTime  = System.DateTime.Now;         // 登入時間
                        actor.GameStatus = 1;                           // 代表上線中(閒置)

                        if (!ConnectedClients.ContainsKey(guid))
                        {
                            ConnectedClients.Add(guid, serverPeer);
                            Log.Debug("ADD Peer!");
                        }

                        if (!PrimaryGetActor.ContainsKey(PrimaryID))
                        {
                            PrimaryGetActor.Add(PrimaryID, actor);        // 加入線上會員列表
                        }
                        if (!PrimaryGetNickname.ContainsKey(PrimaryID))   // 加入線上會員名稱 索引
                        {
                            PrimaryGetNickname.Add(PrimaryID, Nickname);
                        }

                        if (!PrimaryGetAccount.ContainsKey(PrimaryID))      // 加入線上帳號名稱 索引
                        {
                            PrimaryGetAccount.Add(PrimaryID, Account);
                        }

                        if (!PrimaryGetGuid.ContainsKey(PrimaryID))         // 加入線上GUID名稱 索引
                        {
                            PrimaryGetGuid.Add(PrimaryID, guid);
                        }

                        if (!AccountGetPrimary.ContainsKey(Account))    // 若會員帳號索引會員編號列表沒有資料,加入索引
                        {
                            AccountGetPrimary.Add(Account, PrimaryID);
                        }

                        if (!NicknameGetPrimary.ContainsKey(Nickname))  // 若會員帳號暱稱索引會員編號列表沒有資料,加入索引
                        {
                            NicknameGetPrimary.Add(Nickname, PrimaryID);
                        }

                        actorReturn.ReturnCode   = "S301";                   // 加入線上會員資料成功
                        actorReturn.DebugMessage = "";
                    }
                }
                return(actorReturn);
            }
            catch (Exception e)
            {
                Log.Debug("Actors例外: " + e);
                actorReturn.ReturnCode   = "S399";                   // 加入線上會員資料成功
                actorReturn.DebugMessage = "未知例外情況";
                return(actorReturn);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 登出一筆會員資料,會順便移除Peer
        /// </summary>
        /// <param name="Guid"></param>

        public void ActorOffline(Guid guid)
        {
            if (!isKick)
            {
                ActorReturn actorReturn = new ActorReturn();
                lock (this)
                {
                    try
                    {
                        RemoveConnectedPeer(guid); // 移除Peer

                        int _PrimaryID = 0;
                        if (GuidGetPrimary.ContainsKey(guid)) // 若有資料
                        {
                            Log.Debug("OFF 移除GUID:" + guid);
                            _PrimaryID = GuidGetPrimary[guid];
                            GuidGetPrimary.Remove(guid);                        // 移除guid列表資料

                            if (PrimaryGetActor.ContainsKey(_PrimaryID))        // 若會員列表有資料
                            {
                                Actor actor = GetActorFromPrimary(_PrimaryID);  // 先取得會員資料

                                if (PrimaryGetNickname.ContainsKey(_PrimaryID)) // 移除 索引找會員名稱列表
                                {
                                    PrimaryGetNickname.Remove(_PrimaryID);
                                }

                                if (PrimaryGetAccount.ContainsKey(_PrimaryID))           // 移除 索引找會員名稱列表
                                {
                                    PrimaryGetAccount.Remove(_PrimaryID);
                                }

                                if (PrimaryGetGuid.ContainsKey(_PrimaryID))             // 移除線上GUID名稱列表
                                {
                                    PrimaryGetGuid.Remove(_PrimaryID);
                                }

                                if (AccountGetPrimary.ContainsKey(actor.Account))       // 移除會員帳號索引列表資料
                                {
                                    AccountGetPrimary.Remove(actor.Account);
                                }

                                if (NicknameGetPrimary.ContainsKey(actor.Nickname))     // 移除會員暱稱索引列表資料
                                {
                                    NicknameGetPrimary.Remove(actor.Nickname);
                                }


                                PrimaryGetActor.Remove(_PrimaryID);                     // 移除會員列表資料

                                actorReturn.ReturnCode   = "S308";
                                actorReturn.DebugMessage = "移除玩家成功!";
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Log.Debug("沒移除GUID:" + guid);
                        actorReturn.ReturnCode   = "S309";
                        actorReturn.DebugMessage = "不在線上列表 " + e.Message;
                    }
                }
            }
        }