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 ++++++++++++++++--
HDL_ON/Entity/Function/Function.cs | 2
HDL_ON/DAL/DriverLayer/AsyncUdpServer.cs | 453 ++++++++++++++++++++++++++
HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs | 139 +++++--
HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs | 17
HDL_ON/UI/UI2/3-Intelligence/Automation/Logic.cs | 2
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/UI/UI2/3-Intelligence/Automation/TargetDeviceFunList.cs | 13
10 files changed, 865 insertions(+), 120 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/Server/HttpServerRequest.cs b/HDL_ON/DAL/Server/HttpServerRequest.cs
index 3b78fb1..e8e9e59 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 417b27e..7bcc154 100644
--- a/HDL_ON/Entity/Function/Function.cs
+++ b/HDL_ON/Entity/Function/Function.cs
@@ -2306,7 +2306,7 @@
/// <summary>
/// 绾㈠鐑按鍣�
/// </summary>
- public const string HeaterIr = " ir.water_heater";
+ public const string HeaterIr = "ir.water_heater";
/// <summary>
/// 绾㈠椋庢墖
/// </summary>
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
index 1957662..7d2996e 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/ConditionDeviceFunList.cs
@@ -1311,27 +1311,30 @@
if (indexeList.Count > 0)
{
dicSateteList.Clear();
- string s = string.Empty;
+ string userNameStr = string.Empty;
+ string seleUsrIdStr = string.Empty;
string tag = string.Empty;
- //鏁版嵁灏佽
+ string[] arrayUserIds = new string[indexeList.Count];
+ //寮�闂ㄧ被鍨�
AddDictionary("open_type", "1", "integer");
for (int i = 0; i < indexeList.Count; i++)
{
-
if (i > faceIdList.Count)
{
continue;
}
var indexe = indexeList[i];
var face = faceIdList[indexe];
- AddDictionary("user_id", face.userId, "string");
- s += face.userName;
- s += ",";
tag += face.userId;
tag += "_";
+ userNameStr += face.userName;
+ userNameStr += ",";
+ arrayUserIds[i] = face.userId;
}
+ seleUsrIdStr = Newtonsoft.Json.JsonConvert.SerializeObject(arrayUserIds);
+ AddDictionary("user_id", seleUsrIdStr, "string", "[]");
//鐣岄潰鏄剧ず閫変腑鍊�
- btnState.Text = s;
+ btnState.Text = InpOrOutLogicMethod.Current.RemoveLastStr(userNameStr);
btnState.Tag = tag;
}
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
index c5fbf03..d1fc564 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/InpOrOutLogicMethod.cs
@@ -436,30 +436,43 @@
break;
case SPK.doorgate:
{
- string s = string.Empty;
- if (inputCondition.identifier == "door_call_cloud_event")
- {
- s = Language.StringByID(StringId.shipintonghuahujiao);
- }
- else
- {
- for (int b = 0; b < dicList.Count; b++)
- {
- var dic = dicList[b];
- var key = dic["key"].ToString();
- if (key != "user_id")
- {
- continue;
- }
- var userId = dic["value"].ToString();
- var FaceItem = this.GetFaceItem(userId, device.deviceId);
- s += FaceItem.userName;
- s += ",";
+ string s = string.Empty;
+ try
+ {
+ if (inputCondition.identifier == "door_call_cloud_event")
+ {
+ s = Language.StringByID(StringId.shipintonghuahujiao);
+ }
+ else
+ {
+ for (int b = 0; b < dicList.Count; b++)
+ {
+ var dic = dicList[b];
+ var key = dic["key"].ToString();
+ if (key != "user_id")
+ {
+ continue;
+ }
+ var value = dic["value"].ToString();
+ if (!string.IsNullOrEmpty(value))
+ {
+ var list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(value);
+ for (int a = 0; a < list.Count; a++)
+ {
+
+ var FaceItem = this.GetFaceItem(list[a], device.deviceId);
+ s += FaceItem.userName;
+ s += ",";
+
+ }
+ }
+
+ }
}
-
}
+ catch { }
inputView.btnState.Text = s;
}
break;
@@ -1506,17 +1519,32 @@
case SPK.MusicStandard:
case SPK.AvMusic:
{
+ string on_off = GetKeyValue("on_off", dicList);
string song_name = GetKeyValue("song_name", dicList);
string volume = GetKeyValue("volume", dicList);
- stateStr = song_name + ";" + Language.StringByID(StringId.volumeMusic) + volume;
- if (stateStr.StartsWith(";"))
+
+ if (!string.IsNullOrEmpty(on_off))
{
- stateStr = stateStr.Substring(1, stateStr.Length - 1);
+ if (on_off == "on")
+ {
+ stateStr = Language.StringByID(StringId.onLogic);
+ }
+ else
+ {
+ stateStr = Language.StringByID(StringId.offLogic);
+ }
}
- else if (stateStr.EndsWith(Language.StringByID(StringId.volumeMusic)))
+
+ if (!string.IsNullOrEmpty(song_name))
{
- stateStr = stateStr.Substring(0, stateStr.Length - 3);
+ stateStr += "," + song_name;
}
+
+ if (!string.IsNullOrEmpty(volume))
+ {
+ stateStr += "," + volume;
+ }
+
}
break;
case SPK.ElectricalTvHisense:
@@ -2303,7 +2331,7 @@
foreach (var dic in dicList)
{
string value = dic["value"];
- if (value == "on"|| value == "open")
+ if (value == "on" || value == "open")
{
button1.Text = Language.StringByID(StringId.onLogic);
}
@@ -2494,38 +2522,61 @@
{
foreach (var dic in dicList)
{
- if (dic["key"] == "song_name")
+ if (dic["key"] == "on_off")
{
- button1.Text = dic["value"]?.ToString();
+ if (dic["value"] == "on")
+ {
+ button1.Text = Language.StringByID(StringId.onLogic);
+ }
+ else
+ {
+ button1.Text = Language.StringByID(StringId.offLogic);
+ }
+ }
+ else if (dic["key"] == "song_name")
+ {
+ button2.Text = dic["value"]?.ToString();
}
else if (dic["key"] == "volume")
{
- button2.Text = dic["value"]?.ToString();
+ button3.Text = dic["value"]?.ToString();
}
}
}
break;
case SPK.doorgate:
{
- string s = string.Empty;
- string tag = string.Empty;
- for (int b = 0; b < dicList.Count; b++)
+ try
{
- var dic = dicList[b];
- var key = dic["key"].ToString();
- if (key != "user_id")
+ string userNameStr = string.Empty;
+ string tag = string.Empty;
+ for (int b = 0; b < dicList.Count; b++)
{
- continue;
+ var dic = dicList[b];
+ var key = dic["key"].ToString();
+ if (key != "user_id")
+ {
+ continue;
+ }
+ var value = dic["value"].ToString();
+ if (!string.IsNullOrEmpty(value))
+ {
+ var list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>>(value);
+ for (int i = 0; i < list.Count; i++)
+ {
+
+ var FaceItem = this.GetFaceItem(list[i], device.deviceId);
+ userNameStr += FaceItem.userName;
+ userNameStr += ",";
+ tag += FaceItem.userId;
+ tag += "_";
+ }
+ }
}
- var userId = dic["value"].ToString();
- var FaceItem = this.GetFaceItem(userId, device.deviceId);
- s += FaceItem.userName;
- s += ",";
- tag += FaceItem.userId;
- tag += "_";
+ button2.Text = RemoveLastStr(userNameStr);
+ button2.Tag = tag;
}
- button2.Text = s;
- button2.Tag = tag;
+ catch { }
}
break;
case SPK.ElectricalTvHisense:
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/Logic.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/Logic.cs
index 807103c..89cd452 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/Logic.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/Logic.cs
@@ -109,7 +109,7 @@
/// <summary>
/// 妫�娴嬬被鍨� 閰嶅悎condition_type=3鏃朵娇鐢�,娌℃湁璇ュ瓧娈点�佽鍊兼垨0: 鐘舵�佹娴�(姣忔鏀跺埌鐘舵�佸氨鎴愮珛),1:鍔ㄤ綔妫�娴�(闇�瑕佸垏鎹㈢姸鎬佹墠鎴愮珛);
/// </summary>
- public string detect_type = "0";
+ public string detect_type = "1";
/// <summary>
/// 浜轰綋绉诲姩浼犳劅鍣紙甯︽寔缁椂闂达級
/// </summary>
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/TargetDeviceFunList.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/TargetDeviceFunList.cs
index 1bdd1b3..e8b86db 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Automation/TargetDeviceFunList.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/TargetDeviceFunList.cs
@@ -736,8 +736,13 @@
case SPK.AvMusic:
{
#region 鐣岄潰
+ ///寮�鍏�
+ LogicView.FunTypeView switchVie = new LogicView.FunTypeView();
+ switchVie.btnText.TextID = StringId.switchLogic;
+ fLayout.AddChidren(switchVie.FLayoutView());
//鎻愮ず璇煶
LogicView.FunTypeView funTypeView = new LogicView.FunTypeView();
+ funTypeView.frameLayout.Y = switchVie.frameLayout.Bottom;
funTypeView.btnText.TextID = StringId.tishiyin;
fLayout.AddChidren(funTypeView.FLayoutView());
///闊抽噺
@@ -757,6 +762,12 @@
DelayView(fLayout, volView.frameLayout.Bottom);
#endregion
#region 鐐瑰嚮浜嬩欢
+ ///寮�鍏崇偣鍑讳簨浠�
+ switchVie.btnClick.MouseUpEventHandler += (sender, e) =>
+ {
+
+ SwitchViewMethod(device, switchVie.btnState, 2);
+ };
///鎻愮ず璇煶鐐瑰嚮浜嬩欢
funTypeView.btnClick.MouseUpEventHandler += (sender, e) =>
{
@@ -820,7 +831,7 @@
if (edit)
{
//鏄剧ず缂栬緫涔嬪墠鐨勮澶囩姸鎬�
- GetEditDeviceState(device, index, funTypeView.btnState, volView.btnState, null, null);
+ GetEditDeviceState(device, index, switchVie.btnState, funTypeView.btnState, volView.btnState, null);
}
#endregion
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