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(); }
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)); }); }
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); }