Пример #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;
                }
            }
        }
Пример #2
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;
                    }
                }
            }
        }