using System;
using HDL_ON;
using HDL_ON.DAL.Server;
using System.Threading;
using System.Collections.Generic;
#if __IOS__
using Shared.IOS.ESVideoOnSDK;
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.
}
///
/// 监控页面
///
/// 丰林监视所需相关参数
public void ShowESVideoMonitor(ESVideoInfo mESVideoInfo)
{
#if __IOS__
int roomID = 0;
int.TryParse(mESVideoInfo.roomno, out roomID);
ESOnMonitorViewController vc = new ESOnMonitorViewController();
vc.MESVideoID = mESVideoInfo.ESVideoUUID;
vc.MESRoomID =roomID;
vc.DeviceName = mESVideoInfo.DeviceName;
//vc.RoomName = mESVideoInfo.RoomName;
//vc.MESCallDelegate = new OnESCallDelegate(this);
mOnESCallDelegate = new OnESCallDelegate(this);
vc.MESCallDelegate = mOnESCallDelegate;
Shared.Application.currentVC.NavigationController.PushViewController(vc, true);
#else
Intent intent = new Intent(Shared.Application.Activity, typeof(HDL_ON_Android.VideoActivity));
intent.PutExtra("ESVideoUUID", mESVideoInfo.ESVideoUUID);
intent.PutExtra("uuid", mESVideoInfo.uuid);
intent.PutExtra("DeviceName", mESVideoInfo.DeviceName);
intent.PutExtra("cmtID", mESVideoInfo.cmtID);
intent.PutExtra("roomno", mESVideoInfo.roomno);
intent.PutExtra("unitno", mESVideoInfo.unitno);
//intent.PutExtra("HomeID", mESVideoInfo.HomeID);
intent.PutExtra("callId", mESVideoInfo.callId);
intent.PutExtra("Type", 0);
Shared.Application.Activity.StartActivity(intent);
#endif
}
///
/// 被呼叫页面
///
/// 丰林呼叫功能所需相关参数
public void ShowESvideoVideoIntercom(ESVideoInfo mESVideoInfo)
{
this.esVideoInfo = mESVideoInfo;
#if __IOS__
int roomID = 0;
int.TryParse(mESVideoInfo.roomno, out roomID);
ESOnIntercomViewController vc = new ESOnIntercomViewController();
vc.MESVideoID = mESVideoInfo.ESVideoUUID;
vc.MESRoomID = roomID;
vc.DeviceName = mESVideoInfo.DeviceName;
//vc.RoomName = mESVideoInfo.RoomName;
//vc.MESCallDelegate = new OnESCallDelegate(this);
mOnESCallDelegate = new OnESCallDelegate(this);
vc.MESCallDelegate = mOnESCallDelegate;
Shared.Application.currentVC.NavigationController.PushViewController(vc, true);
#else
Intent intent = new Intent(Shared.Application.Activity, typeof(HDL_ON_Android.VideoActivity));
intent.PutExtra("ESVideoUUID", mESVideoInfo.ESVideoUUID);
intent.PutExtra("uuid", mESVideoInfo.uuid);
intent.PutExtra("DeviceName", mESVideoInfo.DeviceName);
intent.PutExtra("cmtID", mESVideoInfo.cmtID);
intent.PutExtra("roomno", mESVideoInfo.roomno);
intent.PutExtra("unitno", mESVideoInfo.unitno);
//intent.PutExtra("HomeID", mESVideoInfo.HomeID);
intent.PutExtra("callId", mESVideoInfo.callId);
intent.PutExtra("Type", 1);
Shared.Application.Activity.StartActivity(intent);
#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
#if __IOS__
#region OnESCallDelegate
///////
/////// OnESCallDelegate 继承响应事件
///////
OnESCallDelegate mOnESCallDelegate;
///
/// iOS原生委托事件
///
public class OnESCallDelegate : ESCallDelegate
{
///
/// ESOnVideo
///
[Weak] ESOnVideo _ESOnVideo;
///
/// 初始化
///
/// 呼叫相关的参数
public OnESCallDelegate(ESOnVideo mESOnVideo)
{
_ESOnVideo = mESOnVideo;
}
///
/// 接听
///
public override void OnAnswerAction()
{
_ESOnVideo.AnswerAction();
}
///
/// 挂断
///
///
public override void OnHangUpAction(int callDuration)
{
_ESOnVideo.HangUpAction(callDuration);
}
///
/// 拒接
///
public override void OnRejectCallAction()
{
_ESOnVideo.RejectCallAction();
}
///
/// 截图成功
///
///
public override void OnScreenshotSuccessfulAction(UIImage image)
{
//NSData imageData = UIImagePNGRepresentation(image); UIImage
NSData imageData = image.AsPNG();
byte[] dataBytes = new byte[imageData.Length];
System.Runtime.InteropServices.Marshal.Copy(imageData.Bytes, dataBytes, 0, Convert.ToInt32(imageData.Length));
//image.g
_ESOnVideo.ScreenshotSuccessfulAction(dataBytes);
}
///
/// 开锁成功
///
public override void OnUnlockAction()
{
_ESOnVideo.UnlockAction();
}
}
#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);
}
}
}
///
/// 丰林监视和呼叫功能所需相关参数
///
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;
}
}