Пример #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="WebSocketServiceHost"/> class
        /// with the specified <paramref name="path"/> and <paramref name="log"/>.
        /// </summary>
        /// <param name="path">
        /// A <see cref="string"/> that represents the absolute path to the service.
        /// </param>
        /// <param name="log">
        /// A <see cref="Logger"/> that represents the logging function for the service.
        /// </param>
        protected WebSocketServiceHost(string path, Logger log)
        {
            _path = path;
            _log  = log;

            _sessions = new WebSocketSessionManager(log);
        }
Пример #2
0
        internal void Start(WebSocketContext context, WebSocketSessionManager sessions)
        {
            if (_websocket != null)
            {
                _websocket.Log.Error("A session instance cannot be reused.");
                context.WebSocket.Close(HttpStatusCode.ServiceUnavailable);

                return;
            }

            _context  = context;
            _sessions = sessions;

            _websocket = context.WebSocket;
            _websocket.CustomHandshakeRequestChecker = checkHandshakeRequest;
            _websocket.EmitOnPing       = _emitOnPing;
            _websocket.IgnoreExtensions = _ignoreExtensions;
            _websocket.Protocol         = _protocol;

            var waitTime = sessions.WaitTime;

            if (waitTime != _websocket.WaitTime)
            {
                _websocket.WaitTime = waitTime;
            }

            _websocket.OnOpen    += onOpen;
            _websocket.OnMessage += onMessage;
            _websocket.OnError   += onError;
            _websocket.OnClose   += onClose;

            _websocket.InternalAccept();
        }
Пример #3
0
        //TODO http改
        internal void Start(HttpListenerContext context, WebSocketSessionManager sessions)
        {
            if (_websocket != null)
            {
                _websocket.Log.Error("A session instance cannot be reused.");
                context.Response.StatusCode = (int)HttpStatusCode.NotImplemented;
                context.Response.Close();

                return;
            }
            var method = context.Request.HttpMethod;

            _httpcontext = context;
            if (null == _sessions)
            {
                _sessions = sessions;
            }
            AddCookie(context);
            switch (method)
            {
            case "GET":

                OnGet(new HttpRequestEventArgs(context, null));
                break;

            case "HEAD":
                OnHead(new HttpRequestEventArgs(context, null));
                break;

            case "POST":
                OnPost(new HttpRequestEventArgs(context, null));
                break;

            case "PUT":
                OnPut(new HttpRequestEventArgs(context, null));
                break;

            case "DELETE":
                OnDelete(new HttpRequestEventArgs(context, null));
                break;

            case "OPTIONS":
                OnOptions(new HttpRequestEventArgs(context, null));
                break;

            case "TRACE":
                OnTrace(new HttpRequestEventArgs(context, null));
                break;

            case "CONNECT":
                OnConnect(new HttpRequestEventArgs(context, null));
                break;

            case "PATCH":
                OnPatch(new HttpRequestEventArgs(context, null));
                break;

            default:
                context.Response.StatusCode = (int)HttpStatusCode.NotFound;

                context.Response.Close();
                break;
            }
        }