コード例 #1
0
        public void Setup()
        {
            factory           = A.Fake <IConnectionFactory>();
            fakeHttp          = A.Fake <ISimpleHttpGetRequest>();
            fakeWebSocket     = A.Fake <IWebSocket>();
            heartBeatSignaler = A.Fake <IHeartBeatSignaler>();

            A.CallTo(() => factory.CreateHttpRequest(A <string> ._)).Returns(fakeHttp);
            A.CallTo(() => fakeHttp.Execute()).ReturnsLazily(() => handshakeResponse);
            A.CallTo(() => factory.CreateWebSocket(A <string> ._)).Returns(fakeWebSocket);
            A.CallTo(() => fakeWebSocket.Connected).ReturnsLazily(() => isConnected);

            A.CallTo(() => fakeWebSocket.Open()).Invokes(() =>
            {
                isConnected           = true;
                fakeWebSocket.Opened += Raise.With(fakeWebSocket, EventArgs.Empty).Now;
            });

            A.CallTo(() => fakeWebSocket.Close()).Invokes(() =>
            {
                isConnected           = false;
                fakeWebSocket.Closed += Raise.With(fakeWebSocket, EventArgs.Empty).Now;
            });

            io = new SocketIOClient(factory, heartBeatSignaler);

            socket = io.Connect("http://localhost:3000");
        }
コード例 #2
0
      public Namespace Connect(string serverUrl, string resource = "socket.io")
      {
         if (Connected || Connecting || Reconnecting)
            return Of(DefaultNamespace);
         
         m_heartBeatSignaler.Stop();

         ServerUrl = serverUrl;

         var uri = new Uri(serverUrl);

         var handshakeResult = DoHandshake(uri, resource);

         if (handshakeResult == HandshakeResult.Success)
         {
            EmitLocally("connecting", "websocket");

            var socketUri = string.Format("{0}://{1}:{2}/{4}/1/websocket/{3}",
               uri.Scheme == Uri.UriSchemeHttps ? "wss" : "ws", uri.Host, uri.Port, Id, resource);

            m_socket = m_connectionFactory.CreateWebSocket(socketUri);
            
            m_socket.AllowUnstrustedCertificate = AllowUnstrustedCertificate;
            m_socket.Opened += OnOpened;
            m_socket.MessageReceived += OnMessageReceived;
            m_socket.Error += OnError;
            m_socket.Closed += OnClosed;
            
            m_heartBeatSignaler.Start(m_socket, HeartbeatTimeout);

            m_socket.Open();
         }

         return Of(DefaultNamespace);
      }
コード例 #3
0
        /// <summary>
        /// Begins a Real Time Messaging API session and connects via a websocket.
        /// Will reconnect automatically.
        /// </summary>
        /// <param name="manualPresenceSubscription">Only deliver presence events when requested by subscription.</param>
        /// <param name="batchPresenceAware">Group presence change notices in <see cref="PresenceChange"/> events when possible.</param>
        /// <param name="cancellationToken"></param>
        public async Task <ConnectResponse> Connect(bool batchPresenceAware = false, bool manualPresenceSubscription = false, CancellationToken?cancellationToken = null)
        {
            if (Connected)
            {
                throw new InvalidOperationException("Already connecting or connected");
            }

            var connectResponse = await _client.Rtm.Connect(manualPresenceSubscription, batchPresenceAware, cancellationToken).ConfigureAwait(false);

            _webSocket?.Dispose();
            _webSocket = _webSocketFactory.Create(connectResponse.Url);

            var openedTask = _webSocket.Opened
                             .Merge(_webSocket.Errors.SelectMany(Observable.Throw <Unit>))
                             .FirstAsync()
                             .ToTask(cancellationToken);

            _webSocket.Open();
            await openedTask.ConfigureAwait(false);

            _eventSubscription?.Dispose();
            _eventSubscription = _webSocket.Messages
                                 .Select(m => JsonConvert.DeserializeObject <Event>(m, _jsonSettings.SerializerSettings))
                                 .Subscribe(_rawEvents);

            _reconnection?.Dispose();
            _reconnection = _webSocket.Closed
                            .SelectMany(_ => Observable.FromAsync(() => Connect(batchPresenceAware, manualPresenceSubscription, cancellationToken), _scheduler)
                                        .RetryWithDelay(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(5), TimeSpan.FromMinutes(5), _scheduler))
                            .Subscribe();

            return(connectResponse);
        }
コード例 #4
0
      public void Setup()
      {
         factory = A.Fake<IConnectionFactory>();
         fakeHttp = A.Fake<ISimpleHttpGetRequest>();
         fakeWebSocket = A.Fake<IWebSocket>();
         heartBeatSignaler = A.Fake<IHeartBeatSignaler>();

         A.CallTo(() => factory.CreateHttpRequest(A<string>._)).Returns(fakeHttp);
         A.CallTo(() => fakeHttp.Execute()).ReturnsLazily(() => handshakeResponse);
         A.CallTo(() => factory.CreateWebSocket(A<string>._)).Returns(fakeWebSocket);
         A.CallTo(() => fakeWebSocket.Connected).ReturnsLazily(() => isConnected);

         A.CallTo(() => fakeWebSocket.Open()).Invokes(() =>
         {
            isConnected = true;
            fakeWebSocket.Opened += Raise.With(fakeWebSocket, EventArgs.Empty).Now;
         });

         A.CallTo(() => fakeWebSocket.Close()).Invokes(() =>
         {
            isConnected = false;
            fakeWebSocket.Closed += Raise.With(fakeWebSocket, EventArgs.Empty).Now;
         });

         io = new SocketIOClient(factory, heartBeatSignaler);

         socket = io.Connect("http://localhost:3000");
      }
コード例 #5
0
        public void Ssl_trusted_by_us()
        {
            // arrange
            SetupOurTrustedCertToBe("trusted.ca.crt");
            SetupCerts(keyFile: "trusted.key",
                       certFile: "trusted.crt");
            _websocketProcess.StartThinServer();
            _socket.MessageReceived += SocketMessageReceived;

            // act
            _socket.Opened += SocketOpened;
            _socket.Open();

            // assert
            var withinTimeout = _messageReceivedTask.Task.Wait(2.Seconds());

            if (!withinTimeout)
            {
                Assert.Fail("Timed out waiting for response from web socket!");
            }
            _messageReceivedTask
            .Task
            .Result
            .Should()
            .Be("Received your message hi there");
        }
コード例 #6
0
 public void Open()
 {
     if (websocket != null)
     {
         websocket.Open();
     }
 }
コード例 #7
0
        public void Connect()
        {
            string url;

            if (this.encrypted || this.secure)
            {
                url = "wss://" + Pusher.host + ":" + Pusher.wss_port + this.path;
            }
            else
            {
                url = "ws://" + Pusher.host + ":" + Pusher.ws_port + this.path;
            }

            Pusher.allow_reconnect = true;
            Pusher.Log("Pusher : connecting : " + url);

            var self = this;

            IWebSocket ws = CreateWebSocket(url);

            // Timeout for the connection to handle silently hanging connections
            // Increase the timeout after each retry in case of extreme latencies
            int interval = Pusher.connection_timeout + (this.retry_counter * 1000);

            var timerRef = new TimerRef();

            timerRef.Ref = new Timer(delegate(object state)
            {
                Pusher.Log("Pusher : connection timeout after " + interval + "ms");
                ws.Close();
                try { timerRef.Ref.Dispose(); }
                catch { }
            }, null, interval, interval);

            ws.OnData  += (sender, e) => OnMessage(e);
            ws.OnClose += (sender, e) =>
            {
                try { timerRef.Ref.Dispose(); }
                catch { }
                OnClose();
            };
            ws.OnOpen += (sender, e) =>
            {
                try { timerRef.Ref.Dispose(); }
                catch { }
                OnOpen();
            };

            this.connection = ws;

            ws.Open();
        }
コード例 #8
0
        public Namespace Connect(string serverUrl, string resource = "socket.io")
        {
            if (Connected || Connecting || Reconnecting)
            {
                return(Of(DefaultNamespace));
            }

            m_heartBeatSignaler.Stop();

            ServerUrl = serverUrl;

            var uri = new Uri(serverUrl);

            var handshakeResult = DoHandshake(uri, resource);

            if (handshakeResult == HandshakeResult.Success)
            {
                EmitLocally("connecting", "websocket");

                var socketUri = string.Format("{0}://{1}:{2}/{4}/1/websocket/{3}",
                                              uri.Scheme == Uri.UriSchemeHttps ? "wss" : "ws", uri.Host, uri.Port, Id, resource);

                m_socket = m_connectionFactory.CreateWebSocket(socketUri);

                m_socket.AllowUnstrustedCertificate = AllowUnstrustedCertificate;
                m_socket.Opened          += OnOpened;
                m_socket.MessageReceived += OnMessageReceived;
                m_socket.Error           += OnError;
                m_socket.Closed          += OnClosed;

                m_heartBeatSignaler.Start(m_socket, HeartbeatTimeout);

                m_socket.Open();
            }

            return(Of(DefaultNamespace));
        }
コード例 #9
0
        public void MakeConnection(HandshakeResult result, Uri uri, string resource)
        {
            if (result != HandshakeResult.Success)
            {
                OnConnectionFailed();
                return;
            }

            EmitLocally("connecting", "websocket");

            var socketUri = string.Format("{0}://{1}:{2}/{4}/1/websocket/{3}",
                                             uri.Scheme == Uri.UriSchemeHttps ? "wss" : "ws", uri.Host, uri.Port, Id,
                                             resource);

            m_socket = m_connectionFactory.CreateWebSocket(socketUri);

            m_socket.AllowUnstrustedCertificate = AllowUnstrustedCertificate;
            m_socket.Opened += OnOpened;
            m_socket.MessageReceived += OnMessageReceived;
            m_socket.Error += OnError;
            m_socket.Closed += OnClosed;

            m_heartBeatSignaler.Start(m_socket, HeartbeatTimeout);

            m_socket.Open();

            OnConnectionEstablished(Of(DefaultNamespace));
        }