/// <summary> /// 处理管理主机消息 /// </summary> /// <param name="peer">消息来源主机</param> /// <param name="msg">消息</param> private static void ServerMessage(Peer peer, Msg msg) { switch (msg.type) { case 11: HostInfo info = msg.data as HostInfo; peer.info.id = info.id; ResHost curHost = HostManager.Singleton[info.id.ToString()]; if (curHost == null) { return; } curHost.rGroup(info.groups); curHost.searchService = info.SearchService; HoldingServer.Singleton.UpdateServices(HostGroup.getServices(HoldingServer.Self)); Group.send(new Msg(13)); break; case 12: peer.send(new Msg(13, HostGroup.getServices(msg.data as string[]))); break; case 22: peer.send(new Msg(21, HoldingServer.Client.remote)); break; } }
/// <summary> /// 从Xml格式的字符串生成HostList对象 /// </summary> /// <param name="data">Xml格式的字符串</param> /// <returns>生成的HostList对象</returns> public static HostList FromXml(string data) { HostList res = new HostList(); XElement xe = XElement.Parse(data); foreach (XElement c in xe.Elements()) { res.Add(ResHost.FromXml(c)); } return(res); }
/// <summary> /// 从所有分组中删除主机 /// </summary> /// <param name="rh">要删除的主机</param> public static void remove(ResHost rh) { for (int i = 0; i < Singleton.Count; i++) { if (Singleton.BaseGet(i) as List <ResHost> != null) { List <ResHost> list = Singleton.BaseGet(i) as List <ResHost>; list.Remove(rh); } } }
/// <summary> /// 从指定分组中删除主机 /// </summary> /// <param name="rh">要删除的主机</param> /// <param name="name">要从中删除的分组的名字</param> /// <returns></returns> public static bool remove(ResHost rh, string name) { try { if (Singleton.BaseGet(name) == null) Singleton.BaseSet(name, new List<ResHost>()); List<ResHost> list = Singleton.BaseGet(name) as List<ResHost>; list.Remove(rh); return true; } catch { return false; } }
/// <summary> /// 判断指定分组是否包含指定主机 /// </summary> /// <param name="rh">指定的主机</param> /// <param name="name">指定的分组的名字</param> /// <returns>指定分组是否包含指定主机</returns> public static bool contains(ResHost rh, string name) { try { if (Singleton.BaseGet(name) == null) { Singleton.BaseSet(name, new List <ResHost>()); } List <ResHost> list = Singleton.BaseGet(name) as List <ResHost>; return(list.Contains(rh)); } catch { return(false); } }
/// <summary> /// 从指定分组中删除主机 /// </summary> /// <param name="rh">要删除的主机</param> /// <param name="name">要从中删除的分组的名字</param> /// <returns></returns> public static bool remove(ResHost rh, string name) { try { if (Singleton.BaseGet(name) == null) { Singleton.BaseSet(name, new List <ResHost>()); } List <ResHost> list = Singleton.BaseGet(name) as List <ResHost>; list.Remove(rh); return(true); } catch { return(false); } }
/// <summary> /// HoldingServer初始化 /// </summary> public HoldingServer() { singleton = this; self = new ResHost(new IPEndPoint(Functions.SelfIP, Configuration.Port), Dns.GetHostName()); self.rGroup(Configuration.Groups); self.searchService = Functions.SearchService; lis = new Listener(Configuration.Port); lis.onAccept += new AcceptHandler(lis_onAccept); lis.onReceive += MessageDealer.UDPReceive; server = new ServerObject(); client = new ClientObject(); remoteAddress = Functions.RemoteIP; selfAddress = Functions.SelfIP; state = 0; }
/// <summary> /// HoldingServer初始化 /// </summary> public HoldingServer() { singleton = this; self = new ResHost(new IPEndPoint(Functions.SelfIP, Configuration.Port), Dns.GetHostName()); self.rGroup(Configuration.Groups); self.searchService = Functions.SearchService; lis = new Listener(Configuration.Port); lis.onAccept += new AcceptHandler(lis_onAccept); lis.onReceive += MessageDealer.UDPReceive; server = new ServerObject(); client = new ClientObject(); remoteAddress = Functions.RemoteIP; selfAddress = Functions.SelfIP; state = 0; }
/// <summary> /// 处理部分消息的FinalDeal事件 /// </summary> /// <param name="peer">消息要发送到的主机</param> /// <param name="msg">消息</param> public static void onFinalDeal(Peer peer, Msg msg) { switch (msg.type) { case 13: if (peer.info.id == null) { msg.valid = false; return; } msg.valid = true; ResHost rh = HostManager.Singleton[peer.info.id.ToString()]; msg.data = HostGroup.getServices(rh); break; } }
/// <summary> /// 处理主机断开 /// </summary> /// <param name="peer">断开的主机</param> public static void onPeerQuit(Peer peer) { if (HoldingServer.State == 1) { if (peer.info.id == null) { return; } ResHost rh = HostManager.Singleton[peer.info.id.ToString()]; if (rh != null) { rh.rGroup(new string[0]); } } else if (peer == HoldingServer.Client.server) { HoldingServer.Start(false); } }
/// <summary> /// 向动态列表中添加主机 /// </summary> /// <param name="rh">要添加的主机</param> public static void AddDynamic(ResHost rh) { singleton.dynamicList.Add(rh); }
/// <summary> /// 向列表中添加主机 /// </summary> /// <param name="host">要添加的主机</param> public void Add(ResHost host) { BaseSet(host.id.ToString(), host); }
/// <summary> /// 向列表中添加主机 /// </summary> /// <param name="host">要添加的主机</param> public void Add(ResHost host) { BaseSet(host.id.ToString(), host); }
/// <summary> /// 获取指定主机所在域中的所有WebService /// </summary> /// <param name="rh">指定的主机</param> /// <returns>得到的WebService</returns> public static string[] getServices(ResHost rh) { return(getServices(rh.groups.ToArray())); }
/// <summary> /// 向静态列表中添加主机 /// </summary> /// <param name="rh">要添加的主机</param> public static void AddStatic(ResHost rh) { singleton.staticList.Add(rh); Configuration.StaticHostList = singleton.staticList; }
/// <summary> /// 向动态列表中添加主机 /// </summary> /// <param name="rh">要添加的主机</param> public static void AddDynamic(ResHost rh) { singleton.dynamicList.Add(rh); }
/// <summary> /// 向静态列表中添加主机 /// </summary> /// <param name="rh">要添加的主机</param> public static void AddStatic(ResHost rh) { singleton.staticList.Add(rh); Configuration.StaticHostList = singleton.staticList; }
/// <summary> /// 从所有分组中删除主机 /// </summary> /// <param name="rh">要删除的主机</param> public static void remove(ResHost rh) { for (int i = 0; i < Singleton.Count; i++) { if (Singleton.BaseGet(i) as List<ResHost> != null) { List<ResHost> list = Singleton.BaseGet(i) as List<ResHost>; list.Remove(rh); } } }
/// <summary> /// 判断指定分组是否包含指定主机 /// </summary> /// <param name="rh">指定的主机</param> /// <param name="name">指定的分组的名字</param> /// <returns>指定分组是否包含指定主机</returns> public static bool contains(ResHost rh, string name) { try { if (Singleton.BaseGet(name) == null) Singleton.BaseSet(name, new List<ResHost>()); List<ResHost> list = Singleton.BaseGet(name) as List<ResHost>; return list.Contains(rh); } catch { return false; } }
/// <summary> /// 获取指定主机所在域中的所有WebService /// </summary> /// <param name="rh">指定的主机</param> /// <returns>得到的WebService</returns> public static string[] getServices(ResHost rh) { return getServices(rh.groups.ToArray()); }