示例#1
0
    //------------------------------------------------------------------------------------
    public override void init()
    {
        EbLog.Note("ServerUCenter.init()");

        mZkWatcher = new ServerUCenterZkWatcher(this);
        PhotonApp photon_app = (PhotonApp)ApplicationBase.Instance;

        photon_app.ZkClient.addHandler(mZkWatcher.handler);
        ProjectName = photon_app.ProjectName;

        string preStr = string.Format("{0}{1}{2}{3}{4}{5}{6}", "/", _eUCenter.UCenterProjectName.ToString(), "/", _eConstLoginNode.LoginServices.ToString(), "/"
                                      , ProjectName, "/");

        mCurLoginNodePath         = preStr + _eConstLoginNode.LoginQueue + "/";
        mCurLoginLockPath         = preStr + _eConstLoginNode.LoginQueueLock + "/";
        mCurLoginCompleteNodePath = preStr + _eConstLoginNode.LoginCompleteQueue + "/";
        mCurLoginCompleteLockPath = preStr + _eConstLoginNode.LoginCompleteQueueLock + "/";
        mCurOfflineNodePath       = preStr + _eConstLoginNode.PlayerOfflineNode + "/";
        mCurOfflineLockPath       = preStr + _eConstLoginNode.PlayerOfflineLock + "/";

        string loginServerNodePath = "/" + _eUCenter.UCenterProjectName + "/" + _eUCenter.UCenterNodeName;

        mLoginPath = loginServerNodePath;
        getZkClient().subscribeChildChanges(mLoginPath, _onLoginServerList);
    }
示例#2
0
    //-------------------------------------------------------------------------
    public override void init()
    {
        EbLog.Note("LoginApp.init()");

        EntityMgr.getDefaultEventPublisher().addHandler(Entity);

        mServersPath = "/" + mUCenterApp.ProjectName + "/"
                       + _eConstLoginNode.LoginServices.ToString();

        mUCenterApp.ZkClient.subscribeChildChanges(mServersPath, onServerGroupChange);

        mZkWatcher = new UCenterZkWatcher(this);
        PhotonApp photon_app = (PhotonApp)ApplicationBase.Instance;

        photon_app.ZkClient.addHandler(mZkWatcher.handler);
    }
示例#3
0
    //-------------------------------------------------------------------------
    public UCenterEntityMgrListener()
    {
        PhotonApp photon_app = (PhotonApp)PhotonApp.Instance;

        mEntityMgr = photon_app.EntityMgr;
    }
示例#4
0
    //------------------------------------------------------------------------------------
    // servers, 当前zookeeper中的 Loginserver的所有结点.
    internal void _onLoginServerList(int result, string data, string[] servers, Dictionary <string, object> param)
    {
        if (result != 0)
        {
            return;
        }
        if (servers == null)
        {
            servers = new string[0];
        }

        List <string>        remoteServer = servers.ToList();
        List <string>        localServer  = mLoginServer.Keys.ToList <string>();
        IEnumerable <string> add          = remoteServer.Except(localServer);
        IEnumerable <string> del          = localServer.Except(remoteServer);

        // 有新的Login server 结点要添加
        foreach (var ser in add)
        {
            string[] resul;
            char[]   charSeparators = new char[] { ',', ':' };
            resul = ser.Split(charSeparators);
            if (resul.Length != 3)
            {
                EbLog.Error("Error format , the correct format should be 192.168.1.4:4689,000000005 , (ip:port,id) ");
                continue;
            }

            PhotonApp photon_app = (PhotonApp)ApplicationBase.Instance;
            //return photon_app.ZkClient;
            LoginServerInfo info = new LoginServerInfo();
            info.ip   = resul[0];
            info.port = resul[1];
            info.id   = resul[2];
            string ctlqNode    = string.Format("{0}{1},{2}", mCurLoginNodePath, info.id, photon_app.NodeIdStr);
            string ctlcqNode   = string.Format("{0}{1},{2}", mCurLoginCompleteNodePath, info.id, photon_app.NodeIdStr);
            string offlineNode = string.Format("{0}{1},{2}", mCurOfflineNodePath, info.id, photon_app.NodeIdStr);

            // 以下两个结点用来watch,create.
            string ctlqLock    = string.Format("{0}{1},{2}", mCurLoginLockPath, info.id, photon_app.NodeIdStr);
            string ctlcqLock   = string.Format("{0}{1},{2}", mCurLoginCompleteLockPath, info.id, photon_app.NodeIdStr);
            string offlineLock = string.Format("{0}{1},{2}", mCurOfflineLockPath, info.id, photon_app.NodeIdStr);

            info.loginNode        = ctlqNode;
            info.loginComNode     = ctlcqNode;
            info.loginLockNode    = ctlqLock;
            info.loginLockComNode = ctlcqLock;
            info.offlineLock      = offlineLock;
            info.offlineNode      = offlineNode;

            //Dictionary<string, object> pa = new Dictionary<string, object>();
            //pa["LoginServerInfo"] = info;
            //getZkClient().subscribeExists(info.loginLockNode, _onLoginLockChange, pa);
            getZkClient().subscribeExists(info.loginLockNode, null);

            getZkClient().subscribeExists(info.loginLockComNode, null);
            getZkClient().subscribeExists(info.offlineLock, null);

            mLoginServer.Add(ser, info);
        }

        // 有Login server 结点要删除.
        foreach (var ser in del)
        {
            LoginServerInfo info = null;
            mLoginServer.TryGetValue(ser, out info);

            getZkClient().unsubscribeExists(info.loginLockComNode);
            getZkClient().unsubscribeExists(info.offlineLock);

            mLoginServer.Remove(ser);
        }
    }
示例#5
0
    //------------------------------------------------------------------------------------
    public IZkClient getZkClient()
    {
        PhotonApp photon_app = (PhotonApp)ApplicationBase.Instance;

        return(photon_app.ZkClient);
    }