using System;
using System.Collections.Generic;
using System.Text;
using Newtonsoft.Json.Linq;
using Shared.IO;
using Shared.Net;
using Shared.SimpleControl.Phone;
namespace Shared.SimpleControl
{
public static class CommonPage
{
public static bool IsRemote;
public static Action RefreshAir;
public static bool FindGateway = false;
public static bool FindGatewayChilren = false;
public static string FindGatewayChilrenIPAddress = new Net.NetWiFi ().BroadcastIpAddress.ToString ();
public static bool LocalPhoneFindDevice = false;
private static string ip = "0.0.0.0";
public static System.Net.IPEndPoint EndPoint {
get {
try {
if (FindGateway) {
return new System.Net.IPEndPoint (System.Net.IPAddress.Parse (new Net.NetWiFi ().BroadcastIpAddress.ToString ()), 6000);
//return new System.Net.IPEndPoint (System.Net.IPAddress.Parse ("224.0.168.188"), 6000);
} else if (FindGatewayChilren) {
try {
return new System.Net.IPEndPoint (System.Net.IPAddress.Parse (FindGatewayChilrenIPAddress), 6000);
} catch {
return new System.Net.IPEndPoint (System.Net.IPAddress.Parse ("224.0.168.188"), 6000);
}
} else {
return new System.Net.IPEndPoint (System.Net.IPAddress.Parse (new Net.NetWiFi ().BroadcastIpAddress.ToString ()), 6000);
}
} catch {
//防止异常导致程序退出
return new System.Net.IPEndPoint (System.Net.IPAddress.Parse ("127.0.0.1"), 6000);
}
}
}
///保存设备备注才用gb2312,其他情况用utf8
public static Encoding MyEncodingUTF8 = Encoding.UTF8;//Get
public static Encoding MyEncodingGB2312 {
get {
try {
if (System.Globalization.CultureInfo.InstalledUICulture.EnglishName.ToUpper().StartsWith("CZECH")) {
return System.Text.Encoding.GetEncoding (1250);
} else {
return Encoding.GetEncoding ("gb2312");
}
}catch (Exception ex) {
Console.WriteLine ("MyEncodingGB2312 Erorr : "+ex.Message);
return Encoding.GetEncoding ("gb2312");
}
}
}
static bool isHttpListenerStart;
public static DateTime dt;
//public static byte currentSubnetID = 0;
public static void InitHttpListener ()
{
if (isHttpListenerStart) {
return;
}
HttpListener.Start (new NetWiFi ().IpAddress, 6001);
HttpListener.EventHandler -= httpListener_EventHandler;
HttpListener.EventHandler += httpListener_EventHandler;
isHttpListenerStart = true;
}
public static void CloseHttpListener ()
{
//isHttpListenerStart = false;
//return;
if (!isHttpListenerStart)
return;
HttpListener.Close ();
isHttpListenerStart = false;
}
///
/// 初始化处理socket接收的数据
///
public static void InitReceiveEvent ()
{
Packet.ReceiveEvent += Packet_ReceiveEvent;
}
public static float floatChange (byte b1, byte b2, byte b3, byte b4)
{
byte [] byteTemp = new byte [4] { b4, b3, b2, b1 };
return BitConverter.ToSingle (byteTemp, 0);
}
static void Packet_ReceiveEvent (byte subnetID, byte deviceID, Command command, byte [] usefullBytes, string revGatewayIP)
{
try {
List ButtonBkeyModelList = new List ();
switch (command) {
case Command.FreshAirReadACK:
case Command.FreshAirControlACK:
foreach (var room in Room.Lists) {
var common = room.DeviceList.Find ((obj) => obj.SubnetID == subnetID && obj.DeviceID == deviceID && obj.LoopID == usefullBytes [0] && obj.Type == DeviceType.FreshAir);
if (common != null) {
var fresAirReceive = common as FreshAir;
fresAirReceive.SwitchStatus = usefullBytes [1];
fresAirReceive.WindSpeed = usefullBytes [2];
fresAirReceive.SetPattern = usefullBytes [3];
fresAirReceive.EnableValue1 = usefullBytes [4];
fresAirReceive.EnableValue2 = usefullBytes [5];
if (usefullBytes.Length > 6) {
fresAirReceive.InTemp = floatChange (usefullBytes [6], usefullBytes [7], usefullBytes [8], usefullBytes [9]);
fresAirReceive.OutTemp = floatChange (usefullBytes [10], usefullBytes [11], usefullBytes [12], usefullBytes [13]);
fresAirReceive.Humidity = floatChange (usefullBytes [14], usefullBytes [15], usefullBytes [16], usefullBytes [17]);
fresAirReceive.PM25 = floatChange (usefullBytes [18], usefullBytes [19], usefullBytes [20], usefullBytes [21]);
fresAirReceive.TVOC = floatChange (usefullBytes [22], usefullBytes [23], usefullBytes [24], usefullBytes [25]);
fresAirReceive.CO2 = floatChange (usefullBytes [26], usefullBytes [27], usefullBytes [28], usefullBytes [29]);
}
IO.FileUtils.SaveEquipmentMessage (fresAirReceive, fresAirReceive.LoopID.ToString ());
UserFresAirList.UpdateStatus (fresAirReceive);
UserRoom.UpdataDeviceStatus (fresAirReceive);
UserFreshAirPage.UpdateStatus (fresAirReceive);
}
}
break;
case Command.SetArmACK:
case Command.ReadArmACK:
if (Application.IsPad) { } else {
SecurityModul sm = new SecurityModul () {
SubnetID = subnetID,
DeviceID = subnetID,
LoopID = usefullBytes [0],
AreaType = usefullBytes [1],
};
UserSecurityAreaPage.UpdateStatus (sm);
}
break;
case Command.ReadLightEquipmentAllLoopBrightnessACK://18145611909
for (byte i = 1; i <= usefullBytes [0]; i++) {
bool updateLightStatus = true;
foreach (var room in Room.Lists) {
Common common = null;
var commons = room.DeviceList.FindAll ((obj) => obj.SubnetID == subnetID && obj.DeviceID == deviceID);
if (commons.Count > 0) {
foreach (var c in commons) {
if (c.Type == DeviceType.LightMixDimming) {
var rcuDimming = (c as LightMixDimming);
if (rcuDimming.SubnetID == subnetID && rcuDimming.DeviceID == deviceID && rcuDimming.PhysicsLoopID == i) {
if (rcuDimming.CurrentBrightness == usefullBytes [i]) {
updateLightStatus = false;
}
rcuDimming.CurrentBrightness = usefullBytes [i];
common = rcuDimming;
}
}
if (c.Type == DeviceType.LightMixSwitch) {
var rcuSwitch = (c as LightMixSwitch);
if (rcuSwitch.SubnetID == subnetID && rcuSwitch.DeviceID == deviceID && rcuSwitch.PhysicsLoopID == i) {
if (rcuSwitch.CurrentBrightness == usefullBytes [i]) {
updateLightStatus = false;
}
rcuSwitch.CurrentBrightness = usefullBytes [i];
common = rcuSwitch;
}
}
}
}
if (common == null)
common = room.DeviceList.Find ((obj) => obj.SubnetID == subnetID && obj.DeviceID == deviceID && obj.LoopID == i);
if (common != null) {
//foreach (var common in room.DeviceList) {
//if (common.SubnetID != subnetID || common.DeviceID != deviceID || common.LoopID != i) {
// continue;
//}
common.LastUpdateTime = DateTime.Now;
if (common.Type == DeviceType.LightSwitch || common.Type == DeviceType.LightSwitchSocket || common.Type == DeviceType.LightEnergySwitch) {
if ((common as LightSwitch).CurrentBrightness == usefullBytes [i]) {
updateLightStatus = false;
}
(common as LightSwitch).CurrentBrightness = usefullBytes [i];
} else if (common.Type == DeviceType.LightDimming) {
if ((common as LightDimming).CurrentBrightness == usefullBytes [i]) {
updateLightStatus = false;
}
(common as LightDimming).CurrentBrightness = usefullBytes [i];
} else if (common.Type == DeviceType.FanModule) {
if ((common as FanModule).Switch == usefullBytes [i]) {
updateLightStatus = false;
}
(common as FanModule).Switch = usefullBytes [i];
if (usefullBytes [i] != 0)
(common as FanModule).WindSpeed = usefullBytes [i];
} else if (common.Type == DeviceType.LightDALI) {
if ((common as LightDALI).CurrentBrightness == usefullBytes [i]) {
updateLightStatus = false;
}
(common as LightDALI).CurrentBrightness = usefullBytes [i];
}
string updateFlag = common.CommonLoopID;
if (Application.IsPad) {
//Pad.UserLightPage.UpdateStatus (updateFlag, usefullBytes [i]);
//Pad.UserDeviceToLight.UpdateStatus ();
//Pad.UserDeviceToLight.UpdateAllLightsStatus (updateFlag, usefullBytes [i]);
//Pad.UserDeviceToSocket.UpdateStatus (updateFlag, usefullBytes [i]);
//Pad.UserFan.UpdataFanView (updateFlag, usefullBytes [i]);
} else {
UserDeviceToLight.UpdateBrighingCount (updateFlag);
if (updateLightStatus) {
UserRoom.UpdataDeviceStatus (common);
UserLightPage.UpdateStatus (updateFlag, usefullBytes [i]);
UserDeviceToLight.UpdateStatus (updateFlag, usefullBytes [i]);
UserFan.UpdataFanView (updateFlag, usefullBytes [i]);
UserDeviceToFan.UpdataStatus (updateFlag, usefullBytes [i]);
UserDeviceToSocket.UpdateStatus (updateFlag, usefullBytes [i]);
}
}
}
}
}
break;
case Command.ReadLightSingleLoopBrightnessACK:
case Command.SetSingleLightACK:
Console.WriteLine ($"SetSingleLightACK {usefullBytes [2]}");
foreach (var room in Room.Lists) {
var common = room.DeviceList.Find ((obj) => obj.CommonLoopID == subnetID.ToString () + "_" + deviceID.ToString () + "_" + usefullBytes [0].ToString ());
if (common != null) {
//foreach (var common in room.DeviceList) {
if (common.CommonLoopID != subnetID.ToString () + "_" + deviceID.ToString () + "_" + usefullBytes [0].ToString ()) {
continue;
}
string updateFlag = common.CommonLoopID;
if (common.Type == DeviceType.LightRGB) {
break;
}
common.LastUpdateTime = DateTime.Now;
bool hadBeUpdate = true;
if (common.Type == DeviceType.LightSwitch || common.Type == DeviceType.LightSwitchSocket || common.Type == DeviceType.LightSwitchSocket) {
if ((common as LightSwitch).CurrentBrightness == usefullBytes [2])
hadBeUpdate = false;
(common as LightSwitch).CurrentBrightness = usefullBytes [2];
} else if (common.Type == DeviceType.LightDimming) {
if ((common as LightDimming).CurrentBrightness == usefullBytes [2])
hadBeUpdate = false;
(common as LightDimming).CurrentBrightness = usefullBytes [2];
} else if (common.Type == DeviceType.FanModule) {
if ((common as FanModule).Switch == usefullBytes [2])
hadBeUpdate = false;
(common as FanModule).Switch = usefullBytes [2];
if (usefullBytes [2] != 0)
(common as FanModule).WindSpeed = usefullBytes [2];
} else if (common.Type == DeviceType.LightMixSwitch) {
if ((common as LightMixSwitch).CurrentBrightness == usefullBytes [2])
hadBeUpdate = false;
(common as LightMixSwitch).CurrentBrightness = usefullBytes [2];
} else if (common.Type == DeviceType.LightMixDimming) {
if ((common as LightMixDimming).CurrentBrightness == usefullBytes [2])
hadBeUpdate = false;
(common as LightMixDimming).CurrentBrightness = usefullBytes [2];
} else if (common.Type == DeviceType.LightDALI) {
if ((common as LightDALI).CurrentBrightness == usefullBytes [2])
hadBeUpdate = false;
(common as LightDALI).CurrentBrightness = usefullBytes [2];
}
if (Application.IsPad) {
//Pad.UserLightPage.UpdateStatus (updateFlag, usefullBytes [2]);
//Pad.UserDeviceToLight.UpdateStatus ();
//Pad.UserDeviceToLight.UpdateAllLightsStatus (updateFlag, usefullBytes [2]);
//Pad.UserDeviceToSocket.UpdateStatus (updateFlag, usefullBytes [2]);
//Pad.UserFan.UpdataFanView (updateFlag, usefullBytes [2]);
//break;
} else {
UserDeviceToLight.UpdateBrighingCount (updateFlag);
if (hadBeUpdate) {
UserRoom.UpdataDeviceStatus (common);
UserLightPage.UpdateStatus (updateFlag, usefullBytes [2]);
UserDeviceToLight.UpdateStatus (updateFlag, usefullBytes [2]);
UserFan.UpdataFanView (updateFlag, usefullBytes [2]);
UserDeviceToFan.UpdataStatus (updateFlag, usefullBytes [2]);
UserDeviceToSocket.UpdateStatus (updateFlag, usefullBytes [2]);
}
//break;
}
}
}
break;
case Command.SetSceneACK:
/// [0]// 区号1-n, 255表示所有区(用于广播场景) 1byte
/// [1]// 场号0-x 1byte
/// [2]// 回路总数n 1byte
/// [3]// 回路状态:bit位 0关、1开,(byte:bit0-7对应1-8回路 ...n回路) ((n+7)/8) byte
foreach (var room in Room.Lists) {
var commonList = room.DeviceList.FindAll ((obj) => obj.SubnetID == subnetID&& obj.DeviceID == deviceID);
if (commonList != null && commonList.Count > 0) {
foreach (var common in commonList) {
if (common.LoopID > usefullBytes [2]) {
continue;
}
string updateFlag = common.CommonLoopID;
int useIndex = common.LoopID / 8;
int selfIndex = (common.LoopID -1) % 8;
var binaryString = Convert.ToString (usefullBytes [3 + useIndex], 2).PadLeft(8,'0').ToCharArray();
byte ackSceneBrightness = 100;
if (binaryString [7-selfIndex] == '0') {
ackSceneBrightness = 0;
}
if (common.Type == DeviceType.LightRGB) {
break;
}
common.LastUpdateTime = DateTime.Now;
bool hadBeUpdate = true;
if (common.Type == DeviceType.LightSwitch || common.Type == DeviceType.LightSwitchSocket || common.Type == DeviceType.LightSwitchSocket) {
if ((common as LightSwitch).CurrentBrightness == ackSceneBrightness)
hadBeUpdate = false;
(common as LightSwitch).CurrentBrightness = ackSceneBrightness;
} else if (common.Type == DeviceType.LightDimming) {
if ((common as LightDimming).CurrentBrightness == ackSceneBrightness)
hadBeUpdate = false;
(common as LightDimming).CurrentBrightness = ackSceneBrightness;
} else if (common.Type == DeviceType.FanModule) {
if ((common as FanModule).Switch == ackSceneBrightness)
hadBeUpdate = false;
(common as FanModule).Switch = ackSceneBrightness;
if (ackSceneBrightness != 0)
(common as FanModule).WindSpeed = ackSceneBrightness;
} else if (common.Type == DeviceType.LightMixSwitch) {
if ((common as LightMixSwitch).CurrentBrightness == ackSceneBrightness)
hadBeUpdate = false;
(common as LightMixSwitch).CurrentBrightness = ackSceneBrightness;
} else if (common.Type == DeviceType.LightMixDimming) {
if ((common as LightMixDimming).CurrentBrightness == ackSceneBrightness)
hadBeUpdate = false;
(common as LightMixDimming).CurrentBrightness = ackSceneBrightness;
} else if (common.Type == DeviceType.LightDALI) {
if ((common as LightDALI).CurrentBrightness == ackSceneBrightness)
hadBeUpdate = false;
(common as LightDALI).CurrentBrightness = ackSceneBrightness;
}
if (Application.IsPad) {
} else {
UserDeviceToLight.UpdateBrighingCount (updateFlag);
if (hadBeUpdate) {
UserRoom.UpdataDeviceStatus (common);
UserLightPage.UpdateStatus (updateFlag, ackSceneBrightness);
UserDeviceToLight.UpdateStatus (updateFlag, ackSceneBrightness);
UserFan.UpdataFanView (updateFlag, ackSceneBrightness);
UserDeviceToFan.UpdataStatus (updateFlag, ackSceneBrightness);
UserDeviceToSocket.UpdateStatus (updateFlag, ackSceneBrightness);
}
//break;
}
}
}
}
break;
case Command.SetLogicLoopColorACK:
case Command.ReadLogicLoopColorACK:
foreach (var room in Room.Lists) {
foreach (var common in room.DeviceList) {
if (common.SubnetID != subnetID || common.DeviceID != deviceID || common.LoopID != usefullBytes [0]) {
continue;
}
common.LastUpdateTime = DateTime.Now;
if (common.Type == DeviceType.LightRGB) {
(common as LightLogic).CurrentBrightness = usefullBytes [1];
string updateFlag = common.CommonLoopID + "RGB";
if (Application.IsPad) {
UserLightPage.UpdateStatus (updateFlag, usefullBytes [1]);
UserDeviceToLight.UpdateStatus (updateFlag, usefullBytes [1]);
} else {
UserRoom.UpdataDeviceStatus (common);
UserLightPage.UpdateStatus (updateFlag, usefullBytes [1]);
UserDeviceToLight.UpdateStatus (updateFlag, usefullBytes [1]);
}
}
}
}
break;
case Command.SetFoolHeatACK:
case Command.ReadFoolHeatACK:
case Command.Serverx_FH_CMD_ACK:
foreach (var room in Room.Lists) {
var fhCommon = room.DeviceList.Find ((obj) => obj.SubnetID == subnetID && obj.DeviceID == deviceID && obj.LoopID == usefullBytes [0]);
if (fhCommon != null) {
(fhCommon as FoolHeat).Serverx_FH_CMD (FoolHeat.CommandType.Null, usefullBytes);
}
}
break;
case Command.ReadCurtainStutasACK:
case Command.UpdataCurtainModelStutasACK:
#region 窗帘
foreach (var room in Room.Lists) {
foreach (var common in room.DeviceList) {
if (common.SubnetID != subnetID || common.DeviceID != deviceID) {
continue;
}
common.LastUpdateTime = DateTime.Now;
if (common.Type == DeviceType.CurtainModel) {
if (common.LoopID == usefullBytes [0]) {
if (usefullBytes [1] != 0) {
(common as CurtainModel).Status = (CurtainStatus)usefullBytes [1];
common.obj5 = usefullBytes [1];
UserCurtainPage.UpdateStatus (common);
UserDeviceToCurtains.UpdateStata (common);
}
}
} else if (common.Type == DeviceType.CurtainRoller) {
if (usefullBytes [0] == 17) {
(common as CurtainRoller).CurtainProress = usefullBytes [1];
if (usefullBytes [1] > 0) {
(common as CurtainRoller).Status = CurtainStatus.Open;
} else {
(common as CurtainRoller).Status = CurtainStatus.Close;
}
} else {
if (usefullBytes [1] != 0) {
common.obj5 = usefullBytes [1];
(common as CurtainRoller).Status = (CurtainStatus)usefullBytes [1];
}
}
UserCurtainPage.UpdateStatus (common);
UserDeviceToCurtains.UpdateStata (common);
} else if (common.Type == DeviceType.CurtainTrietex) {
if (usefullBytes [0] == 17) {
(common as CurtainTrietex).CurtainProress = usefullBytes [1];
if (usefullBytes [1] > 0) {
(common as CurtainTrietex).Status = CurtainStatus.Open;
} else {
(common as CurtainTrietex).Status = CurtainStatus.Close;
}
} else {
if (usefullBytes [1] != 0) {
common.obj5 = usefullBytes [1];
(common as CurtainTrietex).Status = (CurtainStatus)usefullBytes [1];
}
}
UserCurtainPage.UpdateStatus (common);
UserDeviceToCurtains.UpdateStata (common);
}
}
}
break;
#endregion
case Command.ControlMusicModel1ACK:
#region 音乐
foreach (var m in Room.Lists) {
var device = m.DeviceList.Find ((v) => {
return v.Type == DeviceType.MusicModel && v.SubnetID == subnetID && v.DeviceID == deviceID;
});
if (device == null) {
continue;
}
MusicModel music = device as MusicModel;
//把接收到的数据转换为字符串
string backAllString = CommonPage.MyEncodingGB2312.GetString (usefullBytes);
//把当前字符串以,号分开
string [] backResult = backAllString.Split (',');
string commandString = backResult [0];
if (commandString.StartsWith ("#Z")) {
if (2 <= backResult.Length) {
//music.PlayStatus = backResult [1] == "ON" ? MusicModel.Status.Play : MusicModel.Status.Stop;
}
if (backResult.Length > 3) {
//设置音乐的区号,源号,音量值。
if (backResult [0].StartsWith ("#Z") && backResult [1] == "ON" && backResult [2].StartsWith ("SRC") && backResult [3].StartsWith ("VOL")) {
music.ZoneID = backResult [0].Replace ("#Z", "");
music.SourceID = backResult [2].Replace ("SRC", "");
music.CurVol = backResult [3].Replace ("VOL", "").TrimEnd (new char [] { '\r', '\n' });
}
}
}
if (commandString.Length > 3) {
if (commandString.StartsWith ("#S")) {
//music_SourceID=commandString.Substring (2, 1);
}
commandString = commandString.Substring (3, commandString.Length - 3);
byte [] bytes = null;
switch (commandString) {
case "DISPLINE4":
//当前播放歌曲名
var len = 0;
for (var i = 14; i < usefullBytes.Length; i += 2) {
if (usefullBytes [i] == 0x00 && usefullBytes [i + 1] == 0x03) {
break;
}
len += 2;
}
bytes = new byte [len];
for (var j = 0; j < bytes.Length;) {
bytes [j + 1] = usefullBytes [14 + j];
bytes [j] = usefullBytes [14 + j + 1];
j += 2;
}
music.curPlayMusicName = Encoding.Unicode.GetString (bytes);
break;
case "DISPLINE1":
//列表号、列表总数,返回格式: L:1/2
bytes = new byte [usefullBytes.Length - 4 - 14];
for (int i = 14, j = 0; j < bytes.Length;) {
bytes [j + 1] = usefullBytes [i++];
bytes [j] = usefullBytes [i++];
j += 2;
}
string curPlayListNumberAndCount = Encoding.Unicode.GetString (bytes);
// mm1ACK.musicListNumber = "0";
int number = 0;
if (curPlayListNumberAndCount.StartsWith ("L:")) {
curPlayListNumberAndCount = curPlayListNumberAndCount.Replace ("L:", "");
if (curPlayListNumberAndCount.Contains ("/")) {
number = int.Parse (curPlayListNumberAndCount.Split ('/') [0]);
music.curListNumber = number < 10 ? "00" + number : (number < 100 ? "0" + number : number.ToString ());
}
}
break;
case "DISPLINE2":
//当前列表名,返回格式: SOME.PLS
bytes = new byte [usefullBytes.Length - 4 - 14];
for (int i = 14, j = 0; j < bytes.Length;) {
bytes [j + 1] = usefullBytes [i++];
bytes [j] = usefullBytes [i++];
j += 2;
}
string curPlayMusicListName = Encoding.Unicode.GetString (bytes);
string curMusicListName = curPlayMusicListName;
if (curPlayMusicListName.Contains (".PLS")) {
curMusicListName = curPlayMusicListName.Split ('.') [0];
}
music.curMusicListName = curMusicListName;
//MusicStatusFunction.updateMusicStatus_PlayListName (subnetID, deviceID, music_SourceID, curMusicListName, iPEndPoint.Address.ToString (), iPEndPoint.Port);
break;
case "DISPLINE3":
//歌曲号、歌曲总数,返回格式: S:10/23
bytes = new byte [usefullBytes.Length - 4 - 14];
for (int i = 14, j = 0; j < bytes.Length;) {
bytes [j + 1] = usefullBytes [i++];
bytes [j] = usefullBytes [i++];
j += 2;
}
string curPlayMusicNumberAndCount = System.Text.Encoding.Unicode.GetString (bytes);
int musicFileNumber = 0;
if (curPlayMusicNumberAndCount.StartsWith ("S:")) {
curPlayMusicNumberAndCount = curPlayMusicNumberAndCount.Replace ("S:", "");
if (curPlayMusicNumberAndCount.Contains ("/")) {
musicFileNumber = int.Parse (curPlayMusicNumberAndCount.Split ('/') [0]);
}
}
music.curSongNumber = musicFileNumber < 10 ? "00" + musicFileNumber : (musicFileNumber < 100 ? "0" + musicFileNumber : musicFileNumber.ToString ());
//MusicStatusFunction.updateMusicStatus_PlayMusicFileNumber (subnetID, deviceID, music_SourceID, musicFileNumber, iPEndPoint.Address.ToString (), iPEndPoint.Port);
break;
case "DISPINFO":
//当前播放歌曲的状态,返回格式: #SsDISPINFO,DUR1945,POS0,STATUS2
//DUR后数值:为歌曲播放总时间 (秒×10,实际时间的10倍)
//POS后数值:为歌曲已播放时间 (秒×10,实际时间的10倍)
//STATUS后数值:为1表示stop,为2表示play,为3表示pause
if (backResult [1].StartsWith ("DUR") && backResult [2].StartsWith ("POS") && backResult [3].StartsWith ("STATUS")) {
music.SoundGenerator = backResult [0] [2].ToString ();
music.musicTime = backResult [1].Replace ("DUR", "");
music.musicPalyTime = backResult [2].Replace ("POS", "");
music.musicCurPalyStatus = backResult [3] [6].ToString ();//.Replace ("STATUS", "")[0];
music.PlayStatus = music.musicCurPalyStatus == "2" ? MusicModel.Status.Play : MusicModel.Status.Stop;
music.LastDateTime = DateTime.Now;
}
// UserMusicModelRoom.UpdateControls(mm1ACK);
//UserMusicModel.UpdateRoomMusicStatus(mm1ACK);
break;
//播放模式
case "DISPMODE":
if (7 <= backResult [1].Length) {
music.playMode = int.Parse (backResult [1].Substring (6, 1));
System.Console.WriteLine ("DISPMODE=====" + music.playMode);
}
break;
}
}
}
break;
#endregion
#region 空调
case Command.ReadPanelTempTypeACK:
foreach (var room in Room.Lists) {
foreach (var common in room.DeviceList) {
if (common.SubnetID != subnetID || common.DeviceID != deviceID || common.LoopID != usefullBytes [0]) {
continue;
}
common.LastUpdateTime = DateTime.Now;
if (common.Type == DeviceType.ACPanel ) {
var ac = common as ACPanel;
ac.TemperatureMode = usefullBytes [0];
}
}
}
break;
case Command.ReadACModeACK:
case Command.SetACModeACK:
foreach (var room in Room.Lists) {
foreach (var common in room.DeviceList) {
if (common.SubnetID != subnetID || common.DeviceID != deviceID || common.LoopID != usefullBytes [0]) {
continue;
}
common.LastUpdateTime = DateTime.Now;
if (common.Type == DeviceType.HVAC || common.Type == DeviceType.ACPanel || common.Type == DeviceType.ACInfrared)
{
var ac = common as AC;
ac.TemperatureMode = usefullBytes [1];
ac.IndoorTemperature = usefullBytes [2];
ac.CoolTemperature = usefullBytes [3];
ac.HeatTemperature = usefullBytes [4];
ac.AutoTemperature = usefullBytes [5];
ac.ChuShiTemperature = usefullBytes [6];
ac.RealModeAndFanSpeed = usefullBytes [7];
ac.Power = usefullBytes [8];
ac.SetMode = usefullBytes [9];
ac.SetFanSpeed = usefullBytes [10];
//if (usefullBytes [11] < 16 || usefullBytes [11] == 0) {
// ac.SetTemperature = (byte)16;
//} else {
// ac.SetTemperature = usefullBytes [11];
//}
ac.ShaoFanMode = usefullBytes [12];
//IO.F
if (Application.IsPad) {
//Pad.UserACPage.UpdateStatus (ac);
} else {
UserACPage.UpdateStatus (ac);
UserDeviceToAC.UpdateStatus (ac);
UserRoom.UpdataDeviceStatus (ac);
}
}
}
}
break;
case Command.ReadPanleTempACK:
case Command.PanleBroadcastTemp:
foreach (var room in Room.Lists) {
foreach (var common in room.DeviceList) {
if (common.Type == DeviceType.ACPanel) {
var tempAC = common as ACPanel;
tempAC.IndoorTemperature = usefullBytes [1];
UserACPage.UpdateIndoorTemp (common.CommonLoopID, usefullBytes [1]);
} else if (common.Type == DeviceType.FoolHeatPanel) {
var tempFH22 = common as FoolHeatPanel;
tempFH22.IndoorTemperature = usefullBytes [1];
UserFHPage.UpdateIndoorTemp (tempFH22.CommonLoopID, usefullBytes [1]);
}
}
}
break;
case Command.InstructionPanelKeyACK:
case Command.ReadInstructionPanelKeyACK:
byte reACPanel = 0;
if (usefullBytes.Length == 2) {
reACPanel = 1;
} else if (usefullBytes.Length == 3) {
reACPanel = usefullBytes [2];
} else {
break;
}
foreach (var room in Room.Lists) {
foreach (var common in room.DeviceList) {
if (common.SubnetID != subnetID || common.DeviceID != deviceID || common.LoopID != reACPanel) {
continue;
}
common.LastUpdateTime = DateTime.Now;
if (common.Type == DeviceType.ACPanel) {
var ac = common as ACPanel;
switch (usefullBytes [0]) {
case 3://
ac.Power = usefullBytes [1];
UserACPage.UpdatePower (ac.CommonLoopID, usefullBytes [1]);
UserDeviceToAC.UpdatePower (ac.CommonLoopID, usefullBytes [1]);
UserRoom.Update_ACPanel_Power (ac.Type.ToString () + "_" + ac.CommonLoopID, usefullBytes [1]);
break;
case 4:
ac.CoolTemperature = usefullBytes [1];
if (ac.SetMode == 0) {
ac.SetTemperature = usefullBytes [1];
UserACPage.UpdateWorkingTemp (ac.CommonLoopID, usefullBytes [1]);
UserDeviceToAC.UpdateWorkingTemp (ac.CommonLoopID, usefullBytes [1]);
UserRoom.Update_ACPanel_WorkingTemp (ac.Type.ToString () + "_" + ac.CommonLoopID, usefullBytes [1], ac.TemperatureMode);
}
break;
case 5:
ac.SetFanSpeed = usefullBytes [1];
UserACPage.UpdateSetFanSpeed (ac.CommonLoopID, usefullBytes [1]);
UserDeviceToAC.UpdateFanSpeed (ac.CommonLoopID, usefullBytes [1]);
UserRoom.Update_ACPanel_FanIcon (ac.Type.ToString () + "_" + ac.CommonLoopID, usefullBytes [1]);
break;
case 6:
ac.SetMode = usefullBytes [1];
UserACPage.UpdateSetMode (ac.CommonLoopID, usefullBytes [1]);
UserDeviceToAC.UpdateSetMode (ac.CommonLoopID, usefullBytes [1]);
UserRoom.Update_ACPanel_ModeIcon (ac.Type.ToString () + "_" + ac.CommonLoopID, usefullBytes [1]);
break;
case 7:
ac.HeatTemperature = usefullBytes [1];
if (ac.SetMode == 1) {
ac.SetTemperature = usefullBytes [1];
UserACPage.UpdateWorkingTemp (ac.CommonLoopID, usefullBytes [1]);
UserDeviceToAC.UpdateWorkingTemp (ac.CommonLoopID, usefullBytes [1]);
UserRoom.Update_ACPanel_WorkingTemp (ac.Type.ToString () + "_" + ac.CommonLoopID, usefullBytes [1], ac.TemperatureMode);
}
break;
case 8:
ac.AutoTemperature = usefullBytes [1];
if (ac.SetMode == 3) {
ac.SetTemperature = usefullBytes [1];
UserACPage.UpdateWorkingTemp (ac.CommonLoopID, usefullBytes [1]);
UserDeviceToAC.UpdateWorkingTemp (ac.CommonLoopID, usefullBytes [1]);
UserRoom.Update_ACPanel_WorkingTemp (ac.Type.ToString () + "_" + ac.CommonLoopID, usefullBytes [1], ac.TemperatureMode);
}
break;
case 19:
ac.ChuShiTemperature = usefullBytes [1];
if (ac.SetMode == 4) {
ac.SetTemperature = usefullBytes [1];
UserACPage.UpdateWorkingTemp (ac.CommonLoopID, usefullBytes [1]);
UserDeviceToAC.UpdateWorkingTemp (ac.CommonLoopID, usefullBytes [1]);
UserRoom.Update_ACPanel_WorkingTemp (ac.Type.ToString () + "_" + ac.CommonLoopID, usefullBytes [1], ac.TemperatureMode);
}
break;
}
if (Application.IsPad) {
//Pad.UserACPage.UpdateStatus (ac);
} else {
//UserACPage.UpdateStatus (ac);
//UserDeviceToAC.UpdateStatus (ac);
//UserRoom.UpdataDeviceStatus (ac);
}
} else if (common.Type == DeviceType.FoolHeatPanel) {
var fh = common as FoolHeatPanel;
switch (usefullBytes [0]) {
case 20://
fh.Status = usefullBytes [1];
UserDeviceToFH.UpdatePower (fh.CommonLoopID, usefullBytes [1]);
UserFHPage.UpdatePower (fh.CommonLoopID, usefullBytes [1]);
UserRoom.Update_FoolHeatPanel_Power (fh.Type.ToString () + "_" + fh.CommonLoopID, usefullBytes [1]);
break;
case 21:
fh.TemperatureType = usefullBytes [1];
UserFHPage.UpdateWorkingMode (fh.CommonLoopID, usefullBytes [1]);
if (usefullBytes [1] == 5) {
if (fh.Timer == 0)//时间模式的时间段标志 (0:白天,1:夜晚) (1byte) //20110112加时间段标志
Control.ControlBytesSend (Command.ReadInstructionPanelKey, fh.SubnetID, fh.DeviceID, new byte [] { 26, 2, fh.LoopID }, SendCount.Zero);
else
Control.ControlBytesSend (Command.ReadInstructionPanelKey, fh.SubnetID, fh.DeviceID, new byte [] { 27, 3, fh.LoopID }, SendCount.Zero);
} else
Control.ControlBytesSend (Command.ReadInstructionPanelKey, fh.SubnetID, fh.DeviceID, new byte [] { (byte)(usefullBytes [1] + 24), fh.LoopID }, SendCount.Zero);
break;
case 25:
fh.NormalTemperature = usefullBytes [1];
if (fh.TemperatureType == 1) {
fh.WorkingTemperature = usefullBytes [1];
UserDeviceToFH.UpdateWorkingTemp (fh.CommonLoopID, usefullBytes [1]);
UserFHPage.UpdateWorkingTemp (fh.CommonLoopID, usefullBytes [1]);
UserRoom.Update_FoolHeatPanel_WorkingTemp (fh.Type.ToString () + "_" + fh.CommonLoopID, usefullBytes [1]);
}
break;
case 26:
fh.DayTemperature = usefullBytes [1];
if (fh.TemperatureType == 2) {
fh.WorkingTemperature = usefullBytes [1];
UserDeviceToFH.UpdateWorkingTemp (fh.CommonLoopID, usefullBytes [1]);
UserFHPage.UpdateWorkingTemp (fh.CommonLoopID, usefullBytes [1]);
UserRoom.Update_FoolHeatPanel_WorkingTemp (fh.Type.ToString () + "_" + fh.CommonLoopID, usefullBytes [1]);
}
break;
case 27:
fh.NightTemperature = usefullBytes [1];
if (fh.TemperatureType == 3) {
fh.WorkingTemperature = usefullBytes [1];
UserDeviceToFH.UpdateWorkingTemp (fh.CommonLoopID, usefullBytes [1]);
UserFHPage.UpdateWorkingTemp (fh.CommonLoopID, usefullBytes [1]);
UserRoom.Update_FoolHeatPanel_WorkingTemp (fh.Type.ToString () + "_" + fh.CommonLoopID, usefullBytes [1]);
}
break;
case 28:
fh.AwayTemperature = usefullBytes [1];
if (fh.TemperatureType == 4) {
fh.WorkingTemperature = usefullBytes [1];
UserDeviceToFH.UpdateWorkingTemp (fh.CommonLoopID, usefullBytes [1]);
UserFHPage.UpdateWorkingTemp (fh.CommonLoopID, usefullBytes [1]);
UserRoom.Update_FoolHeatPanel_WorkingTemp (fh.Type + "_" + fh.CommonLoopID, usefullBytes [1]);
}
break;
}
if (Application.IsPad) {
//SimpleControl.Pad.UserFHPage.UpdateStatus (fh);
} else {
//UserDeviceToFH.UpdateStatus (fh);
//UserFHPage.UpdateStatus (fh);
//UserRoom.UpdataDeviceStatus (fh);
}
}
}
}
break;
case Command.Read_Air_Condition_Set_ack:
byte acpanelLoopId = 0;
if (usefullBytes.Length == 10) {
acpanelLoopId = 1;
} else if (usefullBytes.Length == 11) {
acpanelLoopId = usefullBytes [10];
}
foreach (var room in Room.Lists) {
var common = room.DeviceList.Find ((obj) => obj.SubnetID == subnetID && obj.DeviceID == deviceID && obj.LoopID == usefullBytes [1] && obj.Type == DeviceType.ACPanel);
if (common == null)
continue;
common.LastUpdateTime = DateTime.Now;
var ac = common as ACPanel;
ac.Power = usefullBytes [0];
ac.CoolTemperature = usefullBytes [1];
ac.SetMode = (byte)(usefullBytes [2] >> 4);//模式和风速
ac.SetFanSpeed = (byte)(usefullBytes [2] & 0x0F);
//空调锁
ac.SetTemperature = usefullBytes [4];//当前温度
ac.HeatTemperature = usefullBytes [5];//制热温度
//空调实际运行模式和风速
ac.AutoTemperature = usefullBytes [7];//自动温度
ac.ChuShiTemperature = usefullBytes [8];//抽湿温度
ac.ShaoFanMode = usefullBytes [9];//空调是否扫风(低四位)
if (Application.IsPad) {
} else {
UserACPage.UpdateStatus (ac);
UserDeviceToAC.UpdateStatus (ac);
UserRoom.UpdataDeviceStatus (ac);
}
}
break;
case Command.Set_Air_State_New_ack:
if (usefullBytes.Length == 15) {
/// [0]//MODIFY_SUCCESS 1byte
/// [1]//空调页号(0-8) 1byte
/// [2]//空调开关(1开0关) 1byte
/// [3]//制冷控制温度(摄氏0-30,华氏32-86) 1byte
/// [4]//制热控制温度(摄氏0-30,华氏32-86) 1byte
/// [5]//自动控制温度(摄氏0-30,华氏32-86) 1byte
/// [6]//除湿控制温度(摄氏0-30,华氏32-86) 1byte
/// [7]//设置模式(0制冷,1制热,2通风,3自动,4除湿) 1byte
/// [8]//设置风速(0自动,1高风,2中风,3低风) 1byte //注意:当模式为除湿或模式为通风及风速为自动时,风速视为小风为准
/// [9]//设置扫风(0不扫风,1扫风) 1byte
/// [10]//温度模式(摄氏Celsius:0,华氏Fahrenheit:1) 1byte
/// [11]//模式实际工作状态(0制冷,1制热,2通风,3自动,4除湿) 1byte
/// [12]//风速实际工作状态(0关闭,1高风,2中风,3低风) 1byte
/// [13]//扫风实际工作状态(0不扫风,1扫风) 1byte
/// [14]//环境温度(摄氏0-40,华氏32-99) 1byte
foreach (var room in Room.Lists) {
//foreach (var common in room.DeviceList) {
var common = room.DeviceList.Find ((obj) => obj.SubnetID == subnetID && obj.DeviceID == deviceID && obj.LoopID == usefullBytes [1] && obj.Type == DeviceType.ACPanel);
if (common == null)
continue;
//if (common.SubnetID != subnetID || common.DeviceID != deviceID || common.LoopID != usefullBytes[1]) {
// continue;
//}
common.LastUpdateTime = DateTime.Now;
var ac = common as ACPanel;
ac.Power = usefullBytes [2];
ac.CoolTemperature = usefullBytes [3];
ac.SetMode = usefullBytes [7];//模式和风速
ac.SetFanSpeed = (byte)(usefullBytes [2] & 0x0F);
//空调锁
ac.SetTemperature = usefullBytes [4];//当前温度
ac.HeatTemperature = usefullBytes [4];//制热温度
//空调实际运行模式和风速
ac.AutoTemperature = usefullBytes [5];//自动温度
ac.ChuShiTemperature = usefullBytes [6];//抽湿温度
ac.ShaoFanMode = usefullBytes [9];//空调是否扫风(低四位)
ac.IndoorTemperature = usefullBytes [14];
if (Application.IsPad) {
} else {
UserACPage.UpdateStatus (ac);
UserDeviceToAC.UpdateStatus (ac);
UserRoom.UpdataDeviceStatus (ac);
}
//}
}
}
break;
#endregion
#region 地热
case Command.Read_Floor_Heat_State_ack:
foreach (var room in Room.Lists) {
byte fhLoopId = 1;
if (usefullBytes.Length == 11) {
fhLoopId = usefullBytes [10];
}
var common = room.DeviceList.Find ((obj) => obj.SubnetID == subnetID && obj.DeviceID == deviceID && obj.LoopID == fhLoopId && obj.Type == DeviceType.FoolHeatPanel);
if (common == null)
continue;
/// 1温度模式(摄氏Celsius:0,华氏Fahrenheit:1) (1byte)
/// 2温度源温度(最高位0:正,1:负.后7bit为值) (1byte)
/// 3地热地冷开关::0关、1开 (1byte)
/// 4工作温度模式:1:普通,2:白天,3:夜晚,4:离开,5:时间 (1-5) (1byte)
/// 5普通温度 (摄氏0-99,华氏32-210) (1byte)
/// 6白天温度 (摄氏0-99,华氏32-210) (1byte)
/// 7夜晚温度 (摄氏0-99,华氏32-210) (1byte)
/// 8离开温度 (摄氏0-99,华氏32-210) (1byte)
/// 9时间模式的时间段标志 (0:白天,1:夜晚) (1byte) //20110112加时间段标志
/// 10模式:0地热模式、1地冷模式、2自动 (1byte) //20120802加//20140805加自动
/// 11地热页号0-8 (1byte)//彩屏加入20150714
var th = common as FoolHeatPanel;
th.IndoorTemperature = usefullBytes [1] > 128 ? (byte)(0 - (usefullBytes [1] - 128)) : usefullBytes [1];
th.Status = usefullBytes [2];
th.TemperatureType = usefullBytes [3];
th.NormalTemperature = usefullBytes [4];
th.DayTemperature = usefullBytes [5];
th.NightTemperature = usefullBytes [6];
th.AwayTemperature = usefullBytes [7];
switch (usefullBytes [3]) {
case 1://普通
th.WorkingTemperature = th.NormalTemperature;
break;
case 2://白天
th.WorkingTemperature = th.DayTemperature;
break;
case 3://夜晚
th.WorkingTemperature = th.NightTemperature;
break;
case 4://离开
th.WorkingTemperature = th.AwayTemperature;
break;
case 5://时间模式
th.Timer = usefullBytes [9];
if (usefullBytes [9] == 1)//时间模式的时间段标志 (0:白天,1:夜晚) (1byte) //20110112加时间段标志
th.WorkingTemperature = th.DayTemperature;
else
th.WorkingTemperature = th.NightTemperature;
break;
}
UserDeviceToFH.UpdateStatus (th);
UserFHPage.UpdateStatus (th,fhLoopId);
UserRoom.UpdataDeviceStatus (th);
}
break;
case Command.Set_Floor_Heat_State_ack:
foreach (var room in Room.Lists) {
byte fhLoopId = 1;
if (usefullBytes.Length == 12) {
fhLoopId = usefullBytes [11];
}
var common = room.DeviceList.Find ((obj) => obj.SubnetID == subnetID && obj.DeviceID == deviceID && obj.LoopID == fhLoopId && obj.Type == DeviceType.FoolHeatPanel);
if (common == null)
continue;
/// 1 MODIFY_SUCCESS 1 byte
/// 2温度模式(摄氏Celsius:0,华氏Fahrenheit:1) (1byte)
/// 3地热地冷开关::0关、1开 (1byte)
/// 4工作温度模式:1:普通,2:白天,3:夜晚,4:离开,5:时间 (1-5) (1byte)
/// 5普通温度 (摄氏0-99,华氏32-210) (1byte)
/// 6白天温度 (摄氏0-99,华氏32-210) (1byte)
/// 7夜晚温度 (摄氏0-99,华氏32-210) (1byte)
/// 8离开温度 (摄氏0-99,华氏32-210) (1byte)
/// 9时间模式的时间段标志 (0:白天,1:夜晚) (1byte) //20120802加
/// 10工作模式:0地热、1地冷、2自动 (1byte) //20120802加//20140805加自动
var th = common as FoolHeatPanel;
th.Status = usefullBytes [2];
th.TemperatureType = usefullBytes [3];
th.NormalTemperature = usefullBytes [4];
th.DayTemperature = usefullBytes [5];
th.NightTemperature = usefullBytes [6];
th.AwayTemperature = usefullBytes [7];
switch (usefullBytes [3]) {
case 1://普通
th.WorkingTemperature = th.NormalTemperature;
break;
case 2://白天
th.WorkingTemperature = th.DayTemperature;
break;
case 3://夜晚
th.WorkingTemperature = th.NightTemperature;
break;
case 4://离开
th.WorkingTemperature = th.AwayTemperature;
break;
case 5://时间模式
th.Timer = usefullBytes [9];
if (usefullBytes [9] == 1)//时间模式的时间段标志 (0:白天,1:夜晚) (1byte) //20110112加时间段标志
th.WorkingTemperature = th.DayTemperature;
else
th.WorkingTemperature = th.NightTemperature;
break;
}
UserDeviceToFH.UpdateStatus (th);
UserFHPage.UpdateStatus (th,fhLoopId);
UserRoom.UpdataDeviceStatus (th);
}
break;
#endregion
}
} catch (Exception ex) {
Console.WriteLine ("Packet_ReceiveEvent:" + ex.ToString ());
}
}
///
/// byte 变字符串
///
/// The to hex16.
/// The blue component.
public static string byteToHex16 (byte b)
{
string s = Convert.ToString (b, 16).ToUpper ();
if (s.Length <= 1) {
return "0" + s;
}
return s;//
}
static void httpListener_EventHandler (System.Collections.Specialized.NameValueCollection nameValueCollection, System.IO.Stream outputStream, System.IO.Stream inputStream)
{
//if (!isHttpListenerStart) {
// return;
//}
try {
//System.Net.WebClient webClient = new System.Net.WebClient ();
//byte []bytes= webClient.DownloadData("http://ip:6001/GetAllFiles");
// System.Text.Encoding.UTF8.GetString (bytes);
//List list = new List ();
//foreach(string s in list) {
// byte [] bytes = webClient.DownloadData ("http://ip:6001/Get"+s);
// FileUtils.WriteFileByBytes (s, bytes);
//}
if (nameValueCollection ["Command"] != null && nameValueCollection ["Command"].StartsWith ("Get")) {
string tempFileName = nameValueCollection ["Command"].Replace ("Get", "");
if ("AllFiles" == tempFileName) {
byte [] bytes = System.Text.Encoding.UTF8.GetBytes (Newtonsoft.Json.JsonConvert.SerializeObject (IO.FileUtils.ReadFiles ()));
outputStream.Write (bytes, 0, bytes.Length);
outputStream.Flush ();
} else {
byte [] bytes;
if (!IO.FileUtils.Exists (tempFileName)) {
bytes = System.Text.Encoding.UTF8.GetBytes ("文件名不存在!");
outputStream.Write (bytes, 0, bytes.Length);
outputStream.Flush ();
return;
}
System.IO.FileStream fs = new System.IO.FileStream (Application.RootPath + tempFileName, System.IO.FileMode.Open);
bytes = new byte [fs.Length];
fs.Read (bytes, 0, bytes.Length);
fs.Close ();
outputStream.Write (bytes, 0, bytes.Length);
outputStream.Flush ();
}
} else if (nameValueCollection ["Command"].StartsWith ("Upload")) {
string path = Application.RootPath + nameValueCollection ["Command"].Replace ("Upload", "");
string dePath = nameValueCollection ["Command"].Replace ("Upload", "");
if (dePath.Contains ("Room_")) {
new Room ().Add (dePath);
}
if (dePath.Split ('_').Length == 5) {
if (dePath.Split ('_') [1] == (typeof (OnePortBus).Name) || dePath.Split ('_') [1] == (typeof (OnePortWirelessFR).Name)) {
UserConfig.Instance.RemoteModeFile = dePath;
UserConfig.Instance.SaveUserConfig ();
}
if (dePath.Split ('_') [1] == (typeof (SecurityModul).Name)) {
if (UserConfig.Instance.HideDeviceTypes.Contains ((R.MyInternationalizationString.Security))) {
UserConfig.Instance.HideDeviceTypes.Remove (R.MyInternationalizationString.Security);
UserConfig.Instance.SaveUserConfig ();
}
}
}
if (dePath.Split ('_').Length == 2 && dePath.StartsWith ("GlobalScene")) {
var sceneFileList = Newtonsoft.Json.JsonConvert.DeserializeObject> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (Scene.GlobalSceneFilePath)));
if (!sceneFileList.Contains (dePath)) {
sceneFileList.Add (dePath);
IO.FileUtils.WriteFileByBytes (Scene.GlobalSceneFilePath, CommonPage.MyEncodingUTF8.GetBytes (Newtonsoft.Json.JsonConvert.SerializeObject (sceneFileList)));
}
}
FileUtils.WriteFileByInputStream (path, inputStream);
Common common = Newtonsoft.Json.JsonConvert.DeserializeObject (CommonPage.MyEncodingUTF8.GetString (IO.FileUtils.ReadFile (path)));
if (common.DeviceTextID == R.MyInternationalizationString.ElectricalControl) {
UserConfig.Instance.SocketList.Add (common.CommonLoopID);
}
} else {
byte [] bytes = System.Text.Encoding.UTF8.GetBytes ("请求命令无效!");
outputStream.Write (bytes, 0, bytes.Length);
outputStream.Flush ();
}
} catch (Exception ex) {
Console.WriteLine ("httpListener_EventHandler" + ex.ToString ());
}
}
///
/// 随机数高位
///
public static byte RandomHigh;
///
/// 随机数低位
///
public static byte RandomLow;
///
/// 设备列表
///
public static System.Collections.Generic.List DeviceList = new System.Collections.Generic.List ();
///
/// 网关设备列表
///
public static System.Collections.Generic.List GateWayList = new System.Collections.Generic.List ();
///
/// 设备对应回路列表
///
public static System.Collections.Generic.List DeviceLoopList = new System.Collections.Generic.List ();
///
/// Updates Device's remake.
///
public static void UpdateRemark (byte subnetID, byte deviceID, string remark)
{
byte [] updateBytes = new byte [20];
byte [] remakeBytes = MyEncodingGB2312.GetBytes (remark);
Array.Copy (remakeBytes, 0, updateBytes, 0, remakeBytes.Length < 20 ? remakeBytes.Length : 20);
Control.ControlBytesSend (Command.UpdataRemake, subnetID, deviceID, updateBytes);
}
///
/// 监听请求的Http端口
///
public static int Port = 5555;
static void httpListener_EventHandler (string rawUrl, System.IO.Stream outputStream, System.IO.Stream inputStream)
{
foreach (var musicInfo in MusicInfo.MusicInfoList) {
if ("audio-item-" + musicInfo.ID == rawUrl.TrimStart ('/')) {
var file = new System.IO.FileStream (musicInfo.Data, System.IO.FileMode.Open, System.IO.FileAccess.Read);
byte [] bytes = new byte [1024];
try {
while (file.CanRead) {
int len = file.Read (bytes, 0, bytes.Length);
if (len == 0) {
break;
}
outputStream.Write (bytes, 0, len);
}
} catch { }
file.Close ();
break;
}
}
}
}
}