陈嘉乐
2020-12-01 e08a444a9d7acea0cf39f50d22d29179f6a59292
HDL_ON/DAL/DriverLayer/UdpSocket.cs
File was renamed from HDL_ON/DriverLayer/UdpSocket.cs
@@ -1,9 +1,8 @@
using System;
using System.Net.Sockets;
using System.Net;
using Newtonsoft.Json.Linq;
namespace HDL_ON
namespace HDL_ON.DriverLayer
{
   public class UdpSocket
   {
@@ -20,39 +19,34 @@
            }
        }
      /// <summary>
      /// 监听端口
      /// </summary>
      public int port
      {
            get
            {
            if (MainPage.LoginUser != null && Entity.DB_ResidenceData.residenceData != null)
            {
               return Entity.DB_ResidenceData.residenceData.GatewayType == 0 ? 6000 : 8585;
            }
            return 6000;
            }
      }
      //本地Socket
      private Socket busSocket;
      int _port = 0;
      /// <summary>
      /// 启动Socket接收和发送功能
      /// </summary>
      public void Start ()
      public void Start (int port)
        {
            if (IsRunning || port == 0) {
                return;
         if (IsRunning)
         {
                if (port == _port)
                {
                    return;
                }
                else
                {
                    busSocket.Close();
                }
            }
            _port = port;
            busSocket = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            busSocket.EnableBroadcast = true;
            try {
                busSocket.Bind (new IPEndPoint (IPAddress.Any, port));
                //busSocket.Bind (new IPEndPoint (IPAddress.Any, 6000));
                busSocket.Bind(new IPEndPoint(IPAddress.Any, port));
            busSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse("239.0.168.188")));
                busSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse("239.0.168.188")));
         }
         catch{
                busSocket = null;
@@ -113,10 +107,6 @@
                Console.WriteLine($"asyncBeginReceive {e.Message}");
            } 
      }
      /// <summary>
        /// 搜索网络设备触发的回调事件
        /// </summary>
      public Action<string> SearchNetDeviceAction;
      /// <summary>
      /// 异步接收数据结束
@@ -139,22 +129,11 @@
            packet.Bytes = new byte[len];
            Array.Copy(bytes, 0, packet.Bytes, 0, packet.Bytes.Length);
            //MainPage.Log($"接收{packet.RemoteEndPoint}数据");
            //mqtt连接数据读取  A协议网络设备信息读取回复 处理
            if (((IPEndPoint)packet.RemoteEndPoint).Port == 8585)
            {
               var reString = System.Text.Encoding.UTF8.GetString(bytes);
               var jt = Newtonsoft.Json.JsonConvert.DeserializeObject<JObject>(reString);
               JToken jtc = null;
               jt.TryGetValue("command", out jtc);
               if (jtc != null && jtc.ToString() == "search_response")
               {
                  JToken jto = null;
                  jt.TryGetValue("objects", out jto);
                  if (jto != null)
                  {
                     SearchNetDeviceAction?.Invoke(jto.ToString());
                  }
               }
               Control.Ins.ConvertReceiveData(bytes);
            }
            else if(((IPEndPoint)packet.RemoteEndPoint).Port == 6000)//处理bus 6000端口的数据
            {