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
|
{
|
/// <summary>
|
/// 丰林可视对讲
|
/// </summary>
|
public class ESOnVideo
|
{
|
/// <summary>
|
///
|
/// </summary>
|
private static ESOnVideo m_Current = null;
|
/// <summary>
|
///
|
/// </summary>
|
public static ESOnVideo Current
|
{
|
get
|
{
|
if (m_Current == null)
|
{
|
m_Current = new ESOnVideo();
|
}
|
return m_Current;
|
}
|
}
|
|
/// <summary>
|
/// 门口机、丰林小区信息和房间信息等参数
|
/// </summary>
|
public ESVideoInfo esVideoInfo;
|
|
/// <summary>
|
///
|
/// </summary>
|
public void InitESVideoSDK()
|
{
|
//ESVideo.
|
}
|
|
/// <summary>
|
/// 监控页面
|
/// </summary>
|
/// <param name="mESVideoInfo"></param>
|
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);
|
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
|
}
|
|
|
|
/// <summary>
|
/// 被呼叫页面
|
/// </summary>
|
/// <param name="mESVideoInfo"></param>
|
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 动作回调,提交记录到云端
|
|
/// <summary>
|
/// 判断callId是否为空
|
/// </summary>
|
/// <returns></returns>
|
bool CheckESVideoInfoIsNullOrEmpty()
|
{
|
return (esVideoInfo == null || string.IsNullOrEmpty(esVideoInfo.callId));
|
}
|
|
/// <summary>
|
/// 接听
|
/// </summary>
|
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();
|
|
}
|
|
/// <summary>
|
/// 挂断
|
/// </summary>
|
/// <param name="callDuration"></param>
|
void HangUpAction(int callDuration)
|
{
|
//Utlis.WriteLine("HangUpAction :" + callDuration);
|
|
if (CheckESVideoInfoIsNullOrEmpty()) return;
|
|
new Thread(() =>
|
{
|
Dictionary<string, object> dic = new Dictionary<string, object>();
|
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();
|
}
|
|
/// <summary>
|
/// 拒接
|
/// </summary>
|
void RejectCallAction()
|
{
|
//Utlis.WriteLine("RejectCallAction");
|
|
if (CheckESVideoInfoIsNullOrEmpty()) return;
|
|
new Thread(() =>
|
{
|
Dictionary<string, object> dic = new Dictionary<string, object>();
|
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();
|
}
|
|
/// <summary>
|
/// 截图成功
|
/// </summary>
|
void ScreenshotSuccessfulAction(byte[] dataBytes)
|
{
|
//Utlis.WriteLine("ScreenshotSuccessfulAction");
|
|
if (CheckESVideoInfoIsNullOrEmpty()) return;
|
|
new Thread(() =>
|
{
|
//var imageName = Guid.NewGuid().ToString();
|
Dictionary<string, object> dic = new Dictionary<string, object>();
|
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;
|
/// <summary>
|
/// 开锁成功
|
/// </summary>
|
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<string, object> dic = new Dictionary<string, object>();
|
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
|
/////// <summary>
|
/////// OnESCallDelegate 继承响应事件
|
/////// </summary>
|
OnESCallDelegate mOnESCallDelegate;
|
|
/// <summary>
|
///
|
/// </summary>
|
public class OnESCallDelegate : ESCallDelegate
|
{
|
|
[Weak] ESOnVideo _ESOnVideo;
|
|
public OnESCallDelegate(ESOnVideo mESOnVideo)
|
{
|
_ESOnVideo = mESOnVideo;
|
}
|
|
/// <summary>
|
/// 接听
|
/// </summary>
|
public override void OnAnswerAction()
|
{
|
_ESOnVideo.AnswerAction();
|
}
|
|
/// <summary>
|
/// 挂断
|
/// </summary>
|
/// <param name="callDuration"></param>
|
public override void OnHangUpAction(int callDuration)
|
{
|
_ESOnVideo.HangUpAction(callDuration);
|
}
|
|
/// <summary>
|
/// 拒接
|
/// </summary>
|
public override void OnRejectCallAction()
|
{
|
_ESOnVideo.RejectCallAction();
|
}
|
|
/// <summary>
|
/// 截图成功
|
/// </summary>
|
/// <param name="image"></param>
|
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);
|
}
|
|
/// <summary>
|
/// 开锁成功
|
/// </summary>
|
public override void OnUnlockAction()
|
{
|
_ESOnVideo.UnlockAction();
|
}
|
|
}
|
|
#endregion
|
#endif
|
|
/// <summary>
|
/// 测试方法
|
/// </summary>
|
/// <param name="isMonitor"></param>
|
public void Test(bool isMonitor = true)
|
{
|
ESVideoInfo eSVideoInfo = new ESVideoInfo()
|
{
|
DeviceName = "室外机88",
|
ESVideoUUID = "JJY000019VPLLF",
|
|
};
|
if (isMonitor)
|
{
|
ShowESVideoMonitor(eSVideoInfo);
|
}
|
else
|
{
|
eSVideoInfo.callId = "88888";
|
ShowESvideoVideoIntercom(eSVideoInfo);
|
}
|
|
}
|
}
|
|
/// <summary>
|
///
|
/// </summary>
|
public class ESVideoInfo
|
{
|
/// <summary>
|
/// 室外机的UUID
|
/// 例:JJY000007FSEYX
|
/// </summary>
|
public string ESVideoUUID = string.Empty;
|
/// <summary>
|
/// 室外机的名称
|
/// 例:室外机
|
/// </summary>
|
public string DeviceName = "室外机";
|
/// <summary>
|
/// 丰林请求的唯一id
|
/// </summary>
|
public string uuid = string.Empty;
|
/// <summary>
|
/// 丰林社区id
|
/// </summary>
|
public string cmtID = string.Empty;
|
/// <summary>
|
/// 丰林房间号
|
/// </summary>
|
public string roomno = string.Empty;
|
/// <summary>
|
/// 丰林楼栋号
|
/// </summary>
|
public string unitno = string.Empty;
|
///// <summary>
|
///// 丰林住宅Id
|
///// </summary>
|
//public string HomeID= string.Empty;
|
/// <summary>
|
/// 呼叫记录Id
|
/// </summary>
|
public string callId = string.Empty;
|
|
}
|
|
|
|
|
}
|