using System; using System.Collections.Generic; using HDL_ON.Entity; namespace HDL_ON.DriverLayer { /// /// 通讯方式 /// public enum CommunicationMode { /// /// 本地udp /// local_BusUdp, /// /// 本地tcp服务端 /// tcp_local_server, /// /// 本地tcp客户端 /// tcp_local_client, } public class Control { static Control _control; public static Control ins { get { if (_control == null) { _control = new Control(); } return _control; } } /// /// 通讯地址IP /// public string reportIp = "255.255.255.255"; /// /// tcp服务端 /// public Control_TcpServer myTcpServer = null; /// /// tcp客服端 /// public Control_TcpClient myTcpClient = null; /// /// 本地udp /// public Control_Udp_Bus myUdp = null; /// /// 通讯方式 /// public CommunicationMode communicationMode; /// /// 改变通讯方式 /// 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; } } /// /// 场景控制入口 /// public void ControlScene(Scene scene) { if(myUdp!=null) { myUdp.ControlBusScenes(scene); } if(myTcpClient!= null) { ControlAProtocolScene(scene); } } /// /// 发送命令 /// 自动判断是否为A协议设备, /// 不是A协议,自动转化bus命令数据 /// /// /// /// public void SendWriteCommand(Function function, Dictionary 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); } } } /// /// 发送读取命令 /// 自动判断是否为A协议设备 /// 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); } } /// /// 控制a协议场景 /// /// static void ControlAProtocolScene(Scene scene) { var sendSidObj = new AProtocolSendingObject(); sendSidObj.time_stamp = ""; sendSidObj.type = "device_sid"; sendSidObj.command = "get_list_response"; } } }