using System;
using HDL_ON;
using HDL_ON.DAL.Server;
using System.Threading;
using System.Collections.Generic;
using HDL_ON.UI.UI2.PersonalCenter.PirDevice;
using HDL_ON.Entity;
#if __IOS__
using UIKit;
using Foundation;
#else
using Android.Content;
#endif
namespace Shared
{
///
/// 丰林可视对讲
///
public class ESOnVideo
{
///
///
///
private static ESOnVideo m_Current = null;
///
///
///
public static ESOnVideo Current
{
get
{
if (m_Current == null)
{
m_Current = new ESOnVideo();
}
return m_Current;
}
}
///
/// 门口机、丰林小区信息和房间信息等参数
///
public ESVideoInfo esVideoInfo;
///
/// 暂时没用
///
public void InitESVideoSDK()
{
//ESVideo.
}
///
/// 如果域名包含china,则SDK 使用乐橙的中国大陆(正式)域名
///
///
bool GetIsChinaMainland()
{
////强制使用国内
//return true;
return OnAppConfig.Instance.RequestHttpsHost.Contains("china");//如果域名包含china,则SDK 使用乐橙的中国大陆(正式)域名
}
///
/// 监控页面
///
///
public void ShowESVideoMonitor(ESVideoInfo mESVideoInfo, string interphoneType)
{
this.esVideoInfo = mESVideoInfo;
int roomID = 0;
int.TryParse(mESVideoInfo.roomno, out roomID);
#if __IOS__
if (interphoneType == InterphoneType.HDL.ToString())
{
//HDLLinphone 狄耐克
HDLLinphone.Current.ShowESVideoMonitor(mESVideoInfo, interphoneType);
}
else
{
HDLUtils.WriteLine("未对接,不支持监视");
}
#else
Intent intent = null;
if (interphoneType == InterphoneType.HDL.ToString())
{
//HDLLinphone 狄耐克
HDLLinphone.Current.ShowESVideoMonitor(mESVideoInfo, InterphoneType.HDL.ToString());
}
else
{
HDLUtils.WriteLine("未对接,不支持监视");
}
#endif
}
///
/// 被呼叫页面
///
///
public void ShowESvideoVideoIntercom(ESVideoInfo mESVideoInfo, string interphoneType)
{
this.esVideoInfo = mESVideoInfo;
int roomID = 0;
int.TryParse(mESVideoInfo.roomno, out roomID);
#if __IOS__
if (interphoneType == InterphoneType.HDL.ToString())
{
//HDL Linphone 狄耐克
}
else{
HDLUtils.WriteLine("未支持的可视对讲类型");
}
#else
#region Android 处理
Intent intent = null;
if (interphoneType == InterphoneType.HDL.ToString())
{
//HDL Linphone 狄耐克
}
else
{
HDLUtils.WriteLine("未支持的可视对讲类型");
}
#endregion
#endif
}
#region 动作回调和原生交互,提交记录到云端
///
/// 判断callId是否为空
///
///
bool CheckESVideoInfoIsNullOrEmpty()
{
return (esVideoInfo == null || string.IsNullOrEmpty(esVideoInfo.callId));
}
///
/// 接听
///
void AnswerAction()
{
//Utlis.WriteLine("AnswerAction");
if (CheckESVideoInfoIsNullOrEmpty()) return;
new Thread(() =>
{
var requestJson = HttpUtil.GetSignRequestJson(esVideoInfo);
var revertObj = HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_FL_Answer, requestJson);
if (revertObj.Code == StateCode.SUCCESS)
{
//Utlis.WriteLine("POST 接听成功");
}
else
{
Utlis.WriteLine("POST 接听失败 code: " + revertObj.Code);
}
})
{ IsBackground = false }.Start();
}
///
/// 挂断
///
///
void HangUpAction(int callDuration)
{
//Utlis.WriteLine("HangUpAction :" + callDuration);
if (CheckESVideoInfoIsNullOrEmpty()) return;
new Thread(() =>
{
Dictionary dic = new Dictionary();
dic.Add("callId", esVideoInfo.callId);
dic.Add("callDuration", callDuration);
var requestJson = HttpUtil.GetSignRequestJson(dic);
var revertObj = HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_FL_HangUp, requestJson);
if (revertObj.Code == StateCode.SUCCESS)
{
//Utlis.WriteLine("POST 挂断成功");
}
else
{
Utlis.WriteLine("POST 挂断失败 code: " + revertObj.Code);
}
})
{ IsBackground = false }.Start();
}
///
/// 拒接
///
void RejectCallAction()
{
//Utlis.WriteLine("RejectCallAction");
if (CheckESVideoInfoIsNullOrEmpty()) return;
new Thread(() =>
{
Dictionary dic = new Dictionary();
dic.Add("callId", esVideoInfo.callId);
var requestJson = HttpUtil.GetSignRequestJson(dic);
var revertObj = HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_FL_Reject, requestJson);
if (revertObj.Code == StateCode.SUCCESS)
{
//Utlis.WriteLine("POST 拒接成功");
}
else
{
Utlis.WriteLine("POST 拒接失败 code: " + revertObj.Code);
}
})
{ IsBackground = false }.Start();
}
///
/// 截图成功
///
void ScreenshotSuccessfulAction(byte[] dataBytes)
{
//Utlis.WriteLine("ScreenshotSuccessfulAction");
if (CheckESVideoInfoIsNullOrEmpty()) return;
new Thread(() =>
{
//var imageName = Guid.NewGuid().ToString();
Dictionary dic = new Dictionary();
dic.Add("callId", esVideoInfo.callId);
dic.Add("images", dataBytes);
#if __IOS__
dic.Add("imagesName", "_IOS.jpg");
#else
dic.Add("imagesName", "_Android.jpg");
#endif
var requestJson = HttpUtil.GetSignRequestJson(dic);
var revertObj = HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_FL_Screenshot, requestJson);
if (revertObj.Code == StateCode.SUCCESS)
{
//Utlis.WriteLine("POST 截图上传成功");
}
else
{
Utlis.WriteLine("POST 截图上传失败 code: " + revertObj.Code);
}
})
{ IsBackground = false }.Start();
}
DateTime UnlockDateTime = DateTime.MinValue;
///
/// 开锁成功
///
void UnlockAction()
{
//Utlis.WriteLine("UnlockAction");
if (CheckESVideoInfoIsNullOrEmpty()) return;
//3S内不允许触发第二次
if (UnlockDateTime.AddSeconds(3) > DateTime.Now)
{
Utlis.WriteLine("3S内不允许触发第二次");
//丰林SDKbug,呼叫的时候开锁成功会有2次回调,
return;
}
UnlockDateTime = DateTime.Now;
new Thread(() =>
{
Dictionary dic = new Dictionary();
dic.Add("callId", esVideoInfo.callId);
var requestJson = HttpUtil.GetSignRequestJson(dic);
var revertObj = HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_FL_Unlock, requestJson);
if (revertObj.Code == StateCode.SUCCESS)
{
//Utlis.WriteLine("POST 开锁成功");
}
else
{
Utlis.WriteLine("POST 开锁失败 code: " + revertObj.Code);
}
})
{ IsBackground = false }.Start();
}
#endregion
#region 王赢新接听和开锁接口
///
/// 开锁
///
void HDLUnlockAction()
{
//Utlis.WriteLine("UnlockAction");
if (esVideoInfo == null) return;
new Thread(() =>
{
Dictionary dic = new Dictionary();
dic.Add("deviceId", esVideoInfo.Lc_DeviceId);//设备id
dic.Add("callId", esVideoInfo.callId);
var requestJson = HttpUtil.GetSignRequestJson(dic);
var revertObj = HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_VideoDevice_OpenDoorbell, requestJson);
if (revertObj.Code == StateCode.SUCCESS)
{
Application.RunOnMainThread(() =>
{
#if __IOS__
//和原生监控界面交互、发送开锁成功通知
NSNotificationCenter.DefaultCenter.PostNotificationName("lcCallDelegateOpenDoorSuccess", null);
#endif
});
}
else
{
Utlis.WriteLine("POST 开锁失败 code: " + revertObj.Code);
}
})
{ IsBackground = false }.Start();
}
///
/// 更改通话状态
///
void HDLUpdateCallStatus(CallStatusType callStatusType, InterphoneType interphoneType, int callDuration = 0) {
if (CheckESVideoInfoIsNullOrEmpty()) return;
new Thread(() =>
{
Dictionary dic = new Dictionary();
dic.Add("callId", esVideoInfo.callId);//呼叫id
dic.Add("callStatus", callStatusType.ToString());//可用值:MISSED,RECEIVED,REJECT
dic.Add("interphoneTypeEnum", interphoneType.ToString());//可用值:FLVI,IMOUVISIAL
if (callStatusType == CallStatusType.RECEIVED && callDuration > 0)
{
dic.Add("callDuration", callDuration);//通话时长(秒)
}
var requestJson = HttpUtil.GetSignRequestJson(dic);
var revertObj = HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_VideoDevice_UpdateCallStatus, requestJson);
if (revertObj.Code == StateCode.SUCCESS)
{
}
else
{
Utlis.WriteLine("POST 更新状态失败 code: " + revertObj.Code);
}
})
{ IsBackground = false }.Start();
}
#endregion
#if __IOS__
#region OnESCallDelegate
#endregion
#region OnLCCallDelegate
#endregion
#endif
/////
///// 测试方法
/////
/////
//public void Test(bool isMonitor = true)
//{
// ESVideoInfo eSVideoInfo = new ESVideoInfo()
// {
// DeviceName = "室外机88",
// ESVideoUUID = "JJY000019VPLLF",
// };
// if (isMonitor)
// {
// ShowESVideoMonitor(eSVideoInfo, "");
// }
// else
// {
// eSVideoInfo.callId = "88888";
// ShowESvideoVideoIntercom(eSVideoInfo, "");
// }
//}
}
///
/// 可视对讲参数对象(仅在最后一步跳转到activity时才调用,为了做兼容这里都数据有点乱,以后有时间再理顺思路优化)
///
public class ESVideoInfo
{
///
/// 室外机的UUID
/// 例:JJY000007FSEYX
///
public string ESVideoUUID = string.Empty;
///
/// 室外机的名称
/// 例:室外机
///
public string DeviceName = "室外机";
///
/// 丰林请求的唯一id
///
public string uuid = string.Empty;
///
/// 丰林社区id
///
public string cmtID = string.Empty;
///
/// 丰林房间号
///
public string roomno = string.Empty;
///
/// 丰林楼栋号
///
public string unitno = string.Empty;
/////
///// 丰林住宅Id
/////
//public string HomeID= string.Empty;
///
/// 呼叫记录Id
///
public string callId = string.Empty;
//========================大华==========================
///
/// 账号accessToken
/// 萤石子账号Token也共用这个字段
///
public string Lc_AccessToken = string.Empty;
///
/// 设备序列号,通讯必要字段
///
public string Lc_DeviceId = string.Empty;
///
/// 备注???
///
public string Lc_Psk = string.Empty;
///
/// 预览画面必须使用
///
public string Lc_PlayToken = string.Empty;
///
/// 账号标记:0国内,1国外;国内国外访问都地址不一样
///
public int Lc_Location = 0;
//========================萤石云猫眼==========================
///
/// 住宅Id
///
public string HomeId = string.Empty;
///
/// 设备序列号
///
public string DeviceSerial = string.Empty;
///
/// 服务器推送时间
///
public string currentTime = string.Empty;
///
/// 消息id
///
public string msgId = string.Empty;
//========================HDL SIP==========================
///
/// 设备sip账号 interphoneType是HDL时才会有值
///
public string deviceSipAccount;
///
/// spk
///
public string spk="";
//========================全视通==========================
///
/// 设备编号,相当于全视通的LocalDirectory字段
///
public string deviceCode;
}
///
/// 通话状态类型
///
public enum CallStatusType
{
///
/// 未接
///
MISSED,
///
/// 已接听
///
RECEIVED,
///
/// 拒接
///
REJECT,
}
///
/// 可视对讲设备平台类型
///
public enum InterphoneType
{
///
/// 狄耐克 HDL Linphone
///
HDL,
EZVIZ,
}
}