using System;
|
using Shared.Net;
|
using Shared.IO;
|
using System.Text;
|
using System.Collections.Generic;
|
using Shared.SimpleControl.Phone;
|
//using service.hdlcontrol.com_WebServiceAirQuality;
|
|
namespace Shared.SimpleControl
|
{
|
public static class CommonPage
|
{
|
//public static AirQuality AirQuality;
|
//public static Action RefreshAir;
|
public static bool IsRemote = false;
|
//public static bool FindGateway = false;
|
public static bool FindGatewayChilren = false;
|
public static string FindGatewayChilrenIPAddress = new Net.NetWiFi ().BroadcastIpAddress.ToString ();
|
public static bool LocalPhoneFindDevice = false;
|
public static int searchTotal = 0;
|
public static int newDevice = 0;
|
private static string ip= "115.29.251.24";
|
public static System.Net.IPEndPoint EndPoint {
|
get {
|
try {
|
if (IsRemote) {
|
//127.0.0.1
|
if (ip == "0.0.0.0") {
|
try {
|
ip = "115.29.251.24";
|
} catch { }
|
}
|
return new System.Net.IPEndPoint (System.Net.IPAddress.Parse (ip), 9999);
|
} else {
|
//if (FindGateway) {
|
// 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);
|
//}
|
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 = Encoding.GetEncoding ("gb2312");
|
static bool isHttpListenerStart;
|
public static DateTime dt;
|
|
/// <summary>
|
/// 初始化处理socket接收的数据
|
/// </summary>
|
public static void InitReceiveEvent ()
|
{
|
Packet.ReceiveEvent += Packet_ReceiveEvent;
|
}
|
|
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 object lockobj = new object ();
|
|
static List<int> supportList = new List<int> () {
|
228, 229,230,4618, 231, 232, 233, 234, 235, 236, 237, 238
|
,740,741,742,743,744,745,746,750,752,754, 755,756,757,761,758,759,760,762,894,
|
4602,4604 ,4613, 4622,4605,4606,4607,4609, 4611,4620,4621,4615,4617,4619,4612,
|
36865,9600,19600,
|
1099,1163,3501,3502,3503,3504,3505,3506,
|
3508,3509,3516,3517,3521,3527,3528,3530,3532,3533,3534,3536,3538,
|
3539,3541,3543,3550,3559,3600,3601,3605,4599,4601,4602,
|
30001,63479,65282,65532,65534,
|
};
|
|
static void Packet_ReceiveEvent (byte subnetID, byte deviceID, Command command, byte [] usefullBytes,int deviceTypeNumber)
|
{
|
try {
|
List<byte> ButtonBkeyModelList = new List<byte> ();
|
switch (command) {
|
case Command.ReadRemarkACK:
|
if(supportList.Contains(deviceTypeNumber)) {
|
lock (GateWayList) {
|
if (GateWayList.Find ((l) => { return l.SubnetID == subnetID && l.DeviceID == deviceID; }) != null) {
|
return;
|
}
|
DeviceType deviceType = (DeviceType)(usefullBytes [2] * 256 + usefullBytes [3]);
|
GatewayBase gatewayBase = new GatewayBase ();
|
gatewayBase.DeviceTypeNumber = deviceTypeNumber;
|
gatewayBase.SubnetID = subnetID;
|
gatewayBase.DeviceID = deviceID;
|
gatewayBase.Type = deviceType;
|
gatewayBase.Name = MyEncodingGB2312.GetString (usefullBytes, 0, 20).Trim ('\0');//=============
|
GateWayList.Add (gatewayBase);
|
}
|
}
|
break;
|
|
//读取网关设备回复
|
case Command.ReadGatewayACK:
|
if (usefullBytes [0] != RandomHigh | usefullBytes [1] != RandomLow) {
|
return;
|
}
|
lock (GateWayList) {
|
if (GateWayList.Find ((l) => { return l.SubnetID == subnetID && l.DeviceID == deviceID; }) != null) {
|
return;
|
}
|
DeviceType deviceType = (DeviceType)(usefullBytes [2] * 256 + usefullBytes [3]);
|
if (usefullBytes [2] == 254 && usefullBytes [3] < 8) {
|
GatewayBase gatewayBase = new GatewayBase ();
|
gatewayBase.DeviceTypeNumber = deviceTypeNumber;
|
gatewayBase.SubnetID = subnetID;
|
gatewayBase.DeviceID = deviceID; gatewayBase.Type = deviceType;
|
gatewayBase.LoopID = usefullBytes [4];
|
gatewayBase.MAC = byteToHex16 (usefullBytes [5]) + "." + byteToHex16 (usefullBytes [6]) + "." + byteToHex16 (usefullBytes [7]) + "." + byteToHex16 (usefullBytes [8]) + "." + byteToHex16 (usefullBytes [9]) + "." + byteToHex16 (usefullBytes [10]) + "." + byteToHex16 (usefullBytes [11]) + "." + byteToHex16 (usefullBytes [12]);
|
gatewayBase.Name = MyEncodingGB2312.GetString (usefullBytes, 13, 20).Trim ('\0');//=============
|
gatewayBase.IPAddress = usefullBytes [33] + "." + usefullBytes [34] + "." + usefullBytes [35] + "." + usefullBytes [36];
|
gatewayBase.RouteIPAddress = usefullBytes [37] + "." + usefullBytes [38] + "." + usefullBytes [39] + "." + usefullBytes [40];
|
gatewayBase.IPMAC = usefullBytes [41] + "." + usefullBytes [42] + "." + usefullBytes [43] + "." + usefullBytes [44] + "." + usefullBytes [45] + "." + usefullBytes [46];
|
gatewayBase.SubnetMask = usefullBytes [47] + "." + usefullBytes [48] + "." + usefullBytes [49] + "." + usefullBytes [50];
|
gatewayBase.DHCP = usefullBytes [51] == 0 ? false : true;
|
GateWayList.Add (gatewayBase);
|
if (gatewayBase.Name == "") {
|
gatewayBase.Name = gatewayBase.CommonLoopID.ToString ();
|
}
|
}
|
}
|
break;
|
case Command.WriteWirelessPanelButtonKey:
|
//01 01 59(+30) 02 0D 03 64 00 01
|
break;
|
case Command.AssignedAddressACK:
|
Console.WriteLine (usefullBytes [0].ToString ());
|
if (usefullBytes [0] == 3) {
|
dt = DateTime.Now;
|
} else if (usefullBytes [0] == 4) {
|
dt = System.DateTime.MinValue;
|
}
|
break;
|
case Command.Remote3thACK:
|
Console.WriteLine (usefullBytes [0]);
|
break;
|
}
|
} catch (Exception ex) {
|
Console.WriteLine ("Packet_ReceiveEvent:" + ex.ToString ());
|
}
|
|
}
|
/// <summary>
|
/// byte 变字符串
|
/// </summary>
|
/// <returns>The to hex16.</returns>
|
/// <param name="b">The blue component.</param>
|
public static string byteToHex16 (byte b)
|
{
|
string s = Convert.ToString (b, 16).ToUpper ();
|
if (s.Length <= 1) {
|
return "0" + s;
|
}
|
return s;//
|
}
|
|
|
/// <summary>
|
/// 随机数高位
|
/// </summary>
|
public static byte RandomHigh;
|
/// <summary>
|
/// 随机数低位
|
/// </summary>
|
public static byte RandomLow;
|
|
/// <summary>
|
/// 网关设备列表
|
/// </summary>
|
public static List<GatewayBase> GateWayList = new List<GatewayBase> ();
|
|
}
|
}
|