Browse Source

рука-специалист в первом приближении

Rimmon 4 years ago
parent
commit
470872720c
2 changed files with 52 additions and 35 deletions
  1. 8 6
      Assets/Scripts/Net/Client.cs
  2. 44 29
      Assets/Scripts/RemoteAssist/RemoteClickAction.cs

+ 8 - 6
Assets/Scripts/Net/Client.cs

@@ -9,17 +9,17 @@ using System.Text;
 using System;
 using System.IO;
 using UnityEngine.UI;
-
+public enum RemoteAssistCMD { videoCallRequest, callStop, audioCallRequest, messageSend, imageSend };
 public class Client : MonoBehaviour
 {
     const byte PING_PACKET = 30;
 
     enum ImageCMD { receiveImage, streamStart, streamStop, receiveImageRemoteAssist };
-    enum RemoteAssistCMD { videoCallRequest, videoCallStop, audioCallRequest, audioCallStop, messageSend, imageSend };
+    
     Texture2D textureReceived;
     public GameObject UserInfo;
     public GameObject UserCameraImage;
-    GameObject RemoteAssistCanvas;
+    public GameObject RemoteAssistCanvas;
 
     public static Client instance;
     public const int socketPort = 87;
@@ -188,7 +188,7 @@ public class Client : MonoBehaviour
     void RemoteAssistCallCallback(byte[] bytedata)
     {
         var cmd = (RemoteAssistCMD)bytedata[5];
-        uint toId = BitConverter.ToUInt32(bytedata, 6);
+        uint fromId = BitConverter.ToUInt32(bytedata, 6);
         RemoteAssistCanvas.SetActive(true);
         Debug.Log(cmd);
         switch (cmd)
@@ -196,6 +196,7 @@ public class Client : MonoBehaviour
             case RemoteAssistCMD.videoCallRequest:
                 //Сделать активной кнопку звонка!!!
                 //RemoteAssistCanvas.set
+                remoteScript_.StartSession(fromId);
                 break;
         }
         
@@ -457,6 +458,7 @@ public class Client : MonoBehaviour
         tempflag = "";
         entered = true;
         CreateCameraImage();
+        RemoteAssistInit();
         RemoteAssistCanvas = GameObject.Find("RemoteAssistCanvas");
         RemoteAssistCanvas.SetActive(false);
     }
@@ -918,10 +920,10 @@ public class Client : MonoBehaviour
     /// Sender: current account, receiver account: target
     /// </summary>
     /// <param name="target">receiver account</param>
-    public void RemoteAssistRequestVideoCall(uint targetId)
+    public void RemoteAssistRequestVideoCall(uint targetId, RemoteAssistCMD cmd)
     {
         MemoryStream ms = new MemoryStream();
-        ms.WriteByte((byte)RemoteAssistCMD.videoCallRequest);
+        ms.WriteByte((byte)cmd);
         BinaryWriter bw = new BinaryWriter(ms);        
         bw.Write(targetId);
         var data = ConstructVariablePacket(59, ms.ToArray());        

+ 44 - 29
Assets/Scripts/RemoteAssist/RemoteClickAction.cs

@@ -13,10 +13,11 @@ public interface IVideoCallSession
     void OnHangup();
     void OnDraw();
     void OnEndDraw(byte[] image);
-}
+    }
 
-public class RemoteClickAction : MonoBehaviour
+public class RemoteClickAction : MonoBehaviour, IVideoCallSession
 {
+    uint SessionCallerId;
     // Use this for initialization
     void Start ()
     {
@@ -94,16 +95,28 @@ public class RemoteClickAction : MonoBehaviour
         }
     }
 
-    public void StartSession(string callerName, IVideoCallSession session)
+    public void StartSession(uint callerID)
     {
-        session_ = session;
-
-        callerName_.text = "call from " + callerName + "...";
+        session_ = this;
+        SessionCallerId = callerID;
         callCanvas_.SetActive(true);
+        callerName_.text = "call from " + callerID + "...";        
+    }
+    public void OnEndDraw(byte[] image)
+    {
+        //if (image != null)
+        //{
+        //    videoCalled_.SendImage(image);
+        //}
+        //else
+        //{
+        //    videoCalled_.Resume();
+        //}
     }
 
     public void StopSession()
     {
+        SessionCallerId = 0;
         callCanvas_.SetActive(false);
         onConnectCanvas_.SetActive(false);
         drawToolsCanvas_.SetActive(false);
@@ -113,44 +126,46 @@ public class RemoteClickAction : MonoBehaviour
         session_ = null;
     }
 
-    private void OnAnswer()
+    public void OnAnswer()
     {
         if (session_ != null)
         {
-            session_.OnAnswer();
+            Debug.Log("OnAnswer");
+            callCanvas_.SetActive(false);
+            onConnectCanvas_.SetActive(true);
+            Client.instance.RemoteAssistRequestVideoCall(SessionCallerId, RemoteAssistCMD.videoCallRequest);
         }
-        callCanvas_.SetActive(false);
-        onConnectCanvas_.SetActive(true);
-    }
-    private void OnDecline()
-    {
-        if (session_ != null)
-        {
-            session_.OnDecline();
-            session_ = null;
-        }
-        callCanvas_.SetActive(false);
     }
-    private void OnDraw()
+
+    public void OnDraw()
     {
-        if (session_ != null)
-        {
-            session_.OnDraw();
-        }
         drawControl_.Clear();
         onConnectCanvas_.SetActive(false);
         drawToolsCanvas_.SetActive(true);
         drawCanvas_.SetActive(true);
         state_ = STATE.DRAWING;
     }
-    private void OnHangup()
+    public void OnHangup()
     {
+        onConnectCanvas_.SetActive(false);
+        Client.instance.RemoteAssistRequestVideoCall(SessionCallerId, RemoteAssistCMD.callStop);
         if (session_ != null)
         {
-            session_.OnHangup();
-            session_ = null;
+            StopSession();
         }
-        onConnectCanvas_.SetActive(false);
+        Client.instance.RemoteAssistCanvas.SetActive(false);
+    }
+
+    public void OnDecline()
+    {
+        Debug.Log("OnDecline " + SessionCallerId);
+        callCanvas_.SetActive(false);
+        Client.instance.RemoteAssistRequestVideoCall(SessionCallerId, RemoteAssistCMD.callStop);
+        if (session_ != null)
+        {
+            StopSession();
+        }
+        Client.instance.RemoteAssistCanvas.SetActive(false);
     }
 
     private void OnSendImage()
@@ -160,7 +175,7 @@ public class RemoteClickAction : MonoBehaviour
         state_ = STATE.CAPTURING_SCREENSHOT;
     }
 
-    private void OnCancelDraw()
+    public void OnCancelDraw()
     {
         drawToolsCanvas_.SetActive(false);
         //ScreenCapture.CaptureScreenshot(SCREENSHOT_FILE_NAME, SCREENSHOT_SUPER_SIZE);