/// <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> /// 本机以管理主机身份开启分布式系统 /// </summary> public void ServerStart() { client.remote = SelfAddress; lis.StartTcpAccept(); state = 1; UpdateServices(HostGroup.getServices(self)); }
/// <summary> /// 将本机从指定的分组中删除 /// </summary> /// <param name="name">分组名</param> public void RemoveGroup(string name) { self.removeGroup(name); Configuration.Groups = self.groups.ToArray(); if (state == 2) { client.server.send(new Msg(11, new HostInfo())); } else if (state == 1) { Group.send(new Msg(13)); UpdateServices(HostGroup.getServices(self)); } }
/// <summary> /// 将主机从指定分组中删除 /// </summary> /// <param name="group">要从中删除的分组的名字</param> public void removeGroup(string group) { Peer peer = Peer.find(id); if (this.groups == null) { this.groups = new List <string>(); } if (peer != null) { peer.quitFrom(group); } HostGroup.remove(this, group); groups.Remove(group); }
/// <summary> /// 将主机添加到指定分组 /// </summary> /// <param name="group">要添加到的分组的名字</param> public void addGroup(string group) { Peer peer = Peer.find(id); if (this.groups == null) { this.groups = new List <string>(); } if (peer != null) { peer.addInto(group); } HostGroup.add(this, group); groups.Add(group); }
/// <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="groups">新的分组</param> public void rGroup(string[] groups) { Peer peer = Peer.find(id); if (groups == null) { groups = new string[0]; } if (this.groups == null) { this.groups = new List <string>(); } for (int i = 0; i < this.groups.Count; i++) { if (!groups.Contains(this.groups[i])) { if (peer != null) { peer.quitFrom(this.groups[i]); } HostGroup.remove(this, this.groups[i]); this.groups.RemoveAt(i--); } } for (int i = 0; i < groups.Length; i++) { if (!this.groups.Contains(groups[i])) { if (peer != null) { peer.addInto(groups[i]); } HostGroup.add(this, groups[i]); this.groups.Add(groups[i]); } } }
/// <summary> /// 获取所有指定分组中的所有WebService /// </summary> /// <param name="groups">指定的分组</param> /// <returns>得到的WebService</returns> public static string[] getServices(string[] groups) { return(HostGroup.getServices(groups)); }