Пример #1
0
        public async Task ShutdownAsync()
        {
            if (client == null)
            {
                return;
            }

            await client.CloseAsync();

            subscribe.Dispose();

            client = null;

            messageCallbacks.Clear();
        }
Пример #2
0
 public Task CloseAsync()
 {
     return(_socket.CloseAsync());
 }
Пример #3
0
    private static async Task StartWebSocketAsync(CancellationTokenSource innerCancellationTokenSource)
    {
        using (var websocketClient = new MessageWebSocketRx())
        {
            System.Console.WriteLine("Start");

            var websocketLoggerSubscriber = websocketClient.ObserveConnectionStatus.Subscribe(
                s =>
            {
                System.Console.WriteLine(s.ToString());
                if (s == ConnectionStatus.Disconnected ||
                    s == ConnectionStatus.Aborted ||
                    s == ConnectionStatus.ConnectionFailed)
                {
                    innerCancellationTokenSource.Cancel();
                }
            },
                ex =>
            {
                innerCancellationTokenSource.Cancel();
            },
                () =>
            {
                innerCancellationTokenSource.Cancel();
            });

            List <string> subprotocols = null; //new List<string> {"soap", "json"};

            var headers = new Dictionary <string, string> {
                { "Pragma", "no-cache" }, { "Cache-Control", "no-cache" }
            };

            var messageObserver = await websocketClient.CreateObservableMessageReceiver(
                new Uri("wss://echo.websocket.org:443"),
                ignoreServerCertificateErrors : true,
                headers : headers,
                subProtocols : subprotocols,
                tlsProtocolType : TlsProtocolVersion.Tls12);

            var subscribeToMessagesReceived = messageObserver.Subscribe(
                msg =>
            {
                System.Console.WriteLine($"Reply from test server: {msg}");
            },
                ex =>
            {
                System.Console.WriteLine(ex.Message);
                innerCancellationTokenSource.Cancel();
            },
                () =>
            {
                System.Console.WriteLine($"Subscription Completed");
                innerCancellationTokenSource.Cancel();
            });

            try
            {
                System.Console.WriteLine("Sending: Test Single Frame");
                await websocketClient.SendTextAsync("Test Single Frame");

                await websocketClient.SendTextAsync("Test Single Frame again");

                await websocketClient.SendTextAsync(TestString(65538, 65550));

                var strArray = new[] { "Test ", "multiple ", "frames" };

                await websocketClient.SendTextAsync(strArray);

                await websocketClient.SendTextMultiFrameAsync("Start ", FrameType.FirstOfMultipleFrames);

                await Task.Delay(TimeSpan.FromMilliseconds(200));

                await websocketClient.SendTextMultiFrameAsync("Continue... #1 ", FrameType.Continuation);

                await Task.Delay(TimeSpan.FromMilliseconds(300));

                await websocketClient.SendTextMultiFrameAsync("Continue... #2 ", FrameType.Continuation);

                await Task.Delay(TimeSpan.FromMilliseconds(150));

                await websocketClient.SendTextMultiFrameAsync("Continue... #3 ", FrameType.Continuation);

                await Task.Delay(TimeSpan.FromMilliseconds(400));

                await websocketClient.SendTextMultiFrameAsync("Stop.", FrameType.LastInMultipleFrames);

                // Close the Websocket connection gracefully telling the server goodbye
                await websocketClient.CloseAsync();

                subscribeToMessagesReceived.Dispose();
                websocketLoggerSubscriber.Dispose();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                innerCancellationTokenSource.Cancel();
            }
        }
    }