| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Net.Sockets; |
| | | using System.Text; |
| | | using HDL_ON.DAL; |
| | | using HDL_ON.DAL.Net; |
| | | using HDL_ON.Entity; |
| | | using Newtonsoft.Json; |
| | | using Newtonsoft.Json.Linq; |
| | | using Shared; |
| | | using Shared.Net; |
| | | |
| | |
| | | /// <summary> |
| | | /// 发送数据,不需要等待回复 |
| | | /// </summary> |
| | | static void ControlBytesSend(Command command, byte subnetID, byte deviceID, byte[] gatewayBytes, int sendCount = 3, System.Net.IPEndPoint ipEndpoint = null) |
| | | public static void ControlBytesSend(Command command, byte subnetID, byte deviceID, byte[] gatewayBytes, int sendCount = 3, System.Net.IPEndPoint ipEndpoint = null) |
| | | { |
| | | Control control = new Control(); |
| | | control.Send(new Target() |
| | |
| | | AddData = gatewayBytes, |
| | | }, sendCount, false); |
| | | MainPage.Log(command.ToString() + "::" + CommonPage.EndPoint.ToString()); |
| | | |
| | | } |
| | | |
| | | public static byte[] ReadGatewayIPAddress() |
| | | { |
| | | Control control = new Control(); |
| | | control.ReadGatewayIP(); |
| | | return control.UsefulBytes; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 000E 搜索回复 |
| | | /// </summary> |
| | |
| | | return; |
| | | } |
| | | |
| | | //if (!isHttpListenerStart) |
| | | //{ |
| | | // //数据接收端口没打开,不回复 |
| | | // return; |
| | | //} |
| | | |
| | | var sendStr = MainPage.LoginUser.accountString; |
| | | |
| | | |
| | | //如果IP地址获取成功 显示最后一位 |
| | | var mAddressBytes = new Shared.Net.NetWiFi().IpAddress.GetAddressBytes(); |
| | | if (mAddressBytes != null && mAddressBytes.Length == 4) |
| | | if (!CommonPage.isHttpListenerStart) |
| | | { |
| | | sendStr = (mAddressBytes[3] & 0xFF).ToString() + ":" + sendStr; |
| | | //数据接收端口没打开,不回复 |
| | | CommonPage.InitHttpListener(); |
| | | } |
| | | |
| | | if (usefullBytes.Length <= 2) |
| | | var sendStr = MainPage.LoginUser.accountString; |
| | | if (usefullBytes.Length == 0) |
| | | { |
| | | byte[] sendBytes = new byte[20]; |
| | | byte[] b1 = CommonPage.MyEncodingGB2312.GetBytes(sendStr); |
| | | Array.Copy(b1, 0, sendBytes, 0, 20 < b1.Length ? 20 : b1.Length); |
| | | Control.ControlBytesSend(Command.ReadRemarkACK, 0xFF, 0xFF, sendBytes, 1); |
| | | |
| | | SenRemark(sendStr); |
| | | } |
| | | else |
| | | { |
| | | bool isExit = false; |
| | | |
| | | for (int i = 2, len = usefullBytes.Length; i < len; i++) |
| | | for (int i = 0, len = usefullBytes.Length; i < len; i++) |
| | | { |
| | | if (i % 2 == 0) |
| | | { |
| | | if ((usefullBytes[i] & 0xFF) == 0xFC |
| | | && (usefullBytes[i + 1] & 0xFF) == 0xFC |
| | | ) |
| | | if ((usefullBytes[i] & 0xFF) == 252 |
| | | && (usefullBytes[i + 1] & 0xFF) == 252) |
| | | { |
| | | |
| | | byte[] sendBytes = new byte[20]; |
| | | byte[] b1 = CommonPage.MyEncodingGB2312.GetBytes(sendStr); |
| | | //Remote_GroupName = CommonPage.MyEncodingGB2312.GetString (b1); |
| | | Array.Copy(b1, 0, sendBytes, 0, 20 < b1.Length ? 20 : b1.Length); |
| | | Control.ControlBytesSend(Command.ReadRemarkACK, 0xFF, 0xFF, sendBytes, 1); |
| | | |
| | | isExit = true; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | if (!isExit) |
| | | { |
| | | //不存在,代表没收到本机的发送,继续回复 |
| | | SenRemark(sendStr); |
| | | } |
| | | |
| | | } |
| | |
| | | catch { } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 000F回复备注 |
| | | /// </summary> |
| | | /// <param name="sendStr"></param> |
| | | static void SenRemark(string sendStr) |
| | | { |
| | | byte[] sendBytes = new byte[20]; |
| | | byte[] b1 = CommonPage.MyEncodingGB2312.GetBytes(sendStr); |
| | | //Remote_GroupName = CommonPage.MyEncodingGB2312.GetString (b1); |
| | | Array.Copy(b1, 0, sendBytes, 0, 20 < b1.Length ? 20 : b1.Length); |
| | | |
| | | var control = new Control(); |
| | | control.Send(new Target() |
| | | { |
| | | IPEndPoint = CommonPage.EndPoint, |
| | | Command = Command.ReadRemarkACK, |
| | | SubnetID = 0xFF, |
| | | DeviceID = 0xFF, |
| | | AddData = sendBytes, |
| | | }, 0, false); //设置当前发送指令方式为:任何情况下本地发送、不限制、不加密明文发送 |
| | | } |
| | | /// <summary> |
| | | /// 处理接收回来的数据 |
| | | /// </summary> |
| | |
| | | /// <param name="remoteEndPoint">源网络套接字</param> |
| | | public static void ManagerReceive(byte subnetID, byte deviceID, Command command, byte targetSubnetID, byte targetDeviceID, byte[] usefulBytes, System.Net.EndPoint remoteEndPoint) |
| | | { |
| | | if (((System.Net.IPEndPoint)remoteEndPoint).Port == 6688) |
| | | { |
| | | |
| | | for (int i = 0; i < controlList.Count; i++) |
| | | { |
| | | try |
| | | { |
| | | var control = controlList[i]; |
| | | control.LatestDateTime = DateTime.Now; |
| | | control.UsefulBytes = usefulBytes;// |
| | | control.run(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Console.WriteLine($"control error : {ex.Message}"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | try |
| | | { |
| | | string receiveFlag = string.Format("{0},{1},{2},", subnetID, deviceID, (int)command); |
| | |
| | | break; |
| | | case Command.ReadRemark: |
| | | //buspro 读备注回复 |
| | | Console.WriteLine("buspro 读备注回复"); |
| | | ReceiveReadRemark(usefulBytes); |
| | | break; |
| | | //case Command.YIPanelDeviceInofACK: |
| | |
| | | control.run(); |
| | | } |
| | | } |
| | | catch |
| | | catch (Exception ex) |
| | | { |
| | | |
| | | Console.WriteLine($"control error : {ex.Message}"); |
| | | } |
| | | } |
| | | } |
| | |
| | | add(); |
| | | if (CommonPage.IsRemote) |
| | | { |
| | | MqttCommon.MqttRemoteSend(Packet.Bytes); |
| | | Packet.FlagDateTime = DateTime.Now; |
| | | Packet.HaveSendCount--; |
| | | //这里是重发两次 |
| | | while (Packet.HaveSendCount < 3) |
| | | { |
| | | if (Packet.FlagDateTime.AddMilliseconds(1000).Ticks <= System.DateTime.Now.Ticks) |
| | | { |
| | | MqttCommon.MqttRemoteSend(Packet.Bytes); |
| | | Packet.FlagDateTime = DateTime.Now; |
| | | Packet.HaveSendCount++; |
| | | } |
| | | System.Threading.Thread.Sleep(100); |
| | | }
allDone.Set();
} |
| | |
} |
| | | else |
| | | { |
| | | try |
| | |
| | | /// </summary> |
| | | Packet Packet; |
| | | |
| | | private void ini(Target target, bool send = true) |
| | | private void ini(Target target) |
| | | { |
| | | this.SendFlag = string.Format("{0},{1},{2},", target.SubnetID, target.DeviceID, (int)target.Command + 1); |
| | | |
| | |
| | | //return; |
| | | break; |
| | | } |
| | | if (send) |
| | | { |
| | | System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(managerSendCount)); |
| | | thread.IsBackground = true; |
| | | thread.Start(Packet); |
| | | } |
| | | |
| | | System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(managerSendCount)); |
| | | thread.IsBackground = true; |
| | | thread.Start(Packet); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | /// <param name="target">发送对象</param> |
| | | /// <param name="sendCount">重发次数</param> |
| | | public void Send(Target target, int sendCount, bool isWait) |
| | | void Send(Target target, int sendCount, bool isWait) |
| | | { |
| | | try |
| | | { |
| | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 读取网关IP |
| | | /// </summary> |
| | | void ReadGatewayIP() |
| | | { |
| | | try |
| | | { |
| | | var sendJob = new JObject { { "vendor_code", "HDL" }, { "command", "search" } }; |
| | | var SearchGateway = JsonConvert.SerializeObject(sendJob); |
| | | var SearchGatewayPayload = Encoding.ASCII.GetBytes(SearchGateway); |
| | | Packet = new Packet(SearchGatewayPayload, CommonPage.GetGatewayIP_EndPoint); |
| | | System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(managerSendCount)); |
| | | thread.IsBackground = true; |
| | | thread.Start(Packet); |
| | | |
| | | wait(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MainPage.Log($"Send bus data error {ex.Message}"); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | } |