void ProcessSignalingMessage(ARDSignalingMessage message) { switch (message.Type) { case ARDSignalingMessageType.Offer: case ARDSignalingMessageType.Answer: ARDSessionDescriptionMessage sdpMessage = message as ARDSessionDescriptionMessage; _peerConnection.SetRemoteDescriptionWithDelegate(this, sdpMessage.Description); break; case ARDSignalingMessageType.Candidate: ARDICECandidateMessage candidateMessage = message as ARDICECandidateMessage; _peerConnection.AddICECandidate(candidateMessage.Candidate); break; case ARDSignalingMessageType.Bye: // Other client disconnected. // TODO(tkchin): support waiting in room for next client. For now just Disconnect(); break; default: break; } }
void SendSignalingMessageToCollider(ARDSignalingMessage message) { NSData data = null; _channel.SendData(data); //NSData* data = [message JSONData]; }
public static ARDSignalingMessage MessageFromJSONString(string json) { var values = JsonConvert.DeserializeObject <Dictionary <string, string> >(json); ARDSignalingMessage message = new ARDSignalingMessage(); var type = values["type"]; if (type == "candidate") { RTCICECandidate candidate = new RTCICECandidate(values["id"], nint.Parse(values["label"]), values["candidate"]); message = new ARDICECandidateMessage(candidate); } else if (type == "offer" || type == "answer") { RTCSessionDescription description = new RTCSessionDescription(type, values["sdp"]); message = new ARDSessionDescriptionMessage(description); } else if (type == "bye") { message = new ARDByeMessage(); } else { System.Diagnostics.Debug.WriteLine($"Unexpected type: {type}"); } return(message); }
async Task SendSignalingMessageToRoomServer(ARDSignalingMessage message, Action <ARDMessageResponse> completionHandler = null) { var jsonData = message.JsonData; string urlString = string.Format(kARDRoomServerMessageFormat, _serverHostUrl, _roomId, _clientId); System.Diagnostics.Debug.WriteLine($"C->RS POST: {jsonData}"); var client = new HttpClient { BaseAddress = new Uri(urlString) }; ARDMessageResponse responseMessage = null; NSError error = null; try { var response = await client.PostAsync("", new StringContent(jsonData)); if (!response.IsSuccessStatusCode) { error = RoomServerNetworkError(1); _delegate.DidError(this, error); return; } var responseContent = await response.Content.ReadAsStringAsync(); responseMessage = JsonConvert.DeserializeObject <ARDMessageResponse>(responseContent); switch (responseMessage.Type) { case ARDMessageResultType.Success: break; case ARDMessageResultType.Unknown: error = RoomServerNetworkError(kARDAppClientErrorUnknown); break; case ARDMessageResultType.InvalidClient: error = RoomServerNetworkError(kARDAppClientErrorInvalidClient); break; case ARDMessageResultType.InvalidRoom: error = RoomServerNetworkError(kARDAppClientErrorInvalidRoom); break; default: break; } } catch (Exception ex) { error = RoomServerNetworkError(kARDAppClientErrorUnknown, ex.Message); } if (error != null) { _delegate.DidError(this, error); } completionHandler?.Invoke(responseMessage); }
async Task SendSignalingMessage(ARDSignalingMessage message) { if (_isInitiator) { await SendSignalingMessageToRoomServer(message); } else { SendSignalingMessageToCollider(message); } }
public void DidReceiveMessage(ARDSignalingMessage message) { switch (message.Type) { case ARDSignalingMessageType.Offer: case ARDSignalingMessageType.Answer: _hasReceivedSdp = true; _messageQueue.Insert(0, message); break; case ARDSignalingMessageType.Candidate: _messageQueue.Add(message); break; case ARDSignalingMessageType.Bye: ProcessSignalingMessage(message); break; default: break; } DrainMessageQueueIfReady(); }
//didReceiveMessage public override void WebSocket(SRWebSocket webSocket, NSObject message) { SocketResponse socketResponse; try { socketResponse = JsonConvert.DeserializeObject <SocketResponse>(message.ToString()); if (!string.IsNullOrEmpty(socketResponse.error)) { System.Diagnostics.Debug.WriteLine($"WSS error: {socketResponse.error}"); return; } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine($"Invalid json error: {ex.Message}"); return; } System.Diagnostics.Debug.WriteLine(@"WSS->C: %@", socketResponse.msg); ARDSignalingMessage signalingMessage = ARDSignalingMessageExtensions.MessageFromJSONString(socketResponse.msg); _delegate.DidReceiveMessage(signalingMessage); }