New file |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using HDL_ON.Entity; |
| | | |
| | | namespace HDL_ON.DriverLayer |
| | | { |
| | | |
| | | /// <summary> |
| | | /// 通讯方式 |
| | | /// </summary> |
| | | public enum CommunicationMode |
| | | { |
| | | /// <summary> |
| | | /// 本地udp |
| | | /// </summary> |
| | | local_BusUdp, |
| | | /// <summary> |
| | | /// 本地tcp服务端 |
| | | /// </summary> |
| | | tcp_local_server, |
| | | /// <summary> |
| | | /// 本地tcp客户端 |
| | | /// </summary> |
| | | tcp_local_client, |
| | | } |
| | | |
| | | |
| | | |
| | | public class Control |
| | | { |
| | | static Control _control; |
| | | public static Control ins |
| | | { |
| | | get |
| | | { |
| | | if (_control == null) |
| | | { |
| | | _control = new Control(); |
| | | } |
| | | return _control; |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 通讯地址IP |
| | | /// </summary> |
| | | public string reportIp = "255.255.255.255"; |
| | | /// <summary> |
| | | /// tcp服务端 |
| | | /// </summary> |
| | | public Control_TcpServer myTcpServer = null; |
| | | /// <summary> |
| | | /// tcp客服端 |
| | | /// </summary> |
| | | public Control_TcpClient myTcpClient = null; |
| | | /// <summary> |
| | | /// 本地udp |
| | | /// </summary> |
| | | public Control_Udp_Bus myUdp = null; |
| | | |
| | | /// <summary> |
| | | /// 通讯方式 |
| | | /// </summary> |
| | | public CommunicationMode communicationMode; |
| | | |
| | | /// <summary> |
| | | /// 改变通讯方式 |
| | | /// </summary> |
| | | public void ChangeCommunicationMode(CommunicationMode communicationMode) |
| | | { |
| | | this.communicationMode = communicationMode; |
| | | |
| | | |
| | | switch (this.communicationMode) |
| | | { |
| | | case CommunicationMode.local_BusUdp: |
| | | if (myUdp == null) |
| | | { |
| | | myUdp = new Control_Udp_Bus(); |
| | | } |
| | | UdpSocket._BusSocket.Start(); |
| | | if (myTcpServer != null) |
| | | { |
| | | myTcpClient.Close(); |
| | | myTcpClient = null; |
| | | } |
| | | if (myTcpClient != null) |
| | | { |
| | | myTcpClient.Close(); |
| | | myTcpClient = null; |
| | | } |
| | | break; |
| | | case CommunicationMode.tcp_local_server: |
| | | if (myTcpServer == null) |
| | | { |
| | | myTcpServer = new Control_TcpServer(); |
| | | myTcpServer.OpenServer(); |
| | | } |
| | | if (myTcpClient != null) |
| | | { |
| | | myTcpClient.Close(); |
| | | myTcpClient = null; |
| | | } |
| | | if(myUdp != null) |
| | | { |
| | | UdpSocket._BusSocket.Stop(); |
| | | myUdp = null; |
| | | } |
| | | break; |
| | | case CommunicationMode.tcp_local_client: |
| | | if (myTcpClient == null) |
| | | { |
| | | myTcpClient = new Control_TcpClient(reportIp); |
| | | myTcpClient.Connect(); |
| | | } |
| | | if (myTcpServer != null) |
| | | { |
| | | myTcpClient.Close(); |
| | | myTcpClient = null; |
| | | } |
| | | if (myUdp != null) |
| | | { |
| | | UdpSocket._BusSocket.Stop(); |
| | | myUdp = null; |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 场景控制入口 |
| | | /// </summary> |
| | | public void ControlScene(Scene scene) |
| | | { |
| | | if(myUdp!=null) |
| | | { |
| | | myUdp.ControlBusScenes(scene); |
| | | } |
| | | if(myTcpClient!= null) |
| | | { |
| | | ControlAProtocolScene(scene); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 发送命令 |
| | | /// 自动判断是否为A协议设备, |
| | | /// 不是A协议,自动转化bus命令数据 |
| | | /// </summary> |
| | | /// <param name="commandString"></param> |
| | | /// <param name="function"></param> |
| | | /// <returns></returns> |
| | | public void SendWriteCommand(Function function, Dictionary<string, string> commandDictionary) |
| | | { |
| | | function.usageCount++; |
| | | function.refreshTime = DateTime.Now; |
| | | if (DB_ResidenceData.residenceData.GatewayType == 0) |
| | | { |
| | | try |
| | | { |
| | | if(myUdp != null) |
| | | { |
| | | myUdp.WriteBusData(function, commandDictionary); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MainPage.Log($"发送数据异常: {ex.Message}"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (myTcpClient != null) |
| | | { |
| | | var sendDataObj = function.GetControlSendData(commandDictionary); |
| | | var sendJson = Newtonsoft.Json.JsonConvert.SerializeObject(sendDataObj); |
| | | var sendBytes = System.Text.Encoding.UTF8.GetBytes(sendJson); |
| | | myTcpClient.SendMessage(sendBytes); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 发送读取命令 |
| | | /// 自动判断是否为A协议设备 |
| | | /// </summary> |
| | | public void SendReadCommand(Function function) |
| | | { |
| | | function.refreshTime = DateTime.Now; |
| | | if (function.bus_Data != null) |
| | | { |
| | | try |
| | | { |
| | | //ReadBusData(function); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MainPage.Log($"发送数据异常: {ex.Message}"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | //var commandObj = function.GetSendJObject(CommandType_A.read); |
| | | //var commandString = Newtonsoft.Json.JsonConvert.SerializeObject(commandObj); |
| | | //var commandBytes = System.Text.Encoding.UTF8.GetBytes(commandString); |
| | | //MqttCommon.MqttRemoteSend(commandBytes); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 控制a协议场景 |
| | | /// </summary> |
| | | /// <param name="scene"></param> |
| | | static void ControlAProtocolScene(Scene scene) |
| | | { |
| | | var sendSidObj = new AProtocolSendingObject(); |
| | | sendSidObj.time_stamp = ""; |
| | | sendSidObj.type = "device_sid"; |
| | | sendSidObj.command = "get_list_response"; |
| | | } |
| | | |
| | | } |
| | | } |