using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Security;
using System.Text;
using HDL_ON.DAL.Server;
using HDL_ON.Entity;
using Newtonsoft.Json.Linq;
using Shared;
namespace HDL_ON.UI.Music
{
public class SendMethod
{
private static SendMethod s_Current = null;
public static SendMethod Current
{
get
{
if (s_Current == null)
{
s_Current = new SendMethod();
}
return s_Current;
}
}
///
/// 获取音乐列表
///
public List GetMusicList
{
get
{
return FunctionList.List.GetMusicList();
}
}
///
/// 发送控制命令
///
/// 当前设备
/// 发送控制数据
public void SendControlCommand(Function function, Dictionary dic)
{
new System.Threading.Thread(() =>
{
DriverLayer.Control.Ins.SendWriteCommand(function, dic, false, 0);
})
{ IsBackground = true }.Start();
}
///
/// 获取设备最新的状态
///
///
public void GetDeviceStatus(ref A31MusicModel a31Music, List functionIds, string sid)
{
try
{
//RefreshDeviceStatus(functionIds);
a31Music.LastDateTime = DateTime.Now;
///从缓存里面查找音乐播放器对象<收到推送过来的状态会更新缓存数据>
var allLocalFuntion = FunctionList.List.GetDeviceFunctionList();
var localFunction = allLocalFuntion.Find((obj) => obj.sid == sid);
if (localFunction == null)
{
return;
}
///更新的数据
a31Music.functionMusic = localFunction;
}
catch { }
}
///
/// 刷新设备状态
///
///
public void RefreshDeviceStatus(List functionIds)
{
try
{
Dictionary d = new Dictionary();
d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
d.Add("deviceIds", functionIds);
var responsePackNew = RequestServerhomeId(d, NewAPI.Api_Post_RefreshDeviceStatus, "刷新设备状态");
if (!this.DataChecking(responsePackNew))
{
return;
}
}
catch { }
}
///
/// 设备名称修改
///
public string EditDeviceName(string deviceId, string deviceName)
{
Dictionary d = new Dictionary();
d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
d.Add("deviceId", deviceId);
d.Add("name", deviceName);
var requestJson = HttpUtil.GetSignRequestJson(d);
return HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_EditDeviceName, requestJson).Code;
}
///
/// 获取当前播放音乐列表
///
/// 音乐播放器
/// 回调
///
public void GetCurrentPalyList(Function music, Action action)
{
try
{
Dictionary d = new Dictionary();
d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
d.Add("deviceIds", new List { music.deviceId });
var responsePackNew = RequestServerhomeId(d, NewAPI.Api_Post_PlayerList, "获取音乐列表");
if (!this.DataChecking(responsePackNew))
{
return;
}
//数据返序列化为Function对象
var str = Newtonsoft.Json.JsonConvert.SerializeObject(responsePackNew.Data);
var palyLists = Newtonsoft.Json.JsonConvert.DeserializeObject>(str);
if (palyLists == null)
{
palyLists = new List();
}
if (palyLists.Count > 0)
{
///默认拿第一个列表
A31MusicModel.Current.CurrentPlayMusicInfoList = palyLists[0].playlist;
}
}
catch
{
}
finally
{
Application.RunOnMainThread(() =>
{
action();
});
}
}
///
/// 获取【多个音乐源】列表名列表
///
///
/// 音乐源为null,支持多个源获取
///
public List GetMultipleSourceListName(Function music, string source)
{
try
{
Dictionary d = new Dictionary();
d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
d.Add("gatewayId", DB_ResidenceData.Instance.HomeGateway.gatewayId);
Dictionary deviceIds = new Dictionary();
deviceIds.Add("deviceId", music.deviceId);
if (!string.IsNullOrEmpty(source))
{
deviceIds.Add("source", source);
}
d.Add("deviceInfos", new List> { deviceIds });
var responsePackNew = RequestServerhomeId(d, NewAPI.Api_Post_GroupList, "获取列表名列表");
if (!this.DataChecking(responsePackNew))
{
return new List();
}
//数据返序列化为Function对象
var str = Newtonsoft.Json.JsonConvert.SerializeObject(responsePackNew.Data);
var groupLists = Newtonsoft.Json.JsonConvert.DeserializeObject>(str);
if (groupLists == null)
{
groupLists = new List();
}
return groupLists;
}
catch
{
return new List();
}
}
///
/// 获取【单个音乐源】列表名列表(默认取定列表中一个)
///
///
/// 音乐源
///
public GroupList GetSingleSourceListNameList(Function music, string source)
{
List groupList = this.GetMultipleSourceListName(music, source);
if (groupList.Count == 0)
{
return new GroupList();
}
////默认取定列表中一个
return groupList.Count > 0 ? groupList[0] : new GroupList();
}
///
/// 通过列表名获取【多个歌曲列表】
///
///
/// 列表名
/// 音乐源
///
public List GetMultipleSongListM(Function music, string listName, string source)
{
try
{
Dictionary d = new Dictionary();
Dictionary d1 = new Dictionary();
Dictionary d2 = new Dictionary();
d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.id);
d.Add("gatewayId", DB_ResidenceData.Instance.HomeGateway.gatewayId);
d2.Add("group", listName);
d1.Add("sid", music.sid);
if (!string.IsNullOrEmpty(source))
{
d1.Add("source", source);
}
d1.Add("groupList", new List> { d2 });
d.Add("sidGroups", new List> { d1 });
var responsePackNew = RequestServerhomeId(d, NewAPI.Api_Post_GroupPlayerList, "通过列表名获取歌曲列表");
if (!this.DataChecking(responsePackNew))
{
return new List();
}
//数据返序列化为Function对象
var str = Newtonsoft.Json.JsonConvert.SerializeObject(responsePackNew.Data);
var palyLists = Newtonsoft.Json.JsonConvert.DeserializeObject>(str);
if (palyLists == null)
{
return new List();
}
return palyLists;
}
catch
{
return new List();
}
}
///
/// 通过列表名获取【单个歌曲列表】(默认取定列表中一个歌曲列表)
///
///
/// 列表名
/// 音乐源
///
public SongList GetSingleSongList(Function music, string listName, string source)
{
List listInfos = this.GetMultipleSongListM(music, listName, source);
if (listInfos.Count == 0)
{
return new SongList();
}
////默认第一个列表里面第一个音乐列表
SongList songList = listInfos[0].playlist.Count > 0 ? listInfos[0].playlist[0] : new SongList();
return songList;
}
///
/// 检验数据回复成功或者失败
///
/// 回复数据对象
///
private bool DataChecking(ResponsePackNew responsePackNew)
{
if (responsePackNew.Data == null||responsePackNew.Code != "0" || responsePackNew.Data.ToString() == "")
{
return false;
}
return true;
}
///
///请求服务器(与住宅有关:例如;homeId)
///
/// 发送数据
/// 请求地址(不是绝对地址)
/// 标记->描述接口(自定义)
///
public ResponsePackNew RequestServerhomeId(object o, string api_Url, string tag, int mTimeout = 5)
{
JObject jobject = JObject.Parse(Newtonsoft.Json.JsonConvert.SerializeObject(o));
return UI2.Intelligence.Automation.Send.Current.RequestServerhomeId(jobject, api_Url, tag, mTimeout);
}
}
}