/// <summary> /// Initializes a new instance of the <see cref="EtpServer"/> class. /// </summary> /// <param name="webSocket">The web socket.</param> /// <param name="etpVersion">The ETP version for the session.</param> /// <param name="encoding">The ETP encoding for the session.</param> /// <param name="info">The server's information.</param> /// <param name="parameters">The server's parameters.</param> /// <param name="headers">The WebSocket or HTTP headers.</param> public EtpServer(EtpServerWebSocket webSocket, EtpVersion etpVersion, EtpEncoding encoding, EtpEndpointInfo info, EtpEndpointParameters parameters = null, IDictionary <string, string> headers = null) : base(etpVersion, encoding, info, parameters, headers, false, webSocket.WebSocketSession.SessionID, false) { _webSocket = webSocket; _session = _webSocket.WebSocketSession; _session.SocketSession.Closed += OnSocketSessionClosed; }
/// <summary> /// Called when a WebSocket session is connected. /// </summary> /// <param name="session">The session.</param> private void OnNewSessionConnected(WebSocketSession session) { Logger.Info($"Handling WebSocket request from {session.RemoteEndPoint}."); var ws = new EtpServerWebSocket { WebSocketSession = session }; _webSockets[session.SessionID] = ws; var headers = new Dictionary <string, string>(); foreach (var item in session.Items) { headers[item.Key.ToString()] = item.Value.ToString(); } var version = EtpWebSocketValidation.GetEtpVersion(session.SubProtocol.Name); var encoding = EtpWebSocketValidation.GetEtpEncoding(headers); if (!Details.IsVersionSupported(version)) { Logger.Debug($"Sub protocol not supported: {session.SubProtocol.Name}"); session.Close(CloseReason.ApplicationError); return; } if (encoding == null) { Logger.Debug($"Error getting ETP encoding."); session.Close(CloseReason.ApplicationError); return; } if (!Details.IsEncodingSupported(encoding.Value)) { Logger.Debug($"Encoding not supported: {encoding.Value}"); session.Close(CloseReason.ApplicationError); return; } var server = ServerManager.CreateServer(ws, version, encoding.Value, headers); server.Start(); }