Esempio n. 1
0
        private bool HTTPDisonnect(string connectionId)
        {
            HttpWebRequest request =
                (HttpWebRequest)WebRequest.Create($"{m_url}/signaling/connection");

            request.Method      = "Delete";
            request.ContentType = "application/json";
            request.Headers.Add("Session-Id", m_sessionId);
            request.KeepAlive = false;

            using (Stream dataStream = request.GetRequestStream())
            {
                byte[] bytes = new System.Text.UTF8Encoding().GetBytes($"{{\"connectionId\":\"{connectionId}\"}}");
                dataStream.Write(bytes, 0, bytes.Length);
                dataStream.Close();
            }

            var data = HTTPParseTextResponse(HTTPGetResponse(request));

            if (data == null)
            {
                return(false);
            }

            Debug.Log("Signaling: HTTP delete connection, connectionId : " + connectionId);
            m_mainThreadContext.Post(d => OnDestroyConnection?.Invoke(this, connectionId), null);
            return(true);
        }
Esempio n. 2
0
        private bool HTTPGetConnections()
        {
            HttpWebRequest request =
                (HttpWebRequest)WebRequest.Create($"{m_url}/signaling/connection");

            request.Method      = "GET";
            request.ContentType = "application/json";
            request.Headers.Add("Session-Id", m_sessionId);
            request.KeepAlive = false;

            HttpWebResponse       response = HTTPGetResponse(request);
            ConnectionResDataList list     = HTTPParseJsonResponse <ConnectionResDataList>(response);

            if (list == null)
            {
                return(false);
            }

            foreach (var deleted in m_connection.Except(list.connections.Select(x => x.connectionId)).ToList())
            {
                m_mainThreadContext.Post(d => OnDestroyConnection?.Invoke(this, deleted), null);
                m_connection.Remove(deleted);
            }

            foreach (var connection in list.connections)
            {
                m_connection.Add(connection.connectionId);
            }

            return(true);
        }
    //private void ProcessMessage(byte[] data)
    private void ProcessMessage(string content)
    {
        //var content = Encoding.UTF8.GetString(data);
        Debug.Log($"Signaling: Receiving message: {content}");

        try
        {
            var routedMessage = JsonUtility.FromJson <RoutedMessage <SignalingMessage> >(content);

            SignalingMessage msg;
            if (!string.IsNullOrEmpty(routedMessage.type))
            {
                msg = routedMessage.data;
            }
            else
            {
                msg = JsonUtility.FromJson <SignalingMessage>(content);
            }

            if (!string.IsNullOrEmpty(routedMessage.type))
            {
                if (routedMessage.type == "connect")
                {
                    msg = JsonUtility.FromJson <SignalingMessage>(content);
                    m_mainThreadContext.Post(d => OnCreateConnection?.Invoke(this, msg.connectionId, msg.peerExists),
                                             null);
                }
                else if (routedMessage.type == "disconnect")
                {
                    msg = JsonUtility.FromJson <SignalingMessage>(content);
                    m_mainThreadContext.Post(d => OnDestroyConnection?.Invoke(this, msg.connectionId), null);
                }
                else if (routedMessage.type == "offer")
                {
                    DescData offer = new DescData();
                    offer.connectionId = routedMessage.from;
                    offer.sdp          = msg.sdp;
                    m_mainThreadContext.Post(d => OnOffer?.Invoke(this, offer), null);
                }
                else if (routedMessage.type == "answer")
                {
                    DescData answer = new DescData
                    {
                        connectionId = routedMessage.from,
                        sdp          = msg.sdp
                    };
                    m_mainThreadContext.Post(d => OnAnswer?.Invoke(this, answer), null);
                }
                else if (routedMessage.type == "candidate")
                {
                    CandidateData candidate = new CandidateData
                    {
                        connectionId  = routedMessage.@from,
                        candidate     = msg.candidate,
                        sdpMLineIndex = msg.sdpMLineIndex,
                        sdpMid        = msg.sdpMid
                    };
                    m_mainThreadContext.Post(d => OnIceCandidate?.Invoke(this, candidate), null);
                }
                else if (routedMessage.type == "error")
                {
                    msg = JsonUtility.FromJson <SignalingMessage>(content);
                    Debug.LogError(msg.message);
                }
            }
        }
        catch (Exception ex)
        {
            Debug.LogError("Signaling: Failed to parse message: " + ex);
        }
    }