public override void Process()
        {
            using (var recvfmProtocol = new PT_Server_RegisterAtCenter_RQ())
            {
                recvfmProtocol.Deserialize(m_recvPacket);

                using (var sendfmProtocol = new PT_Server_RegisterAtCenter_RS())
                {
                    var OSD = new descOtherServer
                    {
                        m_nSequence   = recvfmProtocol.m_nSequence,
                        m_eServerType = recvfmProtocol.m_eServerType,
                        m_strIP       = recvfmProtocol.m_strIP,
                        m_nPort       = recvfmProtocol.m_nPort,
                        m_eState      = eState.eState_Ready,
                    };

                    m_session.m_descServer = OSD;
                    bool isAdded = RegisteredServerManager.Instance.TryAdd(OSD, m_session);
                    if (true == isAdded)
                    {
                        sendfmProtocol.m_eErrorCode = eErrorCode.Success;
                        Logger.Info("Success. Registed Server: {0} - Sequnce {1}", OSD.m_eServerType, OSD.m_nSequence);
                    }
                    else
                    {
                        sendfmProtocol.m_eErrorCode = eErrorCode.Server_FailRegister;
                        Logger.Error("Failed. Registed Server: {0} - Sequnce {1}", OSD.m_eServerType, OSD.m_nSequence);
                    }

                    m_session.SendPacket(sendfmProtocol);
                }
            }
        }
        public void Remove(descOtherServer desc)
        {
            if (null == desc)
            {
                Logger.Error("RegisteredServerManager Remove desc == null");
                return;
            }

            lock (m_lockObject)
            {
                if (false == m_dicOtherServers.ContainsKey(desc.m_eServerType))
                {
                    return;
                }

                fmOtherServer otherSvr = m_dicOtherServers[desc.m_eServerType].Find(x => x.m_desc.m_nSequence == desc.m_nSequence);
                if (null == otherSvr)
                {
                    return;
                }

                m_dicOtherServers[desc.m_eServerType].Remove(otherSvr);

                using (otherSvr)
                {
                    Logger.Debug("RegisteredServerManager Remove desc {0} {1}", otherSvr.m_desc.m_eServerType, otherSvr.m_desc.m_nSequence);
                }
            }

            if (desc.m_eServerType == eServerType.Game)
            {
                SendWolrdList();
            }
        }
        public bool TryAdd(descOtherServer desc, ServerSession session)
        {
            if (null == desc)
            {
                Logger.Error("RegisteredServerManager Add desc == null");
                return(false);
            }

            lock (m_lockObject)
            {
                if (false == m_dicOtherServers.ContainsKey(desc.m_eServerType))
                {
                    m_dicOtherServers.Add(desc.m_eServerType, new List <fmOtherServer>());
                }

                foreach (var node in m_dicOtherServers[desc.m_eServerType])
                {
                    if (node.m_desc.m_nSequence == desc.m_nSequence)
                    {
                        Logger.Error("RegisteredServerManager Same Sequence {0}", node.m_desc.m_nSequence);
                        return(false);
                    }
                }

                m_dicOtherServers[desc.m_eServerType].Add(new fmOtherServer {
                    m_session = session, m_desc = desc
                });

                Logger.Debug("RegisteredServerManager Add Sequence {0}", desc.m_nSequence);
            }

            return(true);
        }