From 488cf7d591dc7400ed5c7f116af7005396c666e2 Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期三, 03 一月 2024 17:12:17 +0800
Subject: [PATCH] Merge branch 'wjc' into Dev-Branch-2024

---
 HDL_ON/DAL/DriverLayer/UdpSocket.cs |  326 ++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 278 insertions(+), 48 deletions(-)

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
+}
+

--
Gitblit v1.8.0