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"; } } }