Пример #1
0
 public ClientWebSocketTransport(ServiceBusClientWebSocket webSocket, Uri uri, TransportSettings transportSettings, EventTraceActivity activity) : base("clientwebsocket")
 {
     this.webSocket           = webSocket;
     this.uri                 = uri;
     this.activity            = activity;
     this.asyncReadBufferSize = transportSettings.ReceiveBufferSize;
     this.asyncReadBuffer     = DiagnosticUtility.Utility.AllocateByteArray(this.asyncReadBufferSize);
     this.onReadComplete      = new AsyncCallback(this.OnReadComplete);
 }
 public ClientWebSocketConnection(ServiceBusClientWebSocket webSocket, int asyncReadBufferSize, System.Uri uri, EventTraceActivity activity)
 {
     this.Activity            = activity;
     this.AsyncReadBufferSize = asyncReadBufferSize;
     this.AsyncReadBuffer     = Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.Utility.AllocateByteArray(asyncReadBufferSize);
     this.webSocket           = webSocket;
     this.Uri      = uri;
     this.Activity = activity;
     this.onRead   = Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.ThunkAsyncCallback(new AsyncCallback(this.OnRead));
 }
Пример #3
0
 private static NetworkDetector.ConnectivityStatus CheckHttpsWebSocketConnectivity(Uri baseAddress, out Exception exception)
 {
     NetworkDetector.ConnectivityStatus connectivityStatu = NetworkDetector.ConnectivityStatus.Unavailable;
     exception = null;
     if (ServiceBusClientWebSocket.IsSupportingScheme(ServiceBusUriHelper.CreateServiceUri("https", baseAddress.Authority, "/"), out exception))
     {
         connectivityStatu = NetworkDetector.ConnectivityStatus.Available;
     }
     NetworkDetector.LogResult(baseAddress, "https WebSocket", connectivityStatu);
     return(connectivityStatu);
 }
Пример #4
0
            protected override IEnumerator <IteratorAsyncResult <WebSocketRelayedConnectionListener.ConnectAsyncResult> .AsyncStep> GetAsyncSteps()
            {
                Uri uri = ServiceBusUriHelper.CreateServiceUri(Uri.UriSchemeHttps, this.Request.HttpsEndpoint.ToString(), "/");
                ServiceBusClientWebSocket serviceBusClientWebSocket = new ServiceBusClientWebSocket("wsrelayedconnection");

                yield return(base.CallAsync((WebSocketRelayedConnectionListener.ConnectAsyncResult thisPtr, TimeSpan t, AsyncCallback c, object s) => serviceBusClientWebSocket.BeginConnect(uri.Host, uri.Port, ConnectConstants.ConnectionInitiateTimeout, c, s), (WebSocketRelayedConnectionListener.ConnectAsyncResult thisPtr, IAsyncResult r) => serviceBusClientWebSocket.EndConnect(r), IteratorAsyncResult <TIteratorAsyncResult> .ExceptionPolicy.Transfer));

                this.connection         = new ClientWebSocketConnection(serviceBusClientWebSocket, this.relayedConnectionListener.bufferSize, this.relayedConnectionListener.uri, this.Activity);
                this.message            = Message.CreateMessage(this.relayedConnectionListener.messageHelper.MessageVersion, "RelayedAccept", new AcceptMessage(this.Request.Id));
                this.message.Headers.To = EndpointAddress.AnonymousUri;
                WebSocketRelayedConnectionListener.ConnectAsyncResult connectAsyncResult = this;
                IteratorAsyncResult <WebSocketRelayedConnectionListener.ConnectAsyncResult> .BeginCall beginCall = (WebSocketRelayedConnectionListener.ConnectAsyncResult thisRef, TimeSpan t, AsyncCallback c, object s) => thisRef.relayedConnectionListener.messageHelper.BeginSendMessage(thisRef.connection, thisRef.message, t, c, s);
                yield return(connectAsyncResult.CallAsync(beginCall, (WebSocketRelayedConnectionListener.ConnectAsyncResult thisRef, IAsyncResult r) => thisRef.relayedConnectionListener.messageHelper.EndSendMessage(r), IteratorAsyncResult <TIteratorAsyncResult> .ExceptionPolicy.Transfer));

                IOThreadScheduler.ScheduleCallbackNoFlow(new Action <object>(this.relayedConnectionListener.BeginConnectCallback), this.connection);
            }
        private void Complete(IAsyncResult connectAsyncResult, bool completeSynchronously)
        {
            EventTraceActivity eventTraceActivity       = new EventTraceActivity();
            TransportBase      clientWebSocketTransport = null;

            try
            {
                try
                {
                    ServiceBusClientWebSocket clientWebSocket = AsyncResult <WebSocketConnectAsyncResult> .End(connectAsyncResult).ClientWebSocket;

                    clientWebSocketTransport = new ClientWebSocketTransport(clientWebSocket, this.uri, this.webSocketTransportSettings, eventTraceActivity);
                    clientWebSocketTransport.Open();
                    MessagingClientEtwProvider.Provider.WebSocketTransportEstablished(eventTraceActivity, this.uri.AbsoluteUri);
                }
                catch (Exception exception1)
                {
                    Exception exception = exception1;
                    if (Fx.IsFatal(exception))
                    {
                        throw;
                    }
                    this.callbackArgs.Exception = exception;
                    if (clientWebSocketTransport != null)
                    {
                        clientWebSocketTransport.SafeClose(exception);
                    }
                    clientWebSocketTransport = null;
                }
            }
            finally
            {
                this.callbackArgs.Transport = clientWebSocketTransport;
                this.callbackArgs.CompletedSynchronously = completeSynchronously;
                if (!completeSynchronously)
                {
                    this.callbackArgs.CompletedCallback(this.callbackArgs);
                }
            }
        }