Ejemplo n.º 1
0
 /// <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;
 }
Ejemplo n.º 2
0
        /// <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();
        }