Esempio n. 1
0
 /// <summary>
 /// 向分组中添加主机
 /// </summary>
 /// <param name="peer">要添加的主机</param>
 /// <param name="name">分组的标识</param>
 /// <returns>是否添加成功</returns>
 public static bool add(Peer peer, string name)
 {
     try
     {
         if (Singleton.BaseGet(name) == null)
             Singleton.BaseSet(name, new List<Peer>());
         List<Peer> list = Singleton.BaseGet(name) as List<Peer>;
         list.Add(peer);
         return true;
     }
     catch { return false; }
 }
Esempio n. 2
0
 /// <summary>
 /// 向分组中添加主机
 /// </summary>
 /// <param name="peer">要添加的主机</param>
 /// <param name="index">分组的标识</param>
 /// <returns>是否添加成功</returns>
 public static bool add(Peer peer, int index)
 {
     try
     {
         if (Singleton.BaseGet(index) == null)
             Singleton.BaseSet(index, new List<Peer>());
         List<Peer> list = Singleton.BaseGet(index) as List<Peer>;
         list.Add(peer);
         return true;
     }
     catch { return false; }
 }
Esempio n. 3
0
 /// <summary>
 /// 通知同步返回
 /// </summary>
 /// <param name="sender">发送消息的主机</param>
 /// <param name="msg">消息</param>
 public static void doCallBack(Peer sender, Msg msg)
 {
     if (ht[msg.type] != null)
     {
         List<CallBack> list = ht[msg.type] as List<CallBack>;
         lock (list)
         {
             for (int i = 0; i < list.Count; i++)
                 list[i].data = msg.data;
             ht[msg.type] = null;
         }
     }
 }
Esempio n. 4
0
 /// <summary>
 /// 处理其他消息
 /// </summary>
 /// <param name="peer">消息来源主机</param>
 /// <param name="msg">消息</param>
 private static void OtherMessage(Peer peer, Msg msg)
 {
     switch (msg.type)
     {
         case 21:
             peer.close();
             IPAddress add = msg.data as IPAddress;
             Socket s = NetUtils.TestConnect(new IPEndPoint(add, Configuration.Port));
             if (s == null)
                 HoldingServer.Singleton.TestServer();
             else
                 HoldingServer.Singleton.ClientStart(new Peer(s, Message));
             break;
     }
 }
Esempio n. 5
0
 /// <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;
     }
 }
Esempio n. 6
0
 /// <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);
 }
Esempio n. 7
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;
     }
 }
Esempio n. 8
0
 /// <summary>
 /// 消息路由函数
 /// </summary>
 /// <param name="peer">消息来源主机</param>
 /// <param name="msg">消息</param>
 public static void onMessage(Peer peer, Msg msg)
 {
     if (HoldingServer.State == 1)
         ServerMessage(peer, msg);
     else if (HoldingServer.State == 2)
         ClientMessage(peer, msg);
     else
         OtherMessage(peer, msg);
     CallBack.doCallBack(peer, msg);
 }
Esempio n. 9
0
 /// <summary>
 /// 获取分组是否包含主机
 /// </summary>
 /// <param name="peer">要查看的主机</param>
 /// <param name="name">分组的标识</param>
 /// <returns>主机是否在分组中</returns>
 public static bool contains(Peer peer, string name)
 {
     try
     {
         if (Singleton.BaseGet(name) == null)
             Singleton.BaseSet(name, new List<Peer>());
         List<Peer> list = Singleton.BaseGet(name) as List<Peer>;
         return list.Contains(peer);
     }
     catch { return false; }
 }
Esempio n. 10
0
 /// <summary>
 /// 从所有分组中删除主机
 /// </summary>
 /// <param name="peer">要删除的主机</param>
 public static void remove(Peer peer)
 {
     for (int i = 0; i < Singleton.Count; i++)
     {
         if (Singleton.BaseGet(i) as List<Peer> != null)
         {
             List<Peer> list = Singleton.BaseGet(i) as List<Peer>;
             list.Remove(peer);
         }
     }
 }
Esempio n. 11
0
 /// <summary>
 /// Tcp接受主机异步回调函数
 /// </summary>
 /// <param name="r">异步结果</param>
 protected void Accept(IAsyncResult r)
 {
     try
     {
         Socket remotePoint = tcpListener.EndAccept(r);
         Peer peer = new Peer(remotePoint);
         if (onAccept != null)
             onAccept(peer);
         if (state % 10 == 1)
             tcpListener.BeginAccept(new AsyncCallback(Accept), null);
     }
     catch { }
 }
Esempio n. 12
0
 /// <summary>
 /// 本机以非管理主机身份开启分布式系统
 /// </summary>
 /// <param name="peer">管理主机</param>
 public void ClientStart(Peer peer)
 {
     client.remote = peer.info.ipep.Address;
     client.server = peer;
     peer.onFinalDeal += MessageDealer.FinalDeal;
     peer.onPeerQuit += MessageDealer.PeerQuit;
     peer.send(new Msg(11, new HostInfo()));
     lis.StartTcpAccept();
     state = 2;
 }
Esempio n. 13
0
 /// <summary>
 /// Tcp监听接受回调函数
 /// </summary>
 /// <param name="sender">接受的主机</param>
 void lis_onAccept(Peer sender)
 {
     if (state == 2)
     {
         sender.send(new Msg(21, client.remote));
         sender.close();
         return;
     }
     sender.onMessage += MessageDealer.Message;
     sender.onFinalDeal += MessageDealer.FinalDeal;
     sender.onPeerQuit += MessageDealer.PeerQuit;
 }