Пример #1
0
    public async void LeaveSession()
    {
        RtcRoom rtcRoom = Conductor.Instance.CurrentRoom;

        if (rtcRoom != null)
        {
            foreach (Peer peer in rtcRoom.Peers)
            {
                //since we call each other, we should say bye to each other
                Task t = peer.SendBye();

                peer.OnStringMessage -= Peer_OnStringMessage;
                peer.OnBinaryMessage -= Peer_OnBinaryMessage;
                peer.OnRemoteArgbWithCameraTransform -= Peer_OnRemoteArgbWithCameraTransform;
            }

            await Conductor.Instance.LeaveRtcRoom();
        }


        DeselectAllExperts();
        EnableAllExpers(true);
        videoContainer.SetActive(false);
        pictureContainer.SetActive(false);
        pictureBar.SetActive(false);
    }
Пример #2
0
    async public Task <RtcRoom> EnterSession(string sessionNumber, string pinCode)
    {
        RtcRoom rtcRoom = null;

        try
        {
            long roomNumber = long.Parse(sessionNumber);
            rtcRoom = await Conductor.Instance.EnterRtcRoom(roomNumber, pinCode);

            //SessionNumber = rtcRoom.RoomNumber.ToString();
            //PinCode = rtcRoom.PinCode;
            //Connected = true;

            foreach (Peer peer in rtcRoom.Peers)
            {
                peer.OnStringMessage += Peer_OnStringMessage;
                peer.OnBinaryMessage += Peer_OnBinaryMessage;
                peer.OnRemoteArgbWithCameraTransform += Peer_OnRemoteArgbWithCameraTransform;

                await peer.Call();
            }
        }
        catch (FormatException ex)
        {
            Debug.Log("wrong format of session number");
        }

        return(rtcRoom);
    }
Пример #3
0
    async public Task <RtcRoom> NewSession()
    {
        RtcRoom rtcRoom = await Conductor.Instance.CreateRtcRoom();

        if (rtcRoom != null)
        {
            //SessionNumber = rtcRoom.RoomNumber.ToString();
            //PinCode = rtcRoom.PinCode;
            return(rtcRoom);
        }

        return(null);
    }
Пример #4
0
    public async void OnJoinClicked()
    {
        Debug.Log("Joining session: " + SESSION_GUID);

        EnableAllExpers(false);
        videoContainer.SetActive(true);

        RtcRoom rtcRoom = null;

        try
        {
            CancellationToken cancellation = new CancellationToken();
            JToken            result       = await AzureService.Instance.findRoomForSpace(SESSION_GUID, cancellation);

            rtcRoom = result.ToObject <RtcRoom>();

            if (rtcRoom != null)
            {
                await EnterSession(rtcRoom.RoomNumber.ToString(), rtcRoom.PinCode);
            }
        }
        catch (Exception ex)
        {
            Debug.Log("failed to find room: " + ex.Message);

            if (ex.Message == "room not found")
            {
                //no room, create it
                try
                {
                    rtcRoom = await NewSession();

                    CancellationToken cancellation = new CancellationToken();

                    /*
                     * var serializer = new JsonSerializer
                     * {
                     *  ContractResolver = new CamelCasePropertyNamesContractResolver()
                     * };
                     */
                    await AzureService.Instance.updateRoomForSpace(SESSION_GUID, JToken.FromObject(rtcRoom), cancellation);
                }
                catch (Exception subEx)
                {
                    EnableAllExpers(true);
                    Debug.Log("failed to create room: " + subEx.Message);
                    showErr("无法加入会话");
                }
            }
            else if (ex.Message == "locked")
            {
                EnableAllExpers(true);
                showErr("另一位参与者正在创建会话,请稍候尝试");
            }
            else
            {
                EnableAllExpers(true);
                showErr("无法加入会话");
            }
        }
    }