using System;
|
using HDL_ON.DAL.Server;
|
using Shared;
|
using System.Collections.Generic;
|
using Newtonsoft.Json.Linq;
|
|
namespace HDL_ON.UI.UI2.PersonalCenter.PirDevice
|
{
|
public class PirMethod
|
{
|
|
/// <summary>
|
/// 红外宝程序主入口
|
/// </summary>
|
/// <param name="frame"></param>
|
/// <param name="function"></param>
|
public void MainView(FrameLayout frame, Entity.Function function, Action action)
|
{
|
Pir pirDevice = new Pir();
|
if (function != null)
|
{//数据转换
|
pirDevice.name = function.name;
|
pirDevice.deviceId = function.deviceId;
|
pirDevice.sid = function.sid;
|
pirDevice.online = function.online;
|
pirDevice.versions = function.versions;
|
}
|
Pir.currPir = pirDevice;
|
GetControlList(frame, () =>
|
{
|
Application.RunOnMainThread(() =>
|
{
|
var page = new PirMain();
|
MainPage.BasePageView.AddChidren(page);
|
page.Show();
|
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
|
PirMain.BackAction += () =>
|
{
|
action?.Invoke();
|
PirMain.BackAction = null;
|
};
|
});
|
}, Pir.currPir);
|
}
|
|
/// <summary>
|
/// 管理位置
|
/// </summary>
|
/// <param name="control">当前设备</param>
|
/// <param name="action">回调函数</param>
|
public void ManagementPosition(Entity.Function control, Action action)
|
{
|
var view = new ChooseRoomPage(control, action);
|
MainPage.BasePageView.AddChidren(view);
|
view.LoadPage();
|
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
|
}
|
/// <summary>
|
/// 修改名称
|
/// </summary>
|
/// <param name="tipText">提示标题文本</param>
|
/// <param name="list">当前存在名称列表</param>
|
/// <param name="currName">当前名称</param>
|
/// <param name="action">回调函数</param>
|
public void EditControlName(int tipText, List<string> list, string currName, Action<string, Dialog> action, Action actionCancel, bool tag = false)
|
{
|
new View.TipView().InputBox(tipText, currName, StringId.nameNull, StringId.NameAlreadyExists, list, (text, view
|
) =>
|
{
|
action(text, view);
|
}, () => { actionCancel(); }, tag);
|
}
|
/// <summary>
|
/// 添加遥控器的方法
|
/// </summary>
|
/// <param name="frameLayout">log图标加载界面</param>
|
/// <param name="action">回调函数</param>
|
public void AddControl(FrameLayout frameLayout, Action<Control> action)
|
{
|
View.TipView tipView = new View.TipView();
|
tipView.InputBox(frameLayout, "", (name, frame) =>
|
{
|
if (Pir.currPir != null && Pir.currPir.FunctioList.Count < 10)
|
{
|
Control control = new Control();
|
control.name = name;
|
control.type = "learn";
|
control.spk = "ir.learn";
|
control.deviceId = Pir.currPir.deviceId;
|
ThreadAddControl(control, frame, action);
|
}
|
else
|
{
|
View.TipView tt = new View.TipView();
|
tt.TipBox(StringId.tip, StringId.bunengchaoguo10);
|
}
|
}, false);
|
|
}
|
/// <summary>
|
/// 发送遥控器命令方法
|
/// </summary>
|
/// <param name="control">发送参数对象</param>
|
/// <param name="frame">log图标加载界面</param>
|
/// <param name="action">回调函数</param>
|
public void ThreadAddControl(Control control, FrameLayout frame, Action<Control> action)
|
{
|
Cloud mqttdate = null;
|
Loading loading = new Loading();
|
frame.AddChidren(loading);
|
loading.Start();
|
new System.Threading.Thread(() =>
|
{
|
try
|
{
|
//发送添加命令
|
var responsePackNew = PirSend.Add(control);
|
if (responsePackNew != null && responsePackNew.Code == "0" && responsePackNew.Data.ToString() != "")
|
{
|
string sid = responsePackNew.Data.ToString();
|
controldata = "";
|
mqttdate = MqttDate("遥控器", sid);
|
if (mqttdate != null)
|
{
|
control.sid = sid;
|
}
|
}
|
|
}
|
catch { }
|
finally
|
{
|
Application.RunOnMainThread(() =>
|
{
|
loading.Hide();
|
///这里:监听MTTP推送下来主题;
|
if (mqttdate != null)
|
{
|
//休眠1000毫秒,为等待云端创建deviceid;
|
System.Threading.Thread.Sleep(1000);
|
//读取添加遥控器deviceID,才知道是否添加成功;
|
GetControl(frame, control, (device) =>
|
{
|
if (device != null)
|
{
|
|
control.deviceId = device.deviceId;
|
//遥控器添加到列表;
|
if (null == Pir.currPir.FunctioList.Find((c) => c.deviceId == device.deviceId))
|
{
|
Pir.currPir.FunctioList.Add(device);
|
}
|
frame.RemoveFromParent();//添加成功关闭弹窗
|
action(control);
|
}
|
else
|
{
|
//监听Mqtt推送下来状态码做提示
|
View.FailView failView = new View.FailView();
|
failView.ShouError((view) =>
|
{
|
view.Close();
|
ThreadAddControl(control, frame, action);
|
});
|
|
}
|
|
});
|
}
|
else
|
{
|
//监听Mqtt推送下来状态码做提示
|
View.FailView failView = new View.FailView();
|
failView.ShouError((view) =>
|
{
|
view.Close();
|
ThreadAddControl(control, frame, action);
|
});
|
}
|
|
|
});
|
|
}
|
})
|
{ IsBackground = true }.Start();
|
|
}
|
/// <summary>
|
/// 获取红外设备列表
|
/// </summary>
|
/// <param name="frame">log图标加载界面</param>
|
/// <param name="action">回调函数</param>
|
public static void GetPirDeviceList(FrameLayout frame, Action action)
|
{
|
//清除之前列表;
|
Pir.pirDeviceList.Clear();
|
//加载log
|
Loading loading = new Loading();
|
frame.AddChidren(loading);
|
loading.Start();
|
new System.Threading.Thread(() =>
|
{
|
try
|
{
|
var responsePackNew = PirSend.GetDeviceList("ir.module");
|
if (responsePackNew != null && responsePackNew.Code == "0" && responsePackNew.Data.ToString() != "")
|
{
|
var jobject = Newtonsoft.Json.Linq.JObject.Parse(responsePackNew.Data.ToString());
|
string list = jobject["list"].ToString();
|
|
var jArray = Newtonsoft.Json.Linq.JArray.Parse(list);
|
for (int a = 0; a < jArray.Count; a++)
|
{
|
var jay = jArray[a];
|
string spk = jay["spk"].ToString();
|
if (spk == "ir.module")
|
{
|
//数据返序列化为Logic对象
|
var str = Newtonsoft.Json.JsonConvert.SerializeObject(jay);
|
var pirJosn = Newtonsoft.Json.JsonConvert.DeserializeObject<Pir>(str);
|
if (pirJosn != null)
|
{
|
|
if (null == PirDevice.Pir.pirDeviceList.Find((c) => c.deviceId == pirJosn.deviceId))
|
{
|
PirDevice.Pir.pirDeviceList.Add(pirJosn);
|
}
|
}
|
}
|
|
}
|
|
}
|
}
|
catch { }
|
finally
|
{
|
Application.RunOnMainThread(() =>
|
{
|
try
|
{
|
if (Pir.pirDeviceList.Count != 0)
|
{
|
GetControlList(() =>
|
{
|
loading.Hide();
|
action();
|
|
});
|
}
|
else
|
{
|
loading.Hide();
|
PirMethod method = new PirMethod();
|
method.ErrorShow(null, "读取红外宝列表失败");
|
}
|
}
|
catch { }
|
|
});
|
}
|
|
})
|
{ IsBackground = true }.Start();
|
|
}
|
/// <summary>
|
/// 获取所有红外宝遥控器列表
|
/// </summary>
|
/// <param name="action">回调函数</param>
|
public static void GetControlList(Action action)
|
{
|
|
new System.Threading.Thread(() =>
|
{
|
try
|
{
|
for (int i = 0; i < Pir.pirDeviceList.Count; i++)
|
{
|
var pirDevice = Pir.pirDeviceList[i];
|
try
|
{
|
var responsePackNew = PirSend.ControlList(pirDevice.deviceId);
|
if (responsePackNew != null && responsePackNew.Code == "0" && responsePackNew.Data.ToString() != "")
|
{
|
var jArray = JArray.Parse(responsePackNew.Data.ToString());
|
for (int a = 0; a < jArray.Count; a++)
|
{
|
var jay = jArray[a];
|
//数据返序列化为Logic对象
|
var str = Newtonsoft.Json.JsonConvert.SerializeObject(jay);
|
var pirJosn = Newtonsoft.Json.JsonConvert.DeserializeObject<Entity.Function>(str);
|
if (pirJosn != null)
|
{
|
if (null == pirDevice.FunctioList.Find((c) => c.sid == pirJosn.sid))
|
{
|
pirDevice.FunctioList.Add(pirJosn);
|
}
|
}
|
|
}
|
}
|
|
}
|
catch { }
|
|
}
|
}
|
catch { }
|
finally
|
{
|
|
Application.RunOnMainThread(() =>
|
{
|
action();
|
});
|
}
|
|
})
|
{ IsBackground = true }.Start();
|
|
}
|
|
/// <summary>
|
/// 获取单个红外宝遥控器列表
|
/// </summary>
|
/// <param name="action">回调函数</param>
|
public static void GetControlList(FrameLayout frame, Action action, Pir pirDevice)
|
{
|
ThreadSend(new Control { deviceId = pirDevice.deviceId }, (responsePackNew) =>
|
{
|
var jArray = JArray.Parse(responsePackNew.Data.ToString());
|
for (int a = 0; a < jArray.Count; a++)
|
{
|
var jay = jArray[a];
|
//数据返序列化为Logic对象
|
var str = Newtonsoft.Json.JsonConvert.SerializeObject(jay);
|
var pirJosn = Newtonsoft.Json.JsonConvert.DeserializeObject<Entity.Function>(str);
|
if (pirJosn != null)
|
{
|
if (null == pirDevice.FunctioList.Find((c) => c.deviceId == pirJosn.deviceId))
|
{
|
pirDevice.FunctioList.Add(pirJosn);
|
}
|
}
|
}
|
action();
|
}, "获取遥控器列表", "frame", frame, null);
|
|
}
|
/// <summary>
|
/// 获取设备详情通过(spk,sid)
|
/// </summary>
|
/// <param name="frame">log图标加载界面</param>
|
/// <param name="control">发送参数对象</param>
|
/// <param name="action">回调函数</param>
|
public void GetControl(FrameLayout frame, Control control, Action<Entity.Function> action)
|
{
|
ThreadSend(control, (responsePackNew) =>
|
{
|
var function = Newtonsoft.Json.JsonConvert.DeserializeObject<Entity.Function>(responsePackNew.Data.ToString());
|
action(function);
|
}, "获取设备详情", "frame", frame, null);
|
}
|
/// <summary>
|
/// 发送命令线程
|
/// </summary>
|
/// <param name="control">发送数据对象</param>
|
/// <param name="action">回调函数</param>
|
/// <param name="str">判断字符</param>
|
/// <param name="view">判断log父控件</param>
|
/// <param name="frame">log父控件</param>
|
/// <param name="dialog">log父控件</param>
|
/// <param name="attributesStatus">学习按键</param>
|
public static void ThreadSend(Control control, Action<ResponsePackNew> action, string str, string view, FrameLayout frame, Dialog dialog, Entity.AttributesStatus attributesStatus = null)
|
{
|
|
//加载log
|
Loading loading = new Loading();
|
if (view == "dialog")
|
{
|
dialog.AddChidren(loading);
|
}
|
else
|
{
|
frame.AddChidren(loading);
|
}
|
loading.Start();
|
ResponsePackNew responsePackNew = null;
|
new System.Threading.Thread(() =>
|
{
|
try
|
{
|
if (str == "删除")
|
{
|
responsePackNew = PirSend.DeleteDevice(control.deviceId);
|
}
|
else if (str == "修改名称")
|
{
|
|
responsePackNew = PirSend.DeviceRename(control.deviceId, control.name);
|
}
|
else if (str == "删除按键")
|
{
|
if (attributesStatus != null)
|
{
|
responsePackNew = PirSend.CodeRemove(attributesStatus, control.deviceId);
|
}
|
}
|
else if (str == "获取设备详情")
|
{
|
// 获取设备详情通过(spk,sid)
|
responsePackNew = PirSend.GetinfoBySid(control);
|
}
|
else if (str == "获取遥控器列表")
|
{
|
responsePackNew = PirSend.ControlList(control.deviceId);
|
}
|
else if (str == "库码测试")
|
{
|
responsePackNew = PirSend.CodeTest(control);
|
}
|
}
|
catch { }
|
finally
|
{
|
Application.RunOnMainThread(() =>
|
{
|
loading.Hide();
|
if (responsePackNew != null && responsePackNew.Code == "0" && responsePackNew.Data.ToString() != "")
|
{
|
action(responsePackNew);
|
}
|
else
|
{
|
PirMethod method = new PirMethod();
|
//自定义错误提示文本
|
string eorroText = "";
|
if (str == "删除")
|
{
|
}
|
else if (str == "修改名称")
|
{
|
|
}
|
else if (str == "删除按键")
|
{
|
}
|
else if (str == "获取设备详情")
|
{
|
}
|
else if (str == "获取遥控器列表")
|
{
|
}
|
else if (str == "库码测试")
|
{
|
}
|
method.ErrorShow(responsePackNew, eorroText);
|
}
|
|
});
|
}
|
|
})
|
{ IsBackground = true }.Start();
|
|
|
}
|
/// <summary>
|
/// MQTT主题推送下来的遥控器数据
|
/// </summary>
|
public static string controldata = "";
|
/// <summary>
|
/// MQTT主题推送下来按键的数据
|
/// </summary>
|
public static string buttondata = "";
|
/// <summary>
|
/// 判断这个主题是否是添加遥控器主题
|
/// </summary>
|
/// <param name="text">表示不同主题数据</param>
|
/// <param name="sid">唯一标识</param>
|
/// <param name="timeValue">等待时间值</param>
|
/// <returns></returns>
|
public Cloud MqttDate(string text, string sid, int timeValue = 10)
|
{
|
Cloud cloud = null;
|
var dateTime = DateTime.Now;
|
while ((DateTime.Now - dateTime).TotalMilliseconds < timeValue * 1000)
|
{
|
string str = "";
|
if (text == "遥控器")
|
{
|
str = controldata;
|
}
|
else if (text == "按键")
|
{
|
str = buttondata;
|
}
|
|
if (!string.IsNullOrEmpty(str))
|
{
|
try
|
{
|
var cloudjson = Newtonsoft.Json.JsonConvert.DeserializeObject<Cloud>(str);
|
for (int i = 0; i < cloudjson.objects.Count; i++)
|
{
|
var objects = cloudjson.objects[i];
|
if (sid == objects.sid)
|
{
|
cloud = cloudjson;
|
break;
|
}
|
}
|
if (cloud != null)
|
{
|
break;
|
}
|
}
|
catch { }
|
}
|
|
}
|
return cloud;
|
}
|
/// <summary>
|
/// 错误码提示
|
/// </summary>
|
/// <param name="responsePackNew"></param>
|
/// <param name="text">自定义错误文本</param>
|
/// <param name="popValue">弹框类型(1=闪烁弹框)</param>
|
public void ErrorShow(ResponsePackNew responsePackNew, string text, int popValue = 1)
|
{
|
string str = "";
|
if (text == "删除遥控器")
|
{
|
str = Language.StringByID(StringId.delFail);
|
}
|
else if (text == "读取红外宝列表失败")
|
{
|
str = Language.StringByID(StringId.huoqushujushibao);
|
}
|
else if (text == "添加失败")
|
{
|
str = Language.StringByID(StringId.tianjiashibai);
|
}
|
else
|
{
|
if (responsePackNew != null)
|
{
|
|
switch (responsePackNew.Code)
|
{
|
|
case "14005":
|
{
|
str = Language.StringByID(StringId.gatewayNotOnline);
|
}
|
break;
|
case "10807":
|
{
|
str = Language.StringByID(StringId.bunengchaoguo10);
|
}
|
break;
|
case "14002":
|
{
|
str = Language.StringByID(StringId.bucunzaichanpin);
|
}
|
break;
|
case "10805":
|
{
|
str = Language.StringByID(StringId.shebeibucunzai);
|
}
|
break;
|
case "14006":
|
{
|
str = Language.StringByID(StringId.shebeibuzaixian);
|
}
|
break;
|
case "9":
|
{
|
str = Language.StringByID(StringId.wangguanshebeibuzaixian);
|
}
|
break;
|
case "2":
|
{
|
str = Language.StringByID(StringId.xitongweihuzhong);
|
}
|
break;
|
default:
|
{
|
str = Language.StringByID(StringId.huoqushujushibao);
|
}
|
break;
|
|
}
|
}
|
}
|
switch (popValue)
|
{
|
case 1:
|
{
|
new Intelligence.Automation.LogicView.TipPopView().FlashingBox(str);
|
}
|
break;
|
case 2: { } break;
|
case 3: { } break;
|
}
|
}
|
/// <summary>
|
///指定刷新界面
|
/// </summary>
|
/// <param name="strView">判断字符</param>
|
public static void RefreshView(string strView)
|
{
|
//标记是不是已经刷新完成
|
bool if_bool = false;
|
for (int i = MainPage.BasePageView.ChildrenCount - 1; 0 <= i; i--)
|
{
|
var view = MainPage.BasePageView.GetChildren(i);
|
if (strView == "PirMain")
|
{
|
if (view.GetType() == typeof(PirMain))
|
{
|
//强制转换对象
|
var f = (PirMain)view;
|
//移除所有子控件
|
f.RemoveAll();
|
//重新加载UI
|
f.Show();
|
//退出for循环
|
//break;
|
if_bool = true;
|
}
|
}
|
if (if_bool)
|
{
|
//退出for循环
|
break;
|
}
|
}
|
}
|
/// <summary>
|
/// 指定删除界面
|
/// </summary>
|
/// <param name="strView">判断字符</param>
|
public static void RemoveView(string strView)
|
{
|
|
for (int i = MainPage.BasePageView.ChildrenCount - 1; 0 <= i; i--)
|
{
|
var view = MainPage.BasePageView.GetChildren(i);
|
if (strView == "PirMain")
|
{
|
if (view.GetType() == typeof(PirMain))
|
{
|
//移除界面
|
view.RemoveFromParent();
|
}
|
|
}
|
else if (strView == "AddControl")
|
{
|
|
if (view.GetType() == typeof(AddControl))
|
{
|
//找到移除
|
view.RemoveFromParent();
|
}
|
}
|
else if (strView == "AddControlComplete")
|
{
|
|
if (view.GetType() == typeof(AddControlComplete))
|
{
|
//找到移除
|
view.RemoveFromParent();
|
}
|
}
|
|
}
|
}
|
|
}
|
[Serializable]
|
public class Cloud
|
{
|
public string id = "";
|
public List<Objects> objects = new List<Objects>();
|
public string time_stamp = string.Empty;
|
}
|
[Serializable]
|
public class Objects
|
{
|
public string sid = string.Empty;
|
public string spk = string.Empty;
|
public List<Attributes> attributes = new List<Attributes>();
|
}
|
[Serializable]
|
public class Attributes
|
{
|
public string key = "";
|
public string data_type = "";
|
public List<string> value = new List<string>();
|
|
}
|
}
|