From d099a65ce3f5f8ed9ba345f8f3bdcf617fa4af75 Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期三, 08 十一月 2023 09:55:40 +0800
Subject: [PATCH] 更改udp

---
 HDL_ON/DAL/DriverLayer/UdpSocket.cs                |  326 +++++++++++++++++++---
 HDL_ON/Entity/Function/Function.cs                 |    2 
 HDL_ON/DAL/DriverLayer/AsyncUdpServer.cs           |  453 ++++++++++++++++++++++++++++++++
 HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPage.cs |   11 
 HDL_ON/DAL/Server/HttpServerRequest.cs             |    4 
 HDL_ON/DAL/DriverLayer/Packet.cs                   |   18 
 HDL_ON/DAL/Mqtt/MqttClient.cs                      |    2 
 HDL_ON/HDL_ON.projitems                            |    2 
 8 files changed, 749 insertions(+), 69 deletions(-)

diff --git a/HDL_ON/DAL/DriverLayer/AsyncUdpServer.cs b/HDL_ON/DAL/DriverLayer/AsyncUdpServer.cs
new file mode 100644
index 0000000..097344b
--- /dev/null
+++ b/HDL_ON/DAL/DriverLayer/AsyncUdpServer.cs
@@ -0,0 +1,453 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Net.Sockets;
+using System.Text;
+using System.Threading.Tasks;
+ 
+namespace HDL_ON.DAL.DriverLayer
+{
+    //class AsyncUdpServer
+    /// <summary>
+    /// UdpClient 瀹炵幇寮傛UDP鏈嶅姟鍣�
+    /// </summary>
+    public class AsyncUdpServer
+    {
+        #region Fields
+        /// <summary>
+        /// 鏈嶅姟鍣ㄧ▼搴忓厑璁哥殑鏈�澶у鎴风杩炴帴鏁�
+        /// </summary>
+        private int _maxClient;
+
+        /// <summary>
+        /// 褰撳墠鐨勮繛鎺ョ殑瀹㈡埛绔暟
+        /// </summary>
+        //private int _clientCount;
+
+        /// <summary>
+        /// 鏈嶅姟鍣ㄤ娇鐢ㄧ殑寮傛UdpClient
+        /// </summary>
+        private UdpClient _server;
+
+        /// <summary>
+        /// 瀹㈡埛绔細璇濆垪琛�
+        /// </summary>
+        //private List<AsyncUDPState> _clients;
+
+        private bool disposed = false;
+
+        /// <summary>
+        /// 鏁版嵁鎺ュ彈缂撳啿鍖�
+        /// </summary>
+        private byte[] _recvBuffer;
+
+        #endregion
+
+        #region Properties
+
+        /// <summary>
+        /// 鏈嶅姟鍣ㄦ槸鍚︽鍦ㄨ繍琛�
+        /// </summary>
+        public bool IsRunning { get; private set; }
+        /// <summary>
+        /// 鐩戝惉鐨処P鍦板潃
+        /// </summary>
+        public IPAddress Address { get; private set; }
+        /// <summary>
+        /// 鐩戝惉鐨勭鍙�
+        /// </summary>
+        public int Port { get; private set; }
+        /// <summary>
+        /// 閫氫俊浣跨敤鐨勭紪鐮�
+        /// </summary>
+        public Encoding Encoding { get; set; }
+
+        #endregion
+
+        #region 鏋勯�犲嚱鏁�
+
+        /// <summary>
+        /// 寮傛UdpClient UDP鏈嶅姟鍣�
+        /// </summary>
+        /// <param name="listenPort">鐩戝惉鐨勭鍙�</param>
+        public AsyncUdpServer(int listenPort)
+            : this(IPAddress.Any, listenPort, 10240)
+        {
+        }
+
+        /// <summary>
+        /// 寮傛UdpClient UDP鏈嶅姟鍣�
+        /// </summary>
+        /// <param name="localEP">鐩戝惉鐨勭粓缁撶偣</param>
+        public AsyncUdpServer(IPEndPoint localEP)
+            : this(localEP.Address, localEP.Port, 10240)
+        {
+        }
+
+        /// <summary>
+        /// 寮傛UdpClient UDP鏈嶅姟鍣�
+        /// </summary>
+        /// <param name="localIPAddress">鐩戝惉鐨処P鍦板潃</param>
+        /// <param name="listenPort">鐩戝惉鐨勭鍙�</param>
+        /// <param name="maxClient">鏈�澶у鎴风鏁伴噺</param>
+        public AsyncUdpServer(IPAddress localIPAddress, int listenPort, int maxClient)
+        {
+            this.Address = localIPAddress;
+            this.Port = listenPort;
+            this.Encoding = Encoding.Default;
+
+            _maxClient = maxClient;
+            //_clients = new List<AsyncUDPSocketState>();
+            _server = new UdpClient(new IPEndPoint(this.Address, this.Port));
+            uint IOC_IN = 0x80000000;
+            uint IOC_VENDOR = 0x18000000;
+            uint SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12;
+
+            _server.Client.IOControl((int)SIO_UDP_CONNRESET, new byte[] { Convert.ToByte(false) }, null);
+
+            _recvBuffer = new byte[_server.Client.ReceiveBufferSize];
+        }
+
+        #endregion
+
+        #region Method
+        /// <summary>
+        /// 鍚姩鏈嶅姟鍣�
+        /// </summary>
+        /// <returns>寮傛TCP鏈嶅姟鍣�</returns>
+        public void Start()
+        {
+            try
+            {
+                if (!IsRunning)
+                {
+                    IsRunning = true;
+                    _server.EnableBroadcast = true;
+                    _server.BeginReceive(ReceiveDataAsync, null);
+                }
+            }
+            catch (Exception e) { }
+        }
+
+        /// <summary>
+        /// 鍋滄鏈嶅姟鍣�
+        /// </summary>
+        public void Stop()
+        {
+            try
+            {
+                //if (IsRunning)
+                {
+                    IsRunning = false;
+                    _server.Close();
+                    //TODO 鍏抽棴瀵规墍鏈夊鎴风鐨勮繛鎺�
+
+                }
+            }
+            catch (Exception e) { }
+        }
+
+        /// <summary>
+        /// 鎺ユ敹鏁版嵁鐨勬柟娉�
+        /// </summary>
+        /// <param name="ar"></param>
+        private void ReceiveDataAsync(IAsyncResult ar)
+        {
+            bool isReceive = false;
+            try
+            {
+                var udpState = new AsyncUDPState();
+                IPEndPoint remote = null;
+                udpState.buffer = _server.EndReceive(ar, ref remote); ;
+                udpState.remote = remote;
+                udpState.udpClient = _server;
+
+                isReceive = true;
+                receive();
+
+                //瑙﹀彂鏁版嵁鏀跺埌浜嬩欢
+                RaiseDataReceived(udpState);
+            }
+            catch (Exception)
+            {
+                //TODO 澶勭悊寮傚父
+                RaiseOtherException(null);
+            }
+            finally
+            {
+                if (!isReceive)
+                {
+                    receive();
+                }
+            }
+        }
+
+        void receive()
+        {
+            if (IsRunning && _server != null)
+            {
+                int count = 10;
+                while (0 < count--)
+                {
+                    try
+                    {
+                        _server.BeginReceive(ReceiveDataAsync, null);
+                        break;
+                    }
+                    catch (Exception e)
+                    {
+                        System.Threading.Thread.Sleep(100);
+                    }
+                }
+            }
+
+        }
+
+        /// <summary>
+        /// 鍙戦�佹暟鎹�
+        /// </summary>
+        /// <param name="msg"></param>
+        /// <param name="remote"></param>
+        public void Send(byte[] data, IPEndPoint remote)
+        {
+            try
+            {
+                RaisePrepareSend(null);
+                _server.BeginSend(data, data.Length, remote, new AsyncCallback(SendCallback), null);
+            }
+            catch (Exception)
+            {
+                //TODO 寮傚父澶勭悊
+                RaiseOtherException(null);
+            }
+        }
+
+        private void SendCallback(IAsyncResult ar)
+        {
+            //if (ar.IsCompleted)
+            {
+                try
+                {
+                    _server.EndSend(ar);
+                    //娑堟伅鍙戦�佸畬姣曚簨浠�
+                    RaiseCompletedSend(null);
+                }
+                catch (Exception)
+                {
+                    //TODO 鏁版嵁鍙戦�佸け璐ヤ簨浠�
+                    RaiseOtherException(null);
+                }
+            }
+
+        }
+        #endregion
+
+        #region 浜嬩欢
+        /// <summary>
+        /// 鎺ユ敹鍒版暟鎹簨浠�
+        /// </summary>
+        public event EventHandler<AsyncUDPEventArgs> DataReceived;
+
+        private void RaiseDataReceived(AsyncUDPState state)
+        {
+            if (DataReceived != null)
+            {
+                DataReceived(this, new AsyncUDPEventArgs(state));
+            }
+        }
+
+        /// <summary>
+        /// 鍙戦�佹暟鎹墠鐨勪簨浠�
+        /// </summary>
+        public event EventHandler<AsyncUDPEventArgs> PrepareSend;
+
+        /// <summary>
+        /// 瑙﹀彂鍙戦�佹暟鎹墠鐨勪簨浠�
+        /// </summary>
+        /// <param name="state"></param>
+        private void RaisePrepareSend(AsyncUDPState state)
+        {
+            if (PrepareSend != null)
+            {
+                PrepareSend(this, new AsyncUDPEventArgs(state));
+            }
+        }
+
+        /// <summary>
+        /// 鏁版嵁鍙戦�佸畬姣曚簨浠�
+        /// </summary>
+        public event EventHandler<AsyncUDPEventArgs> CompletedSend;
+
+        /// <summary>
+        /// 瑙﹀彂鏁版嵁鍙戦�佸畬姣曠殑浜嬩欢
+        /// </summary>
+        /// <param name="state"></param>
+        private void RaiseCompletedSend(AsyncUDPState state)
+        {
+            if (CompletedSend != null)
+            {
+                CompletedSend(this, new AsyncUDPEventArgs(state));
+            }
+        }
+
+        /// <summary>
+        /// 缃戠粶閿欒浜嬩欢
+        /// </summary>
+        public event EventHandler<AsyncUDPEventArgs> NetError;
+        /// <summary>
+        /// 瑙﹀彂缃戠粶閿欒浜嬩欢
+        /// </summary>
+        /// <param name="state"></param>
+        private void RaiseNetError(AsyncUDPState state)
+        {
+            if (NetError != null)
+            {
+                NetError(this, new AsyncUDPEventArgs(state));
+            }
+        }
+
+        /// <summary>
+        /// 寮傚父浜嬩欢
+        /// </summary>
+        public event EventHandler<AsyncUDPEventArgs> OtherException;
+        /// <summary>
+        /// 瑙﹀彂寮傚父浜嬩欢
+        /// </summary>
+        /// <param name="state"></param>
+        private void RaiseOtherException(AsyncUDPState state, string descrip)
+        {
+            if (OtherException != null)
+            {
+                OtherException(this, new AsyncUDPEventArgs(descrip, state));
+            }
+        }
+        private void RaiseOtherException(AsyncUDPState state)
+        {
+            RaiseOtherException(state, "");
+        }
+        #endregion
+
+        #region Close
+        /// <summary>
+        /// 鍏抽棴涓�涓笌瀹㈡埛绔箣闂寸殑浼氳瘽
+        /// </summary>
+        /// <param name="state">闇�瑕佸叧闂殑瀹㈡埛绔細璇濆璞�</param>
+        public void Close(AsyncUDPState state)
+        {
+            if (state != null)
+            {
+                //_clients.Remove(state);
+                //_clientCount--;
+                //TODO 瑙﹀彂鍏抽棴浜嬩欢
+            }
+        }
+        /// <summary>
+        /// 鍏抽棴鎵�鏈夌殑瀹㈡埛绔細璇�,涓庢墍鏈夌殑瀹㈡埛绔繛鎺ヤ細鏂紑
+        /// </summary>
+        public void CloseAllClient()
+        {
+            //foreach (AsyncUDPSocketState client in _clients)
+            //{
+            //    Close(client);
+            //}
+            //_clientCount = 0;
+            //_clients.Clear();
+        }
+
+        #endregion
+
+        #region 閲婃斁
+        /// <summary>
+        /// Performs application-defined tasks associated with freeing, 
+        /// releasing, or resetting unmanaged resources.
+        /// </summary>
+        public void Dispose()
+        {
+            Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        /// <summary>
+        /// Releases unmanaged and - optionally - managed resources
+        /// </summary>
+        /// <param name="disposing"><c>true</c> to release 
+        /// both managed and unmanaged resources; <c>false</c> 
+        /// to release only unmanaged resources.</param>
+        protected virtual void Dispose(bool disposing)
+        {
+            if (!this.disposed)
+            {
+                if (disposing)
+                {
+                    try
+                    {
+                        Stop();
+                        if (_server != null)
+                        {
+                            _server = null;
+                        }
+                    }
+                    catch (SocketException)
+                    {
+                        //TODO
+                        RaiseOtherException(null);
+                    }
+                }
+                disposed = true;
+            }
+        }
+        #endregion
+    }
+}
+public class AsyncUDPState
+{
+    // Client   socket.
+    public UdpClient udpClient = null;
+    // Size of receive buffer.
+    public const int BufferSize = 1024;
+    // Receive buffer.
+    public byte[] buffer = new byte[BufferSize];
+    // Received data string.
+    public StringBuilder sb = new StringBuilder();
+
+    public IPEndPoint remote = new IPEndPoint(IPAddress.Any, 0);
+}
+/// <summary>
+/// UdpClient 寮傛UDP鏈嶅姟鍣ㄤ簨浠跺弬鏁扮被
+/// </summary>
+public class AsyncUDPEventArgs : EventArgs
+{
+    /// <summary>
+    /// 鎻愮ず淇℃伅
+    /// </summary>
+    public string _msg;
+
+    /// <summary>
+    /// 瀹㈡埛绔姸鎬佸皝瑁呯被
+    /// </summary>
+    public AsyncUDPState _state;
+
+    /// <summary>
+    /// 鏄惁宸茬粡澶勭悊杩囦簡
+    /// </summary>
+    public bool IsHandled { get; set; }
+
+    public AsyncUDPEventArgs(string msg)
+    {
+        this._msg = msg;
+        IsHandled = false;
+    }
+    public AsyncUDPEventArgs(AsyncUDPState state)
+    {
+        this._state = state;
+        IsHandled = false;
+    }
+    public AsyncUDPEventArgs(string msg, AsyncUDPState state)
+    {
+        this._msg = msg;
+        this._state = state;
+        IsHandled = false;
+    }
+
+}
diff --git a/HDL_ON/DAL/DriverLayer/Packet.cs b/HDL_ON/DAL/DriverLayer/Packet.cs
index 0e8f8dc..99f46b8 100644
--- a/HDL_ON/DAL/DriverLayer/Packet.cs
+++ b/HDL_ON/DAL/DriverLayer/Packet.cs
@@ -12,11 +12,11 @@
     /// </summary>
     public class Packet
     {
-        /// <summary>
-        /// 缂撳啿鍖哄ぇ灏�
-        /// Link鍗忚鐜板湪涓�涓寘鐨勬暟鎹瘮杈冨ぇ锛岀紦鍐插尯澶皬瀛樹笉瀹屽叏閮ㄦ暟鎹� 2023-07-14 16:03:56  wxr
-        /// </summary>
-        public const int Size = 1024 * 10;
+        ///// <summary>
+        ///// 缂撳啿鍖哄ぇ灏�
+        ///// Link鍗忚鐜板湪涓�涓寘鐨勬暟鎹瘮杈冨ぇ锛岀紦鍐插尯澶皬瀛樹笉瀹屽叏閮ㄦ暟鎹� 2023-07-14 16:03:56  wxr
+        ///// </summary>
+        //public const int Size = 2000;
 
         /// <summary>
         /// 鎺ユ敹鍒扮殑鏁版嵁
@@ -28,11 +28,15 @@
         /// </summary>
         public System.Net.EndPoint RemoteEndPoint;
 
-        public Packet()
+        public Packet(int lenght)
         {
-            this.Bytes = new byte[Size];
+            this.Bytes = new byte[lenght];
+           
             RemoteEndPoint = new System.Net.IPEndPoint(System.Net.IPAddress.Any, 0);
         }
+
+
+
         public Packet(byte[] data, System.Net.EndPoint remoteEndPoint)
         {
             this.Bytes = data;
diff --git a/HDL_ON/DAL/DriverLayer/UdpSocket.cs b/HDL_ON/DAL/DriverLayer/UdpSocket.cs
index df9662a..50ceeac 100644
--- a/HDL_ON/DAL/DriverLayer/UdpSocket.cs
+++ b/HDL_ON/DAL/DriverLayer/UdpSocket.cs
@@ -1,4 +1,222 @@
-锘縰sing System;
+锘�//using System;
+//using System.Net.Sockets;
+//using System.Net;
+
+//namespace HDL_ON.DriverLayer
+//{
+//	public class UdpSocket
+//	{
+//		static UdpSocket _busSocket;
+//		public static UdpSocket _BusSocket
+//        {
+//            get
+//            {
+//				if(_busSocket == null)
+//                {
+//					_busSocket = new UdpSocket();
+//                }
+//				return _busSocket;
+//            }
+//        }
+
+//		//鏈湴Socket
+//		private Socket busSocket;
+//		public int Port = 0;
+//		/// <summary>
+//		/// 鍚姩Socket鎺ユ敹鍜屽彂閫佸姛鑳�
+//		/// </summary>
+//		public void Start (int port = 0)
+//        {
+//			if (IsRunning)
+//			{
+//				if (port == Port)
+//                {
+//                    return;
+//				}
+//                else
+//                {
+//                    busSocket.Close();
+//				}
+//            }
+//			if (port != 0)
+//				Port = port;
+//			if (Port == 0)
+//				return;
+
+//            busSocket = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
+//            busSocket.EnableBroadcast = true;
+//            try {
+//				busSocket.Bind(new IPEndPoint(IPAddress.Any, Port));
+
+//				busSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse("239.0.168.188")));
+//				relinkCount = 0;
+//			}
+//			catch (Exception ex){
+//				MainPage.Log ($"udp port bind error : {ex.Message}");
+
+//				busSocket = null;
+//                return;
+//            }
+
+//            asyncBeginReceive();
+
+//            MainPage.Log ($"udp port : {port}");
+//        }
+
+//		/// <summary>
+//		/// 鍋滄Socket
+//		/// </summary>
+//		public void Stop()
+//		{
+//			if(busSocket == null)
+//            {
+//				return;
+//            }
+//			if (!IsRunning)
+//			{
+//				return;
+//			}
+//			try
+//			{
+//				busSocket.Close();
+//				relinkCount = 0;
+//			}
+//			catch { }
+//			busSocket = null;
+//			MainPage.Log("Socket鍏抽棴");
+//		}
+
+//		/// <summary>
+//		/// 褰撳墠鐨凷ocket鏄惁杩愯
+//		/// </summary>
+//		public bool IsRunning
+//		{
+//			get
+//			{
+//				return null == busSocket ? false : true;
+//			}
+//		}
+
+//		/// <summary>
+//		/// 寮�濮嬪紓姝ユ帴鏀舵暟鎹�
+//		/// </summary>
+//		private void asyncBeginReceive()
+//		{
+//			if (!IsRunning)
+//			{
+//				return;
+//			}
+//			if(busSocket == null)
+//            {
+//				return;
+//            }
+
+//            try {
+//                Packet packet = new Packet ();
+//                busSocket.BeginReceiveFrom (packet.Bytes, 0, packet.Bytes.Length, SocketFlags.None, ref packet.RemoteEndPoint, new AsyncCallback (asyncEndReceive), packet);
+//            } 
+//            catch (Exception e) {
+//                System.Threading.Thread.Sleep (1);
+//                Console.WriteLine("asyncBeginReceive " + relinkCount	);
+//				if (relinkCount == 0)
+//				{
+//					relinkCount = 1;
+//					asyncBeginReceive();
+//				}
+//                Console.WriteLine($"asyncBeginReceive {e.Message}");
+//            } 
+//		}
+//		/// <summary>
+//        /// 閲嶈繛娆℃暟
+//        /// </summary>
+//		private int relinkCount = 0;
+
+
+
+//		/// <summary>
+//		/// 寮傛鎺ユ敹鏁版嵁缁撴潫
+//		/// </summary>
+//		/// <param name="iar"></param>
+//		private void asyncEndReceive(IAsyncResult iar)
+//		{
+//			if (!IsRunning)
+//			{
+//				return;
+//			}
+//			try
+//			{
+//				if (busSocket == null)
+//				{
+//					return;
+//				}
+//				asyncBeginReceive();
+//				Packet packet = (Packet)iar.AsyncState;
+//				int len = busSocket.EndReceiveFrom(iar, ref packet.RemoteEndPoint);
+
+//				byte[] bytes = packet.Bytes;
+//				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)
+//				{
+//					Control.Ins.ConvertReceiveData(bytes, ((IPEndPoint)packet.RemoteEndPoint).Address.ToString());
+//				}
+//				else if (((IPEndPoint)packet.RemoteEndPoint).Port == 6000)//澶勭悊bus 6000绔彛鐨勬暟鎹�
+//				{
+//					packet.Manager();
+//				}
+
+//			}
+//			catch (Exception ex)
+//			{
+//				MainPage.Log($"寮傛鎺ユ敹鏁版嵁缁撴潫 {ex.Message},{((Packet)iar.AsyncState).Bytes}");
+//			}
+//		}
+
+//		/// <summary>
+//		/// 寮傛鍙戦�佹暟鎹�
+//		/// </summary>
+//		/// <param name="tempPacket"></param>
+//		public void AsyncBeginSend(Packet tempPacket)
+//		{
+//			try
+//			{
+//				if (!IsRunning)
+//				{
+//					tempPacket.HaveSendCount++;
+//					return;
+//				}
+//				tempPacket.FlagDateTime = System.DateTime.Now;
+//				tempPacket.HaveSendCount++;
+//				busSocket.BeginSendTo(tempPacket.Bytes, 0, tempPacket.Bytes.Length, SocketFlags.None, tempPacket.RemoteEndPoint, new AsyncCallback(asyncEndSend), tempPacket);
+//			}
+//			catch (Exception ex)
+//			{
+//				MainPage.Log($"AsyncBeginSend error {ex.Message}");
+//			}
+//		}
+
+//		/// <summary>
+//		/// 寮傛鍙戦�佹暟鎹粨鏉�
+//		/// </summary>
+//		/// <param name="iar"></param>
+//		private void asyncEndSend(IAsyncResult iar)
+//		{
+//			Packet tempUDPPacketBuffer = (Packet)iar.AsyncState;
+//			try
+//			{
+//				int bytesSent = busSocket.EndSendTo(iar);
+//			}
+//			catch {
+
+//            }
+//		}
+//	}
+//}
+
+using System;
 using System.Net.Sockets;
 using System.Net;
 
@@ -8,16 +226,16 @@
 	{
 		static UdpSocket _busSocket;
 		public static UdpSocket _BusSocket
-        {
-            get
-            {
-				if(_busSocket == null)
-                {
+		{
+			get
+			{
+				if (_busSocket == null)
+				{
 					_busSocket = new UdpSocket();
-                }
+				}
 				return _busSocket;
-            }
-        }
+			}
+		}
 
 		//鏈湴Socket
 		private Socket busSocket;
@@ -25,53 +243,55 @@
 		/// <summary>
 		/// 鍚姩Socket鎺ユ敹鍜屽彂閫佸姛鑳�
 		/// </summary>
-		public void Start (int port = 0)
-        {
+		public void Start(int port = 0)
+		{
 			if (IsRunning)
 			{
 				if (port == Port)
-                {
-                    return;
+				{
+					return;
 				}
-                else
-                {
-                    busSocket.Close();
+				else
+				{
+					busSocket.Close();
 				}
-            }
+			}
 			if (port != 0)
 				Port = port;
 			if (Port == 0)
 				return;
 
-            busSocket = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
-            busSocket.EnableBroadcast = true;
-            try {
+			busSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
+			busSocket.EnableBroadcast = true;
+			try
+			{
 				busSocket.Bind(new IPEndPoint(IPAddress.Any, Port));
 
 				busSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse("239.0.168.188")));
 				relinkCount = 0;
 			}
-			catch (Exception ex){
-				MainPage.Log ($"udp port bind error : {ex.Message}");
+			catch (Exception ex)
+			{
+				MainPage.Log($"udp port bind error : {ex.Message}");
 
 				busSocket = null;
-                return;
-            }
+				return;
+			}
 
-            asyncBeginReceive();
+			asyncBeginReceive();
 
-            MainPage.Log ($"udp port : {port}");
-        }
+			MainPage.Log($"udp port : {port}");
+		}
 
 		/// <summary>
 		/// 鍋滄Socket
 		/// </summary>
 		public void Stop()
 		{
-			if(busSocket == null)
-            {
+			if (busSocket == null)
+			{
 				return;
-            }
+			}
 			if (!IsRunning)
 			{
 				return;
@@ -97,6 +317,8 @@
 			}
 		}
 
+		byte []receiveBytes = new byte[2000];
+
 		/// <summary>
 		/// 寮�濮嬪紓姝ユ帴鏀舵暟鎹�
 		/// </summary>
@@ -106,29 +328,35 @@
 			{
 				return;
 			}
-			if(busSocket == null)
-            {
+			if (busSocket == null)
+			{
 				return;
-            }
+			}
 
-            try {
-                Packet packet = new Packet ();
-                busSocket.BeginReceiveFrom (packet.Bytes, 0, packet.Bytes.Length, SocketFlags.None, ref packet.RemoteEndPoint, new AsyncCallback (asyncEndReceive), packet);
-            } 
-            catch (Exception e) {
-                System.Threading.Thread.Sleep (1);
-                Console.WriteLine("asyncBeginReceive " + relinkCount	);
+			try
+			{
+				int len = busSocket.Receive(receiveBytes, SocketFlags.None);
+			    
+				Packet packet = new Packet(len);
+
+				System.Array.Copy(receiveBytes, packet.Bytes, len);
+                packet.Manager();
+			}
+			catch (Exception e)
+			{
+				System.Threading.Thread.Sleep(1);
+				Console.WriteLine("asyncBeginReceive " + relinkCount);
 				if (relinkCount == 0)
 				{
 					relinkCount = 1;
 					asyncBeginReceive();
 				}
-                Console.WriteLine($"asyncBeginReceive {e.Message}");
-            } 
+				Console.WriteLine($"asyncBeginReceive {e.Message}");
+			}
 		}
 		/// <summary>
-        /// 閲嶈繛娆℃暟
-        /// </summary>
+		/// 閲嶈繛娆℃暟
+		/// </summary>
 		private int relinkCount = 0;
 
 
@@ -209,9 +437,11 @@
 			{
 				int bytesSent = busSocket.EndSendTo(iar);
 			}
-			catch {
-            
-            }
+			catch
+			{
+
+			}
 		}
 	}
-}
\ No newline at end of file
+}
+
diff --git a/HDL_ON/DAL/Mqtt/MqttClient.cs b/HDL_ON/DAL/Mqtt/MqttClient.cs
index 4353a7f..9aa07d3 100644
--- a/HDL_ON/DAL/Mqtt/MqttClient.cs
+++ b/HDL_ON/DAL/Mqtt/MqttClient.cs
@@ -565,7 +565,7 @@
                                     //SetGatewayOnlineResetCheck();
                                     //var bytes = Securitys.EncryptionService.AesDecryptPayload(e.ApplicationMessage.Payload, mqttEncryptKey);
                                     //bus鏁版嵁瑙f瀽
-                                    var packet = new Packet();
+                                    var packet = new Packet(e.ApplicationMessage.Payload.Length);
 
                                     if (!string.IsNullOrEmpty(DB_ResidenceData.Instance.HomeGateway.aesKey))
                                     {
diff --git a/HDL_ON/DAL/Server/HttpServerRequest.cs b/HDL_ON/DAL/Server/HttpServerRequest.cs
index 46ccea0..6a3994e 100644
--- a/HDL_ON/DAL/Server/HttpServerRequest.cs
+++ b/HDL_ON/DAL/Server/HttpServerRequest.cs
@@ -710,7 +710,7 @@
                             if (mHomeGatewayRes.Count > 0)
                             {
                                 DB_ResidenceData.Instance.HomeGateway = mHomeGatewayRes[0];//缃戝叧鐘舵��
-                                DriverLayer.Control.Ins.GatewayOnline_Cloud = mHomeGatewayRes[0].gatewayStatus;
+                                HDL_ON.DriverLayer.Control.Ins.GatewayOnline_Cloud = mHomeGatewayRes[0].gatewayStatus;
                                 DB_ResidenceData.Instance.SaveResidenceData();
                                 return revertObj.Code;
                             }
@@ -776,7 +776,7 @@
                 var mHomeGatewayRes = Newtonsoft.Json.JsonConvert.DeserializeObject<HomeGatewayInfo>(revertObj.Data.ToString());
                 if (mHomeGatewayRes != null)
                 {
-                    DriverLayer.Control.Ins.GatewayOnline_Cloud = mHomeGatewayRes.gatewayStatus;
+                    HDL_ON.DriverLayer.Control.Ins.GatewayOnline_Cloud = mHomeGatewayRes.gatewayStatus;
                 }
             }
             return revertObj.Code;
diff --git a/HDL_ON/Entity/Function/Function.cs b/HDL_ON/Entity/Function/Function.cs
index 011c185..fa97357 100644
--- a/HDL_ON/Entity/Function/Function.cs
+++ b/HDL_ON/Entity/Function/Function.cs
@@ -2305,7 +2305,7 @@
         /// <summary>
         /// 绾㈠鐑按鍣�
         /// </summary>
-        public const string HeaterIr = " ir.water_heater";
+        public const string HeaterIr = "ir.water_heater";
         /// <summary>
         /// 绾㈠椋庢墖
         /// </summary>
diff --git a/HDL_ON/HDL_ON.projitems b/HDL_ON/HDL_ON.projitems
index 1c8edc2..3f704ce 100644
--- a/HDL_ON/HDL_ON.projitems
+++ b/HDL_ON/HDL_ON.projitems
@@ -171,7 +171,6 @@
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\MemberManagement\AddMemberScanPage.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\MemberManagement\MemberManagementPageBLL.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\MemberManagement\MemberPermissionPage.cs" />
-    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\MemberManagement\ChooseShareMemberTargetListPage.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddFunction\AddDevciePage.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddFunction\DeviceListPage.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddFunction\BrandListPage.cs" />
@@ -595,6 +594,7 @@
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\3-Intelligence\Automation\Constant.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\3-Intelligence\Scene\SceneTargetTypeChoosePage.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\3-Intelligence\Scene\SceneAutomationListChoosePage.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)DAL\DriverLayer\AsyncUdpServer.cs" />
   </ItemGroup>
   <ItemGroup>
     <Folder Include="$(MSBuildThisFileDirectory)Entity\Device\" />
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPage.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPage.cs
index 1228ec0..85a2377 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPage.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPage.cs
@@ -242,7 +242,7 @@
 
             if (MainPage.Increase)
             {
-                bodyScrolView.Height = Application.GetRealHeight(541);
+                bodyScrolView.Height = Application.GetRealHeight(541-10);
             }
 
             headPortraitView = new FrameLayout()
@@ -858,16 +858,9 @@
 
             #endregion
 
-            bodyView.AddChidren(new Button()
-            {
-                Y = Application.GetRealHeight(622),
-                Height = 1,
-                BackgroundColor = CSS_Color.DividingLineColor,
-            });
-
             btnLogout = new Button()
             {
-                Y = Application.GetRealHeight(623),
+                Y = Application.GetRealHeight(624),
                 Height = Application.GetRealHeight(50),
                 TextAlignment = TextAlignment.Center,
                 TextSize = CSS_FontSize.SubheadingFontSize,

--
Gitblit v1.8.0