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); }
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); } }