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