private async Task TryConnectAsync(CancellationTokenSource cancellationTokenSource = null)
        {
            var invocatorContext = CreateInvocatorContext();
            var uri = new Uri($"ws://{invocatorContext.HostAddress}");

            _webSocket = new ClientWebSocket();
            _webSocket.Options.SetRequestHeader(SocketsConstants.ConnectorName, invocatorContext.ConnectorName);
            try
            {
                CancellationToken token = cancellationTokenSource != null ? cancellationTokenSource.Token : CancellationToken.None;
                await _webSocket.ConnectAsync(uri, token);
            }
            catch (Exception ex)
            {
                ProxyLogHelper.Log(_loggerFactory, invocatorContext, "Error", ex);
                return;
            }

            var receiverContext = new WebSocketReceiverContext
            {
                Compressor       = _compressor,
                InvocatorContext = invocatorContext,
                LoggerFactory    = _loggerFactory,
                WebSocket        = _webSocket
            };
            var receiver = new WebSocketReceiver(_serviceProvider, receiverContext, Close, (connectionId) => {
                _connectionId = connectionId;
            });
            await receiver.ReceiveAsync();
        }
Beispiel #2
0
        internal static void Log(WebSocketReceiverContext context, string message, Exception ex = null)
        {
            LogLevel logLevel = LogLevel.Debug;

            if (ex != null)
            {
                logLevel = LogLevel.Error;
            }

            var logger  = context.LoggerFactory.CreateLogger <WebSocketReceiver>();
            var content = $"{message}=={ex?.Message}";

            object state = new
            {
                context.ConnectionId
            };

            logger.Log(logLevel,
                       new EventId((int)WebSocketState.Aborted, nameof(WebSocketState.Aborted)),
                       state,
                       ex,
                       (msg, exception) => {
                var values = new Dictionary <string, object>();
                values.Add("Message", content);
                return(JsonConvert.SerializeObject(values));
            });
        }
Beispiel #3
0
 public WebSocketReceiver(IServiceProvider serviceProvider,
                          WebSocketReceiverContext context,
                          Action <WebSocketReceiverContext> closeCallback,
                          Action <string> handshakeCallback = null)
 {
     _serviceProvider   = serviceProvider;
     _context           = context;
     _closeCallback     = closeCallback;
     _handshakeCallback = handshakeCallback;
 }
 public WebSocketReceiver(IServiceProvider serviceProvider,
                          WebSocketReceiverContext context,
                          Action <WebSocketReceiverContext> closeCallback,
                          ILoggerFactory loggerFactory)
 {
     _serviceProvider = serviceProvider;
     _context         = context;
     _closeCallback   = closeCallback;
     _loggerFactory   = loggerFactory;
     _logger          = _loggerFactory.CreateLogger <WebSocketReceiver>();
 }
 internal void Close(WebSocketReceiverContext context)
 {
     context.WebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure,
                                  nameof(WebSocketReceiverContext),
                                  CancellationToken.None);
 }