using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using Shared.SimpleControl;
|
|
namespace Shared
|
{
|
public class Control
|
{
|
public bool IsCanShowTip;
|
public System.DateTime LatestDateTime = System.DateTime.Now;
|
|
/// <summary>
|
/// 所有微信对一端口的控制都会放到这个集合里
|
/// </summary>
|
private static System.Collections.Generic.List<Control> controlList = new List<Control> (50);
|
|
/// <summary>
|
/// 发送数据,等待有反馈
|
/// </summary>
|
/// <returns>The bytes send has return.</returns>
|
public static byte [] ControlBytesSendHasReturn (Command command, byte subnetID, byte deviceID, byte [] gatewayBytes, bool isShow = true)
|
{
|
if (command == Command.ReadDeviceLoopInfo || command == Command.ReadDeviceModul)
|
CommonPage.LocalPhoneFindDevice = true;
|
if (command == Command.ReadGateway || command == Command.ReadGatewayProgrammingMode || command == Command.SetGateway) {
|
CommonPage.FindGateway = true;
|
CommonPage.LocalPhoneFindDevice = true;
|
}
|
Control control = new Control () { IsCanShowTip = isShow };
|
control.Send (new Target () {
|
IPEndPoint = CommonPage.EndPoint,
|
Command = command,
|
SubnetID = subnetID,
|
DeviceID = deviceID,
|
AddData = gatewayBytes,
|
}, SendCount.Three, true);
|
CommonPage.FindGateway = false;
|
|
return control.UsefulBytes;
|
}
|
|
/// <summary>
|
/// 发送数据,不需要等待回复
|
/// </summary>
|
public static void ControlBytesSend (Command command, byte subnetID, byte deviceID, byte [] gatewayBytes, SendCount sendCount = SendCount.Three, System.Net.IPEndPoint ipEndpoint = null, bool isShowTip = true)
|
{
|
if (command == Command.ReadDeviceLoopInfo || command == Command.ReadDeviceModul)
|
CommonPage.LocalPhoneFindDevice = true;
|
if (command == Command.ReadGateway || command == Command.ReadGatewayProgrammingMode
|
|| command == Command.SetGateway) {
|
CommonPage.FindGateway = true;
|
CommonPage.LocalPhoneFindDevice = true;
|
}
|
Control control = new Control () { IsCanShowTip = isShowTip };
|
control.Send (new Target () {
|
IPEndPoint = ipEndpoint == null ? CommonPage.EndPoint : ipEndpoint,//new System.Net.IPEndPoint (System.Net.IPAddress.Parse (new Net.NetWiFi ().BroadcastIpAddress.ToString ()), 6000),
|
Command = command,
|
SubnetID = subnetID,
|
DeviceID = deviceID,
|
AddData = gatewayBytes,
|
}, sendCount, false);
|
CommonPage.FindGateway = false;
|
System.Console.WriteLine (command.ToString () + "::" + CommonPage.EndPoint.ToString ());
|
}
|
|
/// <summary>
|
/// 处理接收回来的数据
|
/// </summary>
|
/// <param name="subnetID">源子网号</param>
|
/// <param name="deviceID">源设备号</param>
|
/// <param name="command">操作码</param>
|
/// <param name="usefulBytes">有用的数据</param>
|
/// <param name="remoteEndPoint">源网络套接字</param>
|
public static void ManagerReceive (byte subnetID, byte deviceID, Command command, byte targetSubnetID, byte targetDeviceID, byte [] usefulBytes, System.Net.EndPoint remoteEndPoint)
|
{
|
try {
|
string receiveFlag = string.Format ("{0},{1},{2},", subnetID, deviceID, (int)command);
|
|
switch ((Command)command) {
|
case Command.ReadDoorLockSceneObjACK:
|
receiveFlag += string.Format ("{0},{1},{2},{3},{4}", usefulBytes [0], usefulBytes [1], usefulBytes [2], usefulBytes [3], usefulBytes [4]);
|
break;
|
case Command.ReadDoorLockClockACK:
|
case Command.CreatConnectionACK:
|
receiveFlag += string.Format ("{0}", usefulBytes [0]);
|
break;
|
//门锁,BroadcastDoorLockStateAndAlarm
|
//广播门锁状态和报警,
|
case Command.BroadcastDoorLockStateAndAlarm://广播门锁状态和报警
|
receiveFlag += string.Format ("{0},{1}", usefulBytes [0], usefulBytes [1]);
|
break;
|
case Command.ReadDoorLockUseRemarkACK:
|
case Command.ReadSensorPushMessageACK:
|
case Command.SetSensorPushMessageACK:
|
case Command.ReadSensorScenceACK:
|
receiveFlag += string.Format ("{0},{1},{2}", usefulBytes [0], usefulBytes [1], usefulBytes [2]);
|
break;
|
case Command.SetSensorScenceACK:
|
receiveFlag += string.Format ("{0},{1},{2}", usefulBytes [1], usefulBytes [2], usefulBytes [3]);
|
break;
|
case Command.SendRemoteInfoToServerACK:
|
for (int i = 1; i < 9; i++) {
|
receiveFlag += string.Format ("{0}", usefulBytes [i]);
|
}
|
break;
|
case Command.BroadcastDryContactStatus://由干接点广播出来的数据,程序不做回复。
|
receiveFlag += string.Format ("{0}", usefulBytes [0]);
|
break;
|
case Command.SetSceneACK:
|
receiveFlag += string.Format ("{0},{1}", usefulBytes [0], usefulBytes [1]);
|
break;
|
case Command.SetSeriesACK:
|
receiveFlag += string.Format ("{0},{1}", usefulBytes [0], usefulBytes [1]);
|
break;
|
case Command.UpdataCurtainModelStutasACK:
|
case Command.SetHotelCurtainACK:
|
case Command.DownloadInfraredACK:
|
case Command.SetSensorPushValuesACK:
|
case Command.ReadSensorPushValuesACK:
|
receiveFlag += string.Format ("{0},{1}", usefulBytes [0], usefulBytes [1]);
|
break;
|
case Command.ReadLightEquipmentAllLoopBrightnessACK:
|
break;
|
case Command.SetSingleLightACK:
|
receiveFlag += string.Format ("{0},{1}", usefulBytes [0], usefulBytes [2]);
|
break;
|
case Command.UpLoadInfraredACK:
|
receiveFlag += string.Format ("{0},{1}", usefulBytes [0], usefulBytes [1]);
|
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:
|
case Command.ReadSensorAutomationLevelTargetEnableACK:
|
receiveFlag += string.Format ("{0}", usefulBytes [0]);
|
break;
|
case Command.ReadFoolHeatACK:
|
case Command.SetFoolHeatACK:
|
case Command.SetArmACK:
|
case Command.ReadArmACK:
|
receiveFlag += string.Format ("{0}", usefulBytes [0]);
|
break;
|
case Command.ReadDeviceModulACK:
|
case Command.ReadGatewayACK:
|
case Command.ReadSecurityStatusACK:
|
receiveFlag = string.Format ("{0},{1}", usefulBytes [0], usefulBytes [1]);
|
break;
|
case Command.UpdataLightDimmingTheLargestLevelACK:
|
case Command.UpdataLightDimmingMaximumOrMinimumACK:
|
case Command.WriteManageWirelessNetACK:
|
case Command.ReadGateWayModelInfoACK:
|
case Command.ReadGatewayServerIPACK:
|
case Command.SetGateWayModelInfoACK:
|
case Command.SetGateWayModelInternetInfoACK:
|
case Command.ReadDeviceMacACK:
|
case Command.SetDeviceSubnetIDACK:
|
case Command.PositioningEquipmentACK:
|
case Command.PositioningPanelACK:
|
case Command.GotoConfigModeACK:
|
case Command.CheckConfigSuccessACK:
|
case Command.SetACPanelACK:
|
case Command.ReadACPanelACK:
|
case Command.ReadTerrestriaHeatRemarkACK:
|
case Command.UpdateGatewayIpACK:
|
case Command.ReadWirelessPanelModeACK:
|
case Command.ReadDrycontactModeACK:
|
case Command.ReadACFloorHeatingSettingEquipmentACK:
|
case Command.SetACFloorHeatingSettingEquipmentACK:
|
case Command.Read43FloorHeatingSettingEquipmentACK:
|
case Command.Set43FloorHeatingSettingEquipmentACK:
|
case Command.READ_AIR_ALL_Parameter_ack:
|
case Command.Set_AIR_ALL_Parameter_ack:
|
case Command.ReadFloorHeatProbeACK:
|
case Command.ReadButtonKeyEnableACK:
|
case Command.UpdateDeviceLoopRemakeACK:
|
case Command.ReadMusicPanelSettingACK:
|
case Command.ReadMusicPanelEnableACK:
|
case Command.SetMusicPanelEnableACK:
|
case Command.SetMusicPanelSettingACK:
|
case Command.SetGatewayACK:
|
case Command.ReadGatewayProgrammingModeACK:
|
case Command.RED_HSFH_TOTAL_ACK:
|
case Command.RED_HSFH_INFORMATION_ACK:
|
case Command.RED_HSRM_TOTAL_ACK:
|
case Command.RED_HSRM_INFORMATION_ACK:
|
case Command.CLEAR_SYSTEM_HISTORY_ACK:
|
case Command.SetSensorTargetRemarkACK:
|
case Command.ReadSensorAutomationEnableListACK:
|
case Command.SetSensorAutomationEnableListACK:
|
case Command.SetSensorAutomationListIDACK:
|
case Command.ReadSensorAutomationListIDACK:
|
case Command.ReadSensorAutomationNameACK:
|
case Command.SetSensorAutomationNameACK:
|
case Command.Read_APP_Data_STORE_1D5D_ACK:
|
case Command.Write_APP_Data_STORE_1D5F_ACK:
|
case Command.DelDeviceACK:
|
case Command.Write_DeviceRamarkACK:
|
case Command.SET_JOG_OPEN_TIME_ACK:
|
case Command.READ_JOG_OPEN_TIME_ACK:
|
case Command.SET_JOG_CLOSE_TIME_ACK:
|
case Command.READ_JOG_CLOSE_TIME_ACK:
|
receiveFlag += "";
|
break;
|
case Command.ControlMusicModel1ACK:
|
receiveFlag += "";
|
break;
|
case Command.ControlMusicModel2ACK:
|
for (int i = 1; i < usefulBytes.Length; i++) {
|
if (usefulBytes [i + 1] == 44) {
|
break;
|
}
|
receiveFlag += string.Format ("{0},", usefulBytes [i]);
|
}
|
break;
|
|
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.SetDeviceLoopInfoACK:
|
case Command.InfraredControlACK:
|
case Command.SetLogicLoopColorACK:
|
case Command.SetSecurityByPassACK:
|
case Command.SetSensorAutomationDateTimeCycleACK:
|
case Command.ReadSensorAutomationDateTimeCycleACK:
|
receiveFlag += string.Format ("{0},{1},{2}", usefulBytes [0], usefulBytes [1], usefulBytes [2]);
|
break;
|
case Command.UpdataRemakeACK:
|
break;
|
case Command.ReadWirelessPanelButtonKeyACK:
|
case Command.WriteWirelessPanelButtonKeyACK:
|
case Command.ReadDryContactStatusACK:
|
case Command.InstructionPanelKeyACK:
|
case Command.ReadInstructionPanelKeyACK:
|
case Command.ReadAnalogValueACK:
|
case Command.ReadSensorTargetRemarkACK:
|
receiveFlag += string.Format ("{0},{1}", usefulBytes [0], usefulBytes [1]);
|
break;
|
case Command.AssignedAddressACK:
|
case Command.UpdataCurtainModelRunTimeACK:
|
case Command.ReadCurtainStutasACK:
|
case Command.ReadLogicLoopColorACK:
|
case Command.ReadPanleTempACK:
|
case Command.FreshAirReadACK:
|
case Command.FreshAirControlACK:
|
receiveFlag += string.Format ("{0}", usefulBytes [0]);
|
break;
|
case Command.RemoteFirstACK:
|
for (int i = 1; i < 1 + 28; i++) {
|
receiveFlag += string.Format ("{0}", usefulBytes [i]);
|
}
|
break;
|
case Command.RemoteSecoudACK:
|
for (int i = 0; i < 7; i++) {
|
receiveFlag += string.Format ("{0}", usefulBytes [i]);
|
}
|
break;
|
case Command.Read_DeviceRamark_1DE3_ACK:
|
receiveFlag += string.Format ("{0},{1},{2},{3},{4},{5},{6},{7}", usefulBytes [0], usefulBytes [1], usefulBytes [2], usefulBytes [3], usefulBytes [4], usefulBytes [5], usefulBytes [6], usefulBytes [7]);
|
break;
|
default:
|
break;
|
}
|
//System.Console.WriteLine ("接收到数据:" + receiveFlag);
|
|
for (int i = 0; i < controlList.Count; i++) {
|
try {
|
Control control = controlList [i];
|
if (control.SendFlag == receiveFlag) {
|
control.LatestDateTime = System.DateTime.Now;
|
control.UsefulBytes = usefulBytes;//
|
control.run ();
|
}
|
} catch {
|
|
}
|
}
|
} catch (Exception ex) {
|
Console.WriteLine ("ManagerReceive抛出异常:" + ex.ToString ());
|
}
|
}
|
|
/// <summary>
|
/// 添加到内存数组里面
|
/// </summary>
|
void add ()
|
{
|
/// <summary>
|
/// 达到50条数据后就清理一下
|
/// </summary>
|
if (50 < controlList.Count) {
|
lock (controlList) {
|
for (int i = 0; i < controlList.Count;) {
|
if (controlList [i] == null || 3 <= controlList [i].Packet.HaveSendCount) {
|
controlList.RemoveAt (i);
|
} else {
|
i++;
|
}
|
}
|
|
}
|
//System.Console.WriteLine ("++++++++"+controlList.Count.ToString ());
|
}
|
controlList.Add (this);
|
}
|
|
//当前数据的关键数据
|
string sendFlag = string.Empty;
|
protected string SendFlag {
|
get {
|
return sendFlag;
|
}
|
set {
|
sendFlag = value;
|
usefulBytes = null;
|
}
|
}
|
|
private byte [] usefulBytes;
|
/// <summary>
|
/// 获取回来的有用信息,如果获取回来的数据为null,就会抛出异常信息
|
/// </summary>
|
public byte [] UsefulBytes {
|
get {
|
if (null == usefulBytes) {
|
// throw new Exception("不好意思,网络不稳定或者远程设备不在线,请稍候再试!");
|
}
|
|
return this.usefulBytes;
|
}
|
set {
|
usefulBytes = value;
|
}
|
}
|
|
//发送数据了之后当前线程等待或者运行的信号
|
System.Threading.ManualResetEvent allDone = new System.Threading.ManualResetEvent (false);
|
|
/// <summary>
|
/// 发送了数据后,线程就是等待状态,直到接收到反馈或者超时后退出
|
/// </summary>
|
void wait ()
|
{
|
allDone.Reset ();
|
allDone.WaitOne ();
|
}
|
|
|
/// <summary>
|
/// 让当前线程继续执行
|
/// </summary>
|
void run ()
|
{
|
allDone.Set ();
|
Packet.HaveSendCount = 4;
|
|
}
|
|
|
//数据重发处理
|
void managerSendCount (object o)
|
{
|
add ();
|
try {
|
System.Console.WriteLine ("发送数据:" + SendFlag);
|
BusSocket.AsyncBeginSend (Packet);
|
Packet.HaveSendCount--;
|
|
//这里是重发两次
|
while (Packet.HaveSendCount < 3) {
|
if (Packet.FlagDateTime.AddMilliseconds (1000).Ticks <= System.DateTime.Now.Ticks) {
|
//System.Console.WriteLine ("重发数据:" + SendFlag);
|
BusSocket.AsyncBeginSend (Packet);
|
}
|
System.Threading.Thread.Sleep (100);
|
}
|
|
} catch (Exception ex) {
|
Console.WriteLine ("managerSendCount:" + ex.ToString ());
|
} finally {
|
allDone.Set ();
|
if (Packet.HaveSendCount == 3 && IsCanShowTip) {
|
//MainPage.AddTip (Language.StringByID (SimpleControl.R.MyInternationalizationString.OperationFailed));
|
}
|
}
|
return;
|
//if (Shared.SimpleControl.CommonPage.IsRemote && !isLocal) {
|
// System.Console.WriteLine ("远程发送数据:" + SendFlag);
|
// SmartHome.MqttCommon.MqttRemoteSend (Packet.Bytes);
|
// Packet.FlagDateTime = DateTime.Now;
|
// Packet.HaveSendCount--;
|
// //这里是重发两次
|
// while (Packet.HaveSendCount < 3) {
|
// if (Packet.FlagDateTime.AddMilliseconds (1000).Ticks <= System.DateTime.Now.Ticks) {
|
// SmartHome.MqttCommon.MqttRemoteSend (Packet.Bytes);
|
// System.Console.WriteLine ("重发远程发送数据:" + SendFlag);
|
// Packet.FlagDateTime = DateTime.Now;
|
// Packet.HaveSendCount++;
|
// }
|
// System.Threading.Thread.Sleep (100);
|
// }
// allDone.Set ();
//} else {
|
// try {
|
// System.Console.WriteLine ("发送数据:" + SendFlag);
|
// BusSocket.AsyncBeginSend (Packet);
|
// Packet.HaveSendCount--;
|
|
// //这里是重发两次
|
// while (Packet.HaveSendCount < 3) {
|
// if (Packet.FlagDateTime.AddMilliseconds (1000).Ticks <= System.DateTime.Now.Ticks) {
|
// System.Console.WriteLine ("重发数据:" + SendFlag);
|
// BusSocket.AsyncBeginSend (Packet);
|
// }
|
// System.Threading.Thread.Sleep (100);
|
// }
|
|
// } catch (Exception ex) {
|
// Console.WriteLine ("managerSendCount:" + ex.ToString ());
|
// } finally {
|
// allDone.Set ();
|
// }
|
//}
|
}
|
/// <summary>
|
/// 当前数据包
|
/// </summary>
|
Packet Packet;
|
|
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.ReadDoorLockSceneObj:
|
this.SendFlag += string.Format ("{0},{1},{2},{3},{4}", target.AddData [0], target.AddData [1], target.AddData [2], target.AddData [3], target.AddData [4]);
|
break;
|
case Command.ReadDoorLockClock:
|
case Command.CreatConnection:
|
this.SendFlag += string.Format ("{0}", target.AddData [0]);
|
break;
|
case Command.ReadDoorLockUseRemark:
|
case Command.ReadSensorPushMessage:
|
case Command.SetSensorPushMessage:
|
case Command.SetSensorScence:
|
this.sendFlag += string.Format ("{0},{1},{2}", target.AddData [0], target.AddData [1], target.AddData [2]);
|
break;
|
case Command.ReadSensorScence:
|
this.sendFlag += string.Format ("{0},{1},{2}", target.AddData [0], target.AddData [1], target.AddData [2]);
|
break;
|
case Command.SendRemoteInfoToServer:
|
for (int i = 40; i < 48; i++) {
|
this.sendFlag += string.Format ("{0}", target.AddData [i]);
|
}
|
break;
|
case Command.SetCommonSwitch:
|
case Command.InfraredChannelControl:
|
case Command.ReadACMode:
|
case Command.SetACMode:
|
case Command.ReadFoolHeat:
|
case Command.SetFoolHeat:
|
case Command.Serverx_FH_CMD:
|
case Command.SetArm:
|
case Command.ReadArm:
|
case Command.ReadSensorHistory:
|
case Command.SetSensorAutomationTargetLevelEnable:
|
case Command.ReadSensorAutomationLevelTargetEnable:
|
this.SendFlag += string.Format ("{0}", target.AddData [0]);
|
break;
|
case Command.ReadDeviceModul:
|
case Command.ReadGateway:
|
case Command.ReadSecurityStatus:
|
this.SendFlag = string.Format ("{0},{1}", target.AddData [0], target.AddData [1]);
|
break;
|
case Command.SetScene:
|
case Command.SetSeries:
|
case Command.SetHotelCurtain:
|
case Command.ReadAnalogValue:
|
case Command.SetSensorPushValues:
|
case Command.ReadSensorPushValues:
|
this.SendFlag += string.Format ("{0},{1}", target.AddData [0], target.AddData [1]);
|
break;
|
//case Command.ReadOnePortWirelessFROtherInfo:
|
case Command.UpdataRemake:
|
case Command.WriteManageWirelessNet:
|
case Command.UpdataLightDimmingTheLargestLevel:
|
case Command.UpdataLightDimmingMaximumOrMinimum:
|
case Command.ReadGateWayModelInfo:
|
case Command.ReadGatewayServerIP:
|
case Command.SetGateWayModelInfo:
|
case Command.SetGateWayModelInternetInfo:
|
case Command.ReadDeviceMac:
|
case Command.SetDeviceSubnetID:
|
case Command.PositioningEquipment:
|
case Command.PositioningPanel:
|
case Command.CheckConfigSuccess:
|
case Command.GotoConfigMode:
|
case Command.ReadACPanel:
|
case Command.SetACPanel:
|
case Command.ReadTerrestriaHeatRemark:
|
case Command.UpdateGatewayIp:
|
case Command.ReadWirelessPanelMode:
|
case Command.ReadDrycontactMode:
|
case Command.ReadACFloorHeatingSettingEquipment:
|
case Command.SetACFloorHeatingSettingEquipment:
|
case Command.Read43FloorHeatingSettingEquipment:
|
case Command.Set43FloorHeatingSettingEquipment:
|
case Command.READ_AIR_ALL_Parameter:
|
case Command.Set_AIR_ALL_Parameter:
|
case Command.ReadFloorHeatProbe:
|
case Command.ControlMusicModel:
|
case Command.ReadButtonKeyEnable:
|
case Command.UpdateDeviceLoopRemake:
|
case Command.SetGateway:
|
case Command.ReadMusicPanelSetting:
|
case Command.ReadMusicPanelEnable:
|
case Command.SetMusicPanelEnable:
|
case Command.SetMusicPanelSetting:
|
case Command.ReadGatewayProgrammingMode:
|
case Command.RED_HSFH_TOTAL:
|
case Command.RED_HSFH_INFORMATION:
|
case Command.RED_HSRM_TOTAL:
|
case Command.RED_HSRM_INFORMATION:
|
case Command.CLEAR_SYSTEM_HISTORY:
|
case Command.SetSensorTargetRemark:
|
case Command.ReadSensorAutomationEnableList:
|
case Command.SetSensorAutomationEnableList:
|
case Command.SetSensorAutomationListID:
|
case Command.ReadSensorAutomationListID:
|
case Command.SetSensorAutomationName:
|
case Command.ReadSensorAutomationName:
|
case Command.Read_APP_Data_STORE_1D5C_CMD:
|
case Command.Write_APP_Data_STORE_1D5E_CMD:
|
case Command.DelDeviceCMD:
|
case Command.Write_DeviceRamarkCMD:
|
case Command.SET_JOG_OPEN_TIME_CMD:
|
case Command.READ_JOG_OPEN_TIME_CMD:
|
case Command.SET_JOG_CLOSE_TIME_CMD:
|
case Command.READ_JOG_CLOSE_TIME_CMD:
|
this.SendFlag += "";
|
break;
|
case Command.ControlMusicModel2:
|
for (int i = 1; i < target.AddData.Length; i++) {
|
if (target.AddData [i + 1] == 0x0D) {
|
break;
|
}
|
this.sendFlag += string.Format ("{0},", target.AddData [i]);
|
}
|
break;
|
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.SetDeviceLoopInfo:
|
case Command.InfraredControl:
|
case Command.SetLogicLoopColor:
|
case Command.SetSecurityByPass:
|
case Command.SetSensorAutomationDateTimeCycle:
|
case Command.ReadSensorAutomationDateTimeCycle:
|
this.sendFlag += string.Format ("{0},{1},{2}", target.AddData [0], target.AddData [1], target.AddData [2]);
|
break;
|
case Command.ReadWirelessPanelButtonKey:
|
case Command.WriteWirelessPanelButtonKey:
|
case Command.ReadDryContactStatus:
|
case Command.UpdataCurtainModelStutas:
|
case Command.SetSingleLight:
|
case Command.DownloadInfrared:
|
case Command.UpLoadInfrared:
|
case Command.InstructionPanelKey:
|
case Command.ReadInstructionPanelKey:
|
case Command.ReadSensorTargetRemark:
|
this.sendFlag += string.Format ("{0},{1}", target.AddData [0], target.AddData [1]);
|
break;
|
case Command.AssignedAddress:
|
case Command.UpdataCurtainModelRunTime:
|
case Command.ReadCurtainStatus:
|
case Command.ReadLogicLoopColor:
|
case Command.ReadPanleTemp:
|
case Command.FreshAirRead:
|
case Command.FreshAirControl:
|
this.sendFlag += string.Format ("{0}", target.AddData [0]);
|
break;
|
case Command.RemoteFirst:
|
for (int i = 0; i < 28; i++) {
|
this.sendFlag += string.Format ("{0}", target.AddData [i]);
|
}
|
break;
|
case Command.RemoteSecoud:
|
for (int i = 0; i < 7; i++) {
|
this.sendFlag += string.Format ("{0}", target.AddData [i]);
|
}
|
break;
|
case Command.Read_DeviceRamark_1DE2_CMD:
|
sendFlag += string.Format ("{0},{1},{2},{3},{4},{5},{6},{7}", target.AddData [0], target.AddData [1], target.AddData [2], target.AddData [3], target.AddData [4], target.AddData [5], target.AddData [6], target.AddData [7]);
|
break;
|
default:
|
//return;
|
break;
|
}
|
|
System.Threading.Thread thread = new System.Threading.Thread (new System.Threading.ParameterizedThreadStart (managerSendCount));
|
thread.IsBackground = true;
|
thread.Start (Packet);
|
}
|
|
/// <summary>
|
/// 发送Bus数据,发送了不需要等待
|
/// </summary>
|
/// <param name="target">发送对象</param>
|
/// <param name="sendCount">重发次数</param>
|
public void Send (Target target, SendCount sendCount, bool isWait, bool needLocal = false)
|
{
|
isLocal = needLocal;
|
Packet = new Packet (target.SendBytes, target.IPEndPoint);
|
Packet.HaveSendCount = 3 - (int)sendCount;
|
|
ini (target);
|
|
if (isWait) {
|
this.wait ();
|
}
|
}
|
bool isLocal = false;
|
}
|
}
|