From 23c075a9c27946773feccf05abc90489a6bf5203 Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期一, 06 七月 2020 15:58:53 +0800
Subject: [PATCH] 20200706
---
HDL_ON/DriverLayer/Control_Bus.cs | 259 +++++++++++++++++++++++++++++++++++++--------------
1 files changed, 186 insertions(+), 73 deletions(-)
diff --git a/HDL_ON/DriverLayer/Control_Bus.cs b/HDL_ON/DriverLayer/Control_Bus.cs
index 7ba3779..472b644 100644
--- a/HDL_ON/DriverLayer/Control_Bus.cs
+++ b/HDL_ON/DriverLayer/Control_Bus.cs
@@ -1,8 +1,14 @@
锘縰sing 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;
namespace HDL_ON
{
@@ -16,28 +22,9 @@
private static List<Control> controlList = new List<Control>(50);
/// <summary>
- /// 鍙戦�佹暟鎹紝绛夊緟鏈夊弽棣�
- /// </summary>
- /// <returns>The bytes send has return.</returns>
- static byte[] ControlBytesSendHasReturn(Command command, byte subnetID, byte deviceID, byte[] gatewayBytes, int sendCount = 3)
- {
- Control control = new Control();
- control.Send(new Target()
- {
- IPEndPoint = CommonPage.EndPoint,
- Command = command,
- SubnetID = subnetID,
- DeviceID = deviceID,
- AddData = gatewayBytes,
- }, sendCount, true);
-
- return control.UsefulBytes;
- }
-
- /// <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()
@@ -49,9 +36,90 @@
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>
+ /// <param name="usefullBytes"></param>
+ static void ReceiveReadRemark(byte[] usefullBytes)
+ {
+ try
+ {
+ //璐﹀彿娌$櫥褰曚笉鍥炲
+ if (MainPage.LoginUser == null || !MainPage.LoginUser.IsLogin)
+ {
+ return;
+ }
+
+
+ if (!CommonPage.isHttpListenerStart)
+ {
+ //鏁版嵁鎺ユ敹绔彛娌℃墦寮�锛屼笉鍥炲
+ CommonPage.InitHttpListener();
+ }
+ var sendStr = MainPage.LoginUser.accountString;
+ if (usefullBytes.Length == 0)
+ {
+ SenRemark(sendStr);
+ }
+ else
+ {
+ bool isExit = false;
+
+ for (int i = 0, len = usefullBytes.Length; i < len; i++)
+ {
+ if (i % 2 == 0)
+ {
+ if ((usefullBytes[i] & 0xFF) == 252
+ && (usefullBytes[i + 1] & 0xFF) == 252)
+ {
+ isExit = true;
+ break;
+ }
+ }
+ }
+
+ if (!isExit)
+ {
+ //涓嶅瓨鍦紝浠h〃娌℃敹鍒版湰鏈虹殑鍙戦�侊紝缁х画鍥炲
+ 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>
@@ -62,6 +130,25 @@
/// <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);
@@ -74,7 +161,18 @@
case Command.SetLogicLoopColorACK:
receiveFlag += string.Format("{0},{1},{2}", usefulBytes[0], usefulBytes[1], usefulBytes[2]);
break;
-
+ case Command.ReadLogicLoopColorACK:
+ case Command.ReadACModeACK:
+ case Command.SetACModeACK:
+ case Command.ReadFloorHeatACK:
+ case Command.SetFloorHeatACK:
+ receiveFlag += string.Format("{0}", usefulBytes[0]);
+ break;
+ case Command.ReadRemark:
+ //buspro 璇诲娉ㄥ洖澶�
+ Console.WriteLine("buspro 璇诲娉ㄥ洖澶�");
+ ReceiveReadRemark(usefulBytes);
+ break;
//case Command.YIPanelDeviceInofACK:
// for (int i = 0; i < 4; i++)
// {
@@ -132,8 +230,6 @@
// break;
//case Command.SetCommonACK:
//case Command.InfraredChannelControlACK:
- //case Command.ReadACModeACK:
- //case Command.SetACModeACK:
//case Command.Serverx_FH_CMD_ACK:
//case Command.ReadSensorHistoryACK:
//case Command.SetSensorAutomationTargetLevelEnableACK:
@@ -223,14 +319,14 @@
//case Command.Remote3thACK:
// receiveFlag = string.Format("{0},", (int)command);
// break;
- //case Command.ReadDeviceLoopInfoACK:
- // if (usefulBytes[0] == 1)
- // {
- // receiveFlag += string.Format("{0},{1}", usefulBytes[0], usefulBytes[2]); ;
- // }
- // else
- // receiveFlag += string.Format("{0},{1},{2}", usefulBytes[0], usefulBytes[1], usefulBytes[2]);
- // break;
+ case Command.ReadDeviceLoopInfoACK:
+ if (usefulBytes[0] == 1)
+ {
+ receiveFlag += string.Format("{0},{1}", usefulBytes[0], usefulBytes[2]); ;
+ }
+ else
+ receiveFlag += string.Format("{0},{1},{2}", usefulBytes[0], usefulBytes[1], usefulBytes[2]);
+ break;
//case Command.SetDeviceLoopInfoACK:
//case Command.InfraredControlACK:
//case Command.SetSecurityByPassACK:
@@ -254,7 +350,6 @@
//case Command.AssignedAddressACK:
//case Command.UpdataCurtainModelRunTimeACK:
//case Command.ReadCurtainStutasACK:
- //case Command.ReadLogicLoopColorACK:
//case Command.ReadPanleTempACK:
//case Command.FreshAirReadACK:
//case Command.FreshAirControlACK:
@@ -297,9 +392,9 @@
control.run();
}
}
- catch
+ catch (Exception ex)
{
-
+ Console.WriteLine($"control error : {ex.Message}");
}
}
}
@@ -404,20 +499,7 @@
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
@@ -453,13 +535,18 @@
/// </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);
switch (target.Command)
{
case Command.SetSingleLight:
+ case Command.ReadLogicLoopColor:
+ case Command.ReadACMode:
+ case Command.SetACMode:
+ case Command.ReadFloorHeat:
+ case Command.SetFloorHeat:
this.sendFlag += string.Format("{0}", target.AddData[0]);
break;
case Command.SetLogicLoopColor:
@@ -496,8 +583,6 @@
// break;
//case Command.SetCommonSwitch:
//case Command.InfraredChannelControl:
- //case Command.ReadACMode:
- //case Command.SetACMode:
//case Command.ReadFoolHeat:
//case Command.SetFoolHeat:
//case Command.Serverx_FH_CMD:
@@ -592,12 +677,12 @@
//case Command.Remote3th:
// this.SendFlag = string.Format("{0},", (int)target.Command + 1);
// break;
- //case Command.ReadDeviceLoopInfo:
- // if (target.AddData[0] == 1)//鐗规畩澶勭悊鐏厜绫伙紝DMX妯″潡姣忎竴涓洖璺笉鍥哄畾灏忕被锛屾牴鎹叿浣撹缃潵鍥炲
- // this.sendFlag += string.Format("{0},{1}", target.AddData[0], target.AddData[2]);
- // else
- // this.sendFlag += string.Format("{0},{1},{2}", target.AddData[0], target.AddData[1], target.AddData[2]);
- // break;
+ case Command.ReadDeviceLoopInfo:
+ if (target.AddData[0] == 1)//鐗规畩澶勭悊鐏厜绫伙紝DMX妯″潡姣忎竴涓洖璺笉鍥哄畾灏忕被锛屾牴鎹叿浣撹缃潵鍥炲
+ this.sendFlag += string.Format("{0},{1}", target.AddData[0], target.AddData[2]);
+ else
+ this.sendFlag += string.Format("{0},{1},{2}", target.AddData[0], target.AddData[1], target.AddData[2]);
+ break;
//case Command.SetDeviceLoopInfo:
//case Command.InfraredControl:
//case Command.SetSecurityByPass:
@@ -620,7 +705,6 @@
//case Command.AssignedAddress:
//case Command.UpdataCurtainModelRunTime:
//case Command.ReadCurtainStatus:
- //case Command.ReadLogicLoopColor:
//case Command.ReadPanleTemp:
//case Command.FreshAirRead:
//case Command.FreshAirControl:
@@ -650,12 +734,10 @@
//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>
@@ -663,18 +745,49 @@
/// </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)
{
- Packet = new Packet(target.SendBytes, target.IPEndPoint);
- Packet.HaveSendCount = 3 - sendCount;
-
- ini(target);
-
- if (isWait)
+ try
{
- this.wait();
+ Packet = new Packet(target.SendBytes, target.IPEndPoint);
+ Packet.HaveSendCount = 3 - sendCount;
+
+ ini(target);
+
+ if (isWait)
+ {
+ this.wait();
+ }
+ }
+ catch(Exception ex)
+ {
+ MainPage.Log($"Send bus data error {ex.Message}");
}
}
+ /// <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}");
+ }
+ }
+
+
}
}
--
Gitblit v1.8.0