コード例 #1
0
 public ControllerHost(string roomCode, string url, string hostKey, CommsType commsType)
 {
     this.roomCode  = roomCode;
     this.url       = url;
     this.hostKey   = hostKey;
     this.commsType = commsType;
 }
コード例 #2
0
        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));
            }
        }