From c8c33200e43f05136eca9fc8ff4942f8def31cc6 Mon Sep 17 00:00:00 2001
From: JLChen <551775569@qq.com>
Date: 星期三, 18 八月 2021 10:45:40 +0800
Subject: [PATCH] 2021-08-18 1.完善Android对接LinphoneSDK 2.完善SIP相关接口对接

---
 HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs |  487 +++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 446 insertions(+), 41 deletions(-)

diff --git a/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs b/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs
index bd697ae..347ddd6 100644
--- a/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs
+++ b/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs
@@ -1,8 +1,17 @@
 锘縰sing System;
+using System.Collections.Generic;
+using System.Threading;
+
+using HDL_ON;
+using HDL_ON.DAL.Server;
+using HDL_ON.Entity;
 #if __Android__
+using Android.Content;
 using Android.Graphics;
 using Android.Widget;
 using Com.Hdl.Hdllinphonesdk;
+#else
+using Foundation;
 #endif
 
 namespace Shared
@@ -32,70 +41,466 @@
             }
         }
 
-
-        public void InitLinphone()
+        #region 鈻�  --  鍒濆鍖朣DK_______________________________
+        /// <summary>
+        /// 鍒濆鍖朣DK
+        /// </summary>
+        void InitLinphone()
         {
+            //闃叉閲嶅鍒濆鍖�
+            if (isInitSdk) return;
+
+            isInitSdk = true;
+
 #if __IOS__
 
+            Shared.IOS.HDLLinphoneSDK.HDLLinPhoneSDK.Instance().InitalLinPhone();
 #else
-
-            Com.Hdl.Hdllinphonesdk.Core.EasyLinphone.InitLinphone(Application.Activity);
+            Com.Hdl.Hdllinphonesdk.HDLLinphoneKit.Instance.InitLinphone(Application.Activity);
             setOnHDLLinphoneCallListener();
-            Com.Hdl.Hdllinphonesdk.Core.EasyLinphone.SetAccountAndLogin("3333", "85521566", "116.62.26.215:5060");
-
 #endif
 
 
         }
 
-#if __Android__
+        /// <summary>
+        /// 褰撳墠鐧诲綍鐨凷ip璐﹀彿
+        /// </summary>
+        HDLSipInfo currentHDLSipInfo;
+        /// <summary>
+        /// 璁剧疆sip鐧诲綍璐﹀彿
+        /// </summary>
+        /// <param name="mHDLSipInfo"></param>
+        public void SetAccountAndLogin(HDLSipInfo mHDLSipInfo) {
 
+            this.currentHDLSipInfo = mHDLSipInfo;
 
+            if (mHDLSipInfo == null) return;
+          
+#if __IOS__
+            //Shared.IOS.HDLLinphoneSDK.HDLLinPhoneSDK.Instance().Login("3333", "85521566", "116.62.26.215:5060");
+            Shared.IOS.HDLLinphoneSDK.HDLLinPhoneSDK.Instance().Login(mHDLSipInfo.sipAccount, mHDLSipInfo.sipPasswd, mHDLSipInfo.realm);
+#else
+            Com.Hdl.Hdllinphonesdk.HDLLinphoneKit.Instance.SetAccountAndLogin(mHDLSipInfo.sipAccount, mHDLSipInfo.sipPasswd, mHDLSipInfo.realm);
+            //Com.Hdl.Hdllinphonesdk.Core.EasyLinphone.SetAccountAndLogin("61723164995710", "8ec02ce0", "47.94.42.230:25060");
+#endif
 
-                class HDLLinphoneCallListener : Java.Lang.Object, Com.Hdl.Hdllinphonesdk.Callback.IOnHDLLinphoneCallListener
+        }
+        #endregion
+
+        #region 鈻�  -- 鍔ㄤ綔鍥炶皟鍜屽師鐢熶氦浜掞紝鎻愪氦璁板綍鍒颁簯绔痏______________________________
+        /// <summary>
+        /// 鍙瀵硅璁惧鍙傛暟
+        /// </summary>
+        public HDLCallVideoInfo mHDLCallVideoInfo;
+
+        /// <summary>
+        /// 鍒濆鍖栧懠鍙弬鏁�
+        /// </summary>
+        /// <param name="mHDLCallVideoInfo"></param>
+        /// <param name="mInterphoneType"></param>
+        public void InitCallInfo(HDLCallVideoInfo mHDLCallVideoInfo)
+        {
+            this.mHDLCallVideoInfo = mHDLCallVideoInfo;
+        }
+
+        /// <summary>
+        /// 鍒ゆ柇callId鏄惁涓虹┖
+        /// </summary>
+        /// <returns></returns>
+        bool CheckmHDLCallVideoInfoIsNullOrEmpty()
+        {
+            //return false;
+            return (mHDLCallVideoInfo == null || string.IsNullOrEmpty(mHDLCallVideoInfo.CallId));
+        }
+
+        /// <summary>
+        /// 鎴浘鎴愬姛
+        /// </summary>
+        public void ScreenshotSuccessfulAction(byte[] dataBytes)
+        {
+            //Utlis.WriteLine("ScreenshotSuccessfulAction");
+
+            if (CheckmHDLCallVideoInfoIsNullOrEmpty()) return;
+
+            new Thread(() =>
+            {
+                //var imageName = Guid.NewGuid().ToString();
+                Dictionary<string, object> dic = new Dictionary<string, object>();
+                dic.Add("callId", mHDLCallVideoInfo.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)
                 {
-                    //showToast
-                    void showToast(string text)
+                    //Utlis.WriteLine("POST 鎴浘涓婁紶鎴愬姛");
+                }
+                else
+                {
+                    Utlis.WriteLine("POST 鎴浘涓婁紶澶辫触 code: " + revertObj.Code);
+                }
+
+            })
+            { IsBackground = false }.Start();
+
+        }
+
+        DateTime UnlockDateTime = DateTime.MinValue;
+        #endregion
+
+        #region 鈻�  --  鏂版帴鍚拰寮�閿佹帴鍙______________________________
+        /// <summary>
+        /// 寮�閿�
+        /// </summary>
+        public void HDLUnlockAction()
+        {
+            //Utlis.WriteLine("UnlockAction");
+
+            if (mHDLCallVideoInfo == null) return;
+
+            new Thread(() =>
+            {
+                Dictionary<string, object> dic = new Dictionary<string, object>();
+                dic.Add("deviceId", mHDLCallVideoInfo.DeviceId);//璁惧id
+                dic.Add("callId", mHDLCallVideoInfo.CallId);
+                dic.Add("interphoneType", mHDLCallVideoInfo.InterphoneType);
+                dic.Add("homeId", mHDLCallVideoInfo.HomeId);
+                var requestJson = HttpUtil.GetSignRequestJson(dic);
+                var revertObj = HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_VideoDevice_OpenDoorbell, requestJson);
+
+                Application.RunOnMainThread(() =>
+                {
+
+#if __IOS__
+                    if (revertObj.Code == StateCode.SUCCESS)
                     {
-
-                        Toast.MakeText(Application.Activity, text, ToastLength.Short).Show();
+                        //鍜屽師鐢熺洃鎺х晫闈氦浜掋�佸彂閫佸紑閿佹垚鍔熼�氱煡
+                        NSNotificationCenter.DefaultCenter.PostNotificationName("lcCallDelegateOpenDoorSuccess", null);
                     }
-
-                    public void OnAnswerAction()
+                    else
                     {
-                        showToast("鎺ュ惉");
+                        Utlis.WriteLine("POST 寮�閿佸け璐� code: " + revertObj.Code);
                     }
-
-                    public void OnHangUpAction(int callDuration)
-                    {
-
-                        showToast("鎸傛柇 閫氳瘽鏃堕暱锛�" + callDuration);
-                    }
-
-                    public void OnRejectCallAction()
-                    {
-                        showToast("鎷掓帴");
-                    }
-
-                    public void OnScreenshotSuccessfulAction(Bitmap p0)
-                    {
-                        showToast("鎴浘");
-                    }
-
-                    public void OnUnlockAction()
+#else
+                    if (revertObj.Code == StateCode.SUCCESS)
                     {
                         HDLLinphoneKit.Instance.OnOpenSuccess();
                     }
-
-                }
-
-                void setOnHDLLinphoneCallListener()
-                {
-                    HDLLinphoneKit.Instance.OnHDLLinphoneCallListener = new HDLLinphoneCallListener();
-
-                }
+                    else
+                    {
+                        Utlis.WriteLine("POST 寮�閿佸け璐� code: " + revertObj.Code);
+                        HDLLinphoneKit.Instance.OnOpenError(revertObj.message);
+                    }
 #endif
 
 
+                });
+
+
+            })
+            { IsBackground = false }.Start();
+        }
+
+        /// <summary>
+        /// 鏇存敼閫氳瘽鐘舵��
+        /// </summary>
+        public void HDLUpdateCallStatus(CallStatusType callStatusType, InterphoneType interphoneType, int callDuration = 0)
+        {
+
+            if (CheckmHDLCallVideoInfoIsNullOrEmpty()) return;
+
+            new Thread(() =>
+            {
+                Dictionary<string, object> dic = new Dictionary<string, object>();
+                dic.Add("callId", mHDLCallVideoInfo.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
+
+        #region 鈻�  --  鑾峰彇sip璐﹀彿_______________________________
+        /// <summary>
+        /// 鏄惁鍒濆鍖栦簡SDK
+        /// </summary>
+        public bool isInitSdk;
+        /// <summary>
+        /// 鑾峰彇褰撳墠浣忓畢鐨凷IP璐﹀彿
+        /// </summary>
+        public HDLSipInfo GetHDLSipInfo(string homeId)
+        {
+            Dictionary<string, object> d = new Dictionary<string, object>();
+            d.Add("homeId", homeId);
+
+            var requestJson = HttpUtil.GetSignRequestJson(d);
+            var resultObj = HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_VideoDevice_GetSipAccount, requestJson);
+
+            if (resultObj.Code == StateCode.SUCCESS)
+            {
+                if (string.IsNullOrEmpty(resultObj.Data.ToString()))
+                {
+                    //鎺х殑璇濅唬琛ㄥ綋鍓嶄綇瀹呬笉鏀寔
+                    return null;
+                }
+                else
+                {
+                    var info = Newtonsoft.Json.JsonConvert.DeserializeObject<HDLSipInfo>(resultObj.Data.ToString());
+                    return info;
+                }
+            }
+            else
+            {
+                return null;
+            }
+
+        }
+
+        /// <summary>
+        /// 鑾峰彇褰撳墠浣忓畢Sip璐﹀彿淇℃伅骞跺垵濮嬪寲LinphoneSDK鍜岀櫥褰�
+        /// </summary>
+        /// <param name="homeId"></param>
+        public void getHDLSipInfoAndInitSDK(string homeId)
+        {
+            try
+            {
+                //鍏堟竻绌哄懠鍙拰鐩戣璁惧淇℃伅
+                InitCallInfo(null);
+                HDLSipInfo mHDLSipInfo = GetHDLSipInfo(homeId);
+                if (mHDLSipInfo != null)
+                {
+                    InitLinphone();
+                    mHDLSipInfo.homeId = homeId;
+                    SetAccountAndLogin(mHDLSipInfo);
+                    //Application.RunOnMainThread(() =>
+                    //{
+                    //    InitLinphone();
+                    //    SetAccountAndLogin(mHDLSipInfo);
+                    //});
+                }
+            }
+            catch
+            {
+
+            }
+        }
+        #endregion
+
+        #region 鈻�  --  璺宠浆鐩戞帶椤甸潰_______________________________
+        /// <summary>
+        /// 璺宠浆鐩戞帶椤甸潰
+        /// </summary>
+        /// <param name="mESVideoInfo"></param>
+        public void ShowESVideoMonitor(ESVideoInfo mESVideoInfo)
+        {
+            HDLCallVideoInfo mHDLCallVideoInfo = new HDLCallVideoInfo();
+            mHDLCallVideoInfo.HomeId = mESVideoInfo.HomeId;
+            mHDLCallVideoInfo.DeviceId = mESVideoInfo.Lc_DeviceId;
+            mHDLCallVideoInfo.DeviceName = mESVideoInfo.DeviceName;
+            mHDLCallVideoInfo.InterphoneType = InterphoneType.HDL.ToString();
+            mHDLCallVideoInfo.DeviceSipAccount = mESVideoInfo.deviceSipAccount;//鐩戣涓诲姩鍛煎彨闂ㄥ彛鏈烘椂鐢ㄥ埌
+            InitCallInfo(mHDLCallVideoInfo);
+
+#if __IOS__
+               
+#else
+            Com.Hdl.Hdllinphonesdk.HDLLinphoneKit.Instance.CallTo(mHDLCallVideoInfo.DeviceSipAccount, true);
+            var intent = new Intent(Shared.Application.Activity, typeof(Com.Hdl.Hdllinphonesdk.Activity.HDLLinphoneMonitorActivity)); ;
+            intent.PutExtra(HDLLinphoneKit.KeyTitleName, mHDLCallVideoInfo.DeviceName);
+            Shared.Application.Activity.StartActivity(intent);
+#endif
+
+        }
+        #endregion
+
+
+        #region 鈻�  --  璺宠浆鍛煎彨椤甸潰_______________________________
+        /// <summary>
+        /// 璺宠浆鍛煎彨椤甸潰
+        /// </summary>
+        /// <param name="mESVideoInfo"></param>
+        public void ShowESVideoIntercom(ESVideoInfo mESVideoInfo)
+        {
+            HDLCallVideoInfo mHDLCallVideoInfo = new HDLCallVideoInfo();
+            mHDLCallVideoInfo.CallId = mESVideoInfo.callId;
+            mHDLCallVideoInfo.HomeId = mESVideoInfo.HomeId;
+            mHDLCallVideoInfo.DeviceId = mESVideoInfo.Lc_DeviceId;
+            mHDLCallVideoInfo.DeviceName = mESVideoInfo.DeviceName;
+            mHDLCallVideoInfo.InterphoneType = InterphoneType.HDL.ToString();
+            mHDLCallVideoInfo.DeviceSipAccount = mESVideoInfo.deviceSipAccount;
+            InitCallInfo(mHDLCallVideoInfo);
+
+#if __IOS__
+               
+#else
+            var intent = new Intent(Shared.Application.Activity, typeof(Com.Hdl.Hdllinphonesdk.Activity.HDLLinphoneIntercomActivity)); ;
+            intent.PutExtra(HDLLinphoneKit.KeyTitleName, mHDLCallVideoInfo.DeviceName);
+            Shared.Application.Activity.StartActivity(intent);
+#endif
+
+        }
+        #endregion
+
+
+        #region 鈻�  --  Android鐩稿叧鎿嶄綔_______________________________
+
+#if __Android__
+
+        /// <summary>
+        /// 鎺ュ惉銆佹寕鏂�佸紑閿佺瓑鍔ㄤ綔鐩戝惉澶勭悊
+        /// </summary>
+        private class HDLLinphoneCallListener : Java.Lang.Object, Com.Hdl.Hdllinphonesdk.Callback.IOnHDLLinphoneCallListener
+        {
+            [Weak] HDLLinphone hdlLinphone;
+
+            public HDLLinphoneCallListener(HDLLinphone mHDLLinphone)
+            {
+                hdlLinphone = mHDLLinphone;
+            }
+
+
+            //showToast
+            void showToast(string text)
+            {
+                Toast.MakeText(Application.Activity, text, ToastLength.Short).Show();
+            }
+
+            public void OnAnswerAction()
+            {
+                showToast("鎺ュ惉");
+                hdlLinphone.HDLUpdateCallStatus(CallStatusType.RECEIVED, InterphoneType.HDL);
+            }
+
+            public void OnHangUpAction(int callDuration)
+            {
+
+                showToast("鎸傛柇 閫氳瘽鏃堕暱锛�" + callDuration);
+                hdlLinphone.HDLUpdateCallStatus(CallStatusType.RECEIVED, InterphoneType.HDL, callDuration);
+            }
+
+            public void OnRejectCallAction()
+            {
+                showToast("鎷掓帴");
+                hdlLinphone.HDLUpdateCallStatus(CallStatusType.REJECT, InterphoneType.HDL);
+            }
+
+            public void OnScreenshotSuccessfulAction(Bitmap p0)
+            {
+                showToast("鎴浘鎴愬姛");
+            }
+
+            public void OnUnlockAction()
+            {
+                hdlLinphone.HDLUnlockAction();
+            }
+
+        }
+
+        /// <summary>
+        /// 璁剧疆鍘熺敓鐨凩istener鐩戝惉
+        /// </summary>
+        void setOnHDLLinphoneCallListener()
+        {
+            HDLLinphoneKit.Instance.OnHDLLinphoneCallListener = new HDLLinphoneCallListener(this);
+        }
+
+#endif
+        #endregion
     }
+
+    /// <summary>
+    /// SIP鍙瀵硅鍙傛暟
+    /// </summary>
+    public class HDLCallVideoInfo
+    {
+        /// <summary>
+        /// 璁惧搴忓垪鍙凤紝閫氳蹇呰瀛楁
+        /// </summary>
+        public string DeviceId = string.Empty;
+        /// <summary>
+        /// 璁惧鍚嶇О
+        /// </summary>
+        public string DeviceName = string.Empty;
+        /// <summary>
+        /// 璁惧Sip璐﹀彿
+        /// </summary>
+        public string DeviceSipAccount = string.Empty;
+        /// <summary>
+        /// 鍛煎彨璁板綍Id
+        /// </summary>
+        public string CallId = string.Empty;
+        /// <summary>
+        /// 浣忓畢Id
+        /// </summary>
+        public string HomeId = string.Empty;
+        /// <summary>
+        /// 璐﹀彿
+        /// </summary>
+        public string Username = string.Empty;
+        /// <summary>
+        /// 瀵嗙爜
+        /// </summary>
+        public string Password = string.Empty;
+        /// <summary>
+        /// Domain
+        /// </summary>
+        public string Domain = string.Empty;
+        /// <summary>
+        /// 绫诲瀷
+        /// </summary>
+        public string InterphoneType;
+
+    }
+
+    /// <summary>
+    /// SIP璐﹀彿鐩稿叧淇℃伅
+    /// </summary>
+    public class HDLSipInfo
+    {
+        /// <summary>
+        /// Sip鏈嶅姟鍣�
+        /// </summary>
+        public string proxy { get; set; }
+        /// <summary>
+        /// 璁惧鍩�
+        /// </summary>
+        public string realm { get; set; }
+        /// <summary>
+        /// sip璐﹀彿
+        /// </summary>
+        public string sipAccount { get; set; }
+        /// <summary>
+        /// sipPasswd	sip瀵嗙爜
+        /// </summary>
+        public string sipPasswd { get; set; }
+        /// <summary>
+        /// 浣忓畢ID
+        /// </summary>
+        public string homeId;
+    }
+
+
 }

--
Gitblit v1.8.0