From d4973876384be55df64de45db8a511d1e0330872 Mon Sep 17 00:00:00 2001
From: wei <kaede@kaededeMacBook-Air.local>
Date: 星期三, 23 六月 2021 17:06:20 +0800
Subject: [PATCH] 房间小图列表
---
HDL_ON/DAL/DriverLayer/UdpSocket.cs | 190 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 190 insertions(+), 0 deletions(-)
diff --git a/HDL_ON/DAL/DriverLayer/UdpSocket.cs b/HDL_ON/DAL/DriverLayer/UdpSocket.cs
new file mode 100644
index 0000000..4946986
--- /dev/null
+++ b/HDL_ON/DAL/DriverLayer/UdpSocket.cs
@@ -0,0 +1,190 @@
+锘縰sing 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")));
+ }
+ catch{
+ busSocket = null;
+ return;
+ }
+
+ asyncBeginReceive();
+
+ MainPage.Log ($"udp port : {port}");
+ }
+
+ /// <summary>
+ /// 鍋滄Socket
+ /// </summary>
+ public void Stop()
+ {
+ if (!IsRunning)
+ {
+ return;
+ }
+ try
+ {
+ busSocket.Close();
+ }
+ 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;
+ }
+
+ 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);
+ asyncBeginReceive ();
+ Console.WriteLine($"asyncBeginReceive {e.Message}");
+ }
+ }
+
+ /// <summary>
+ /// 寮傛鎺ユ敹鏁版嵁缁撴潫
+ /// </summary>
+ /// <param name="iar"></param>
+ private void asyncEndReceive(IAsyncResult iar)
+ {
+ if (!IsRunning)
+ {
+ return;
+ }
+
+ try
+ {
+ 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);
+ }
+ 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 {
+
+ }
+ }
+ }
+}
\ No newline at end of file
--
Gitblit v1.8.0