public ControllerHost(string roomCode, string url, string hostKey, CommsType commsType) { this.roomCode = roomCode; this.url = url; this.hostKey = hostKey; this.commsType = commsType; }
public static async Task <ControllerHost> getControllerHostAsync(CommsType commsType) { TaskCompletionSource <SignallingServerResponse> promise = new TaskCompletionSource <SignallingServerResponse>(); WebSocket socket = new WebSocket("wss://8zvz2j2xp8.execute-api.us-east-2.amazonaws.com/prod/"); socket.Opened += new EventHandler(socket_opened); void socket_opened(object sender, EventArgs e) { socket.Send("{\"action\": \"requestSignallingServer\"}"); } socket.Error += new EventHandler <ErrorEventArgs>(socket_error); void socket_error(object sender, ErrorEventArgs e) { promise.TrySetException(e.Exception); } socket.Closed += new EventHandler(socket_closed); void socket_closed(object sender, EventArgs e) { if (promise.Task.Status != TaskStatus.RanToCompletion) { promise.TrySetException(new Exception("Socket closed")); } } socket.MessageReceived += new EventHandler <MessageReceivedEventArgs>(socket_message_received); void socket_message_received(object sender, MessageReceivedEventArgs e) { RequestResponse response = JsonConvert.DeserializeObject <RequestResponse>(e.Message); if (response.code == 201 && response.body != null) { promise.TrySetResult(response.body); } else if (response.code >= 500 && response.code < 600) { promise.TrySetException(new Exception("Internal Server Error")); } } socket.Open(); SignallingServerResponse signallingServerResponse = await promise.Task; string url = "http://" + signallingServerResponse.ip; switch (commsType) { case CommsType.Peer: return(new PeerControllerHost(signallingServerResponse.code, url, signallingServerResponse.hostKey)); case CommsType.Relay: return(new RelayControllerHost(signallingServerResponse.code, url, signallingServerResponse.hostKey)); default: return(new RelayControllerHost(signallingServerResponse.code, url, signallingServerResponse.hostKey)); } }