Esempio n. 1
0
        private async Task <ClientWebSocketReceiver> TryConnectAsync(CancellationToken cancellationToken)
        {
            _webSocket = new ClientWebSocket();
            _webSocket.Options.SetRequestHeader(NCSConstants.ConnectorName, InvocatorContext.ConnectorName);
            try
            {
                await _webSocket.ConnectAsync(InvocatorContext.Uri, cancellationToken);
            }
            catch (Exception ex)
            {
                ProxyLogHelper.Log(_loggerFactory, InvocatorContext, "Error", ex);
                return(null);
            }

            var receiverContext = new ClientWebSocketReceiverContext
            {
                Compressor       = _compressor,
                InvocatorContext = InvocatorContext,
                LoggerFactory    = _loggerFactory,
                WebSocket        = _webSocket
            };

            var receiver = new ClientWebSocketReceiver(_serviceProvider, receiverContext, Close, (connectionId) => {
                _connectionId = connectionId;
            });

            return(receiver);
        }
Esempio n. 2
0
        public async Task ConnectAsync(CancellationToken cancellationToken)
        {
            ClientWebSocketReceiver receiver = null;

            while (!cancellationToken.IsCancellationRequested)
            {
                _logger.LogInformation("===TryConnectAsync to: {0}", InvocatorContext.Uri.ToString());
                receiver = await TryConnectAsync(cancellationToken);

                if (receiver != null && WebSocketState == WebSocketState.Open)
                {
                    break;
                }

                _logger.LogInformation("===Retry...");
                await Task.Delay(1000);
            }

            _logger.LogInformation("===WebSocketConnected to: {0}", InvocatorContext.Uri.ToString());

            if (InvocatorContext.OnConnectedAsync != null)
            {
                await InvocatorContext.OnConnectedAsync(_webSocket);
            }

            await Task.WhenAll(receiver.ReceiveAsync(cancellationToken));

            // Disconnected
            if (_webSocket.CloseStatus.HasValue || _webSocket.State == WebSocketState.Aborted)
            {
                if (InvocatorContext.OnDisconnectedAsync != null)
                {
                    await InvocatorContext.OnDisconnectedAsync(_webSocket);
                }
                else
                {
                    await ConnectAsync(cancellationToken);
                }
            }
        }