//------------------------------------------------------------------------------------ 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); }
//------------------------------------------------------------------------- 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); }
//------------------------------------------------------------------------- public UCenterEntityMgrListener() { PhotonApp photon_app = (PhotonApp)PhotonApp.Instance; mEntityMgr = photon_app.EntityMgr; }
//------------------------------------------------------------------------------------ // 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); } }
//------------------------------------------------------------------------------------ public IZkClient getZkClient() { PhotonApp photon_app = (PhotonApp)ApplicationBase.Instance; return(photon_app.ZkClient); }