public void Stop() { m_running = false; foreach (object o in m_requests) { PollServiceHttpRequest req = (PollServiceHttpRequest)o; OSHttpResponse response = new OSHttpResponse(req.Context); byte[] buffer = req.PollServiceArgs.NoEvents(req.RequestID, req.PollServiceArgs.Id, response); req.Context.Response.SendChunked = false; req.Context.Response.ContentEncoding = Encoding.UTF8; try { req.Context.Response.ContentLength64 = buffer.LongLength; req.Context.Response.Close(buffer, true); } catch (Exception ex) { MainConsole.Instance.WarnFormat("[POLL SERVICE WORKER THREAD]: Error: {0}", ex.ToString()); } } m_requests.Clear(); foreach (Thread t in m_workerThreads) { t.Abort(); } }
private void OnRequest(HttpListenerContext context) { try { PollServiceEventArgs psEvArgs; if (TryGetPollServiceHTTPHandler(context.Request.Url.AbsolutePath, out psEvArgs)) { PollServiceHttpRequest psreq = new PollServiceHttpRequest(psEvArgs, context); if (psEvArgs.Request != null) { OSHttpRequest req = new OSHttpRequest(context); psEvArgs.Request(psreq.RequestID, req); } m_PollServiceManager.Enqueue(psreq); } else { HandleRequest(context); } } catch (Exception e) { MainConsole.Instance.ErrorFormat("[BASE HTTP SERVER]: OnRequest() failed: {0} ", e.ToString()); } }
public void Run() { while (m_running) { PollServiceHttpRequest req = m_request.Dequeue(); try { if (req.PollServiceArgs.Valid()) { if (req.PollServiceArgs.HasEvents(req.RequestID, req.PollServiceArgs.Id)) { StreamReader str; try { str = new StreamReader(req.Request.Body); } catch (ArgumentException) { // Stream was not readable means a child agent // was closed due to logout, leaving the // Event Queue request orphaned. continue; } Hashtable responsedata = req.PollServiceArgs.GetEvents(req.RequestID, req.PollServiceArgs.Id, str.ReadToEnd()); var request = new OSHttpRequest(req.HttpContext, req.Request); m_server.MessageHandler.SendGenericHTTPResponse( responsedata, request.MakeResponse(System.Net.HttpStatusCode.OK, "OK"), request ); } else { if ((Environment.TickCount - req.RequestTime) > m_timeout) { var request = new OSHttpRequest(req.HttpContext, req.Request); m_server.MessageHandler.SendGenericHTTPResponse( req.PollServiceArgs.NoEvents(req.RequestID, req.PollServiceArgs.Id), request.MakeResponse(System.Net.HttpStatusCode.OK, "OK"), request); } else { ReQueuePollServiceItem reQueueItem = ReQueue; if (reQueueItem != null) { reQueueItem(req); } } } } } catch (Exception e) { MainConsole.Instance.ErrorFormat("Exception in poll service thread: " + e); } } }
public void Enqueue(PollServiceHttpRequest req) { lock (m_requests) { PokeThreads(); m_requests.Enqueue(req); } }
public void Enqueue(PollServiceHttpRequest req) { lock (m_requests) { PokeThreads(); m_requests.Enqueue(req); } }
public void Enqueue(PollServiceHttpRequest req) { lock (m_requests) { m_requests.Enqueue(req); lock (m_queueSync) Monitor.Pulse(m_queueSync); } }
public void Enqueue(PollServiceHttpRequest req) { lock (m_requests) { m_requests.Enqueue(req); lock (m_queueSync) Monitor.Pulse(m_queueSync); } }
internal void ReQueueEvent(PollServiceHttpRequest req) { try { // Do accounting stuff here Enqueue(req); } catch { } }
internal void ReQueueEvent(PollServiceHttpRequest req) { try { // Do accounting stuff here Enqueue(req); } catch { } }
private void OnRequest(object source, RequestEventArgs args) { try { IHttpClientContext context = (IHttpClientContext)source; IHttpRequest request = args.Request; PollServiceEventArgs psEvArgs; if (TryGetPollServiceHTTPHandler(request.UriPath, out psEvArgs)) { PollServiceHttpRequest psreq = new PollServiceHttpRequest(psEvArgs, context, request); if (psEvArgs.Request != null) { OSHttpRequest req = new OSHttpRequest(context, request); Stream requestStream = req.InputStream; Encoding encoding = Encoding.UTF8; StreamReader reader = new StreamReader(requestStream, encoding); string requestBody = reader.ReadToEnd(); Hashtable keysvals = new Hashtable(); Hashtable headervals = new Hashtable(); string[] querystringkeys = req.QueryString.AllKeys; string[] rHeaders = req.Headers.AllKeys; keysvals.Add("body", requestBody); keysvals.Add("uri", req.RawUrl); keysvals.Add("content-type", req.ContentType); keysvals.Add("http-method", req.HttpMethod); foreach (string queryname in querystringkeys) { keysvals.Add(queryname, req.QueryString[queryname]); } foreach (string headername in rHeaders) { headervals[headername] = req.Headers[headername]; } keysvals.Add("headers", headervals); keysvals.Add("querystringkeys", querystringkeys); psEvArgs.Request(psreq.RequestID, keysvals); } m_PollServiceManager.Enqueue(psreq); } else { OnHandleRequestIOThread(context, request); } } catch (Exception e) { MainConsole.Instance.ErrorFormat("[BASE HTTP SERVER]: OnRequest() failed with {0}{1}", e, e.StackTrace); } }
public void Run() { while (m_running) { PollServiceHttpRequest req = m_request.Dequeue(); try { byte[] buffer = null; if (req.PollServiceArgs.HasEvents(req.RequestID, req.PollServiceArgs.Id)) { StreamReader str; try { str = new StreamReader(req.Context.Request.InputStream); } catch (System.ArgumentException) { // Stream was not readable means a child agent // was closed due to logout, leaving the // Event Queue request orphaned. continue; } OSHttpResponse response = new OSHttpResponse(req.Context); buffer = req.PollServiceArgs.GetEvents(req.RequestID, req.PollServiceArgs.Id, str.ReadToEnd(), response); } else { if ((Environment.TickCount - req.RequestTime) > m_timeout) { OSHttpResponse response = new OSHttpResponse(req.Context); buffer = req.PollServiceArgs.NoEvents(req.RequestID, req.PollServiceArgs.Id, response); } else { ReQueuePollServiceItem reQueueItem = ReQueue; if (reQueueItem != null) { reQueueItem(req); } } } if (buffer != null) { req.Context.Response.ContentEncoding = Encoding.UTF8; try { if (req.Context.Request.ProtocolVersion.Minor == 0) { //HTTP 1.0... no chunking req.Context.Response.ContentLength64 = buffer.Length; using (Stream stream = req.Context.Response.OutputStream) { HttpServerHandlerHelpers.WriteNonChunked(stream, buffer); } } else { req.Context.Response.SendChunked = true; using (Stream stream = req.Context.Response.OutputStream) { HttpServerHandlerHelpers.WriteChunked(stream, buffer); } } req.Context.Response.Close(); } catch (Exception ex) { if (!(ex is HttpListenerException) || !HttpListenerManager.IGNORE_ERROR_CODES.Contains(((HttpListenerException)ex).ErrorCode)) { MainConsole.Instance.WarnFormat("[POLL SERVICE WORKER THREAD]: Failed to write all data to the stream: {0}", ex.ToString()); } } } } catch (Exception e) { MainConsole.Instance.ErrorFormat("Exception in poll service thread: {0}", e.ToString()); } } }
internal void Enqueue(PollServiceHttpRequest pPollServiceHttpRequest) { m_request.Enqueue(pPollServiceHttpRequest); }
/// <summary> /// FIXME: This should be part of BaseHttpServer /// </summary> internal static void DoHTTPGruntWork(BaseHttpServer server, PollServiceHttpRequest req, Hashtable responsedata) { OSHttpResponse response = new OSHttpResponse(new HttpResponse(req.HttpContext, req.Request), req.HttpContext); byte[] buffer = server.DoHTTPGruntWork(responsedata, response); response.SendChunked = false; response.ContentLength64 = buffer.Length; response.ContentEncoding = Encoding.UTF8; try { response.OutputStream.Write(buffer, 0, buffer.Length); } catch (Exception ex) { m_log.Warn(string.Format("[POLL SERVICE WORKER THREAD]: Error ", ex)); } finally { //response.OutputStream.Close(); try { response.OutputStream.Flush(); response.Send(); //if (!response.KeepAlive && response.ReuseContext) // response.FreeContext(); } catch (Exception e) { m_log.Warn(String.Format("[POLL SERVICE WORKER THREAD]: Error ", e)); } } }
public void Run() { while (m_running) { PollServiceHttpRequest req = m_request.Dequeue(); try { byte[] buffer = null; if (req.PollServiceArgs.HasEvents(req.RequestID, req.PollServiceArgs.Id)) { StreamReader str; try { str = new StreamReader(req.Context.Request.InputStream); } catch (System.ArgumentException) { // Stream was not readable means a child agent // was closed due to logout, leaving the // Event Queue request orphaned. continue; } OSHttpResponse response = new OSHttpResponse(req.Context); buffer = req.PollServiceArgs.GetEvents(req.RequestID, req.PollServiceArgs.Id, str.ReadToEnd(), response); } else { if ((Environment.TickCount - req.RequestTime) > m_timeout) { OSHttpResponse response = new OSHttpResponse(req.Context); buffer = req.PollServiceArgs.NoEvents(req.RequestID, req.PollServiceArgs.Id, response); } else { ReQueuePollServiceItem reQueueItem = ReQueue; if (reQueueItem != null) { reQueueItem(req); } } } if (buffer != null) { req.Context.Response.SendChunked = false; req.Context.Response.ContentEncoding = Encoding.UTF8; try { req.Context.Response.ContentLength64 = buffer.LongLength; req.Context.Response.Close(buffer, true); } catch (Exception ex) { MainConsole.Instance.WarnFormat("[POLL SERVICE WORKER THREAD]: Error: {0}", ex.ToString()); } } } catch (Exception e) { MainConsole.Instance.ErrorFormat("Exception in poll service thread: {0}", e.ToString()); } } }
private void OnRequest(HttpListenerContext context) { try { PollServiceEventArgs psEvArgs; if (TryGetPollServiceHTTPHandler(context.Request.Url.AbsolutePath, out psEvArgs)) { if (context.Request.HttpMethod == "HEAD") return; PollServiceHttpRequest psreq = new PollServiceHttpRequest(psEvArgs, context); if (psEvArgs.Request != null) { OSHttpRequest req = new OSHttpRequest(context); psEvArgs.Request(psreq.RequestID, req); } m_PollServiceManager.Enqueue(psreq); } else { HandleRequest(context); } } catch (Exception e) { MainConsole.Instance.ErrorFormat("[BASE HTTP SERVER]: OnRequest() failed: {0} ", e.ToString()); } }
internal void Enqueue(PollServiceHttpRequest pPollServiceHttpRequest) { m_request.Enqueue(pPollServiceHttpRequest); }
/// <summary> /// Handle an message /// </summary> /// <param name="context">Context unique for this handler instance</param> /// <param name="message">Message to process</param> /// <remarks> /// All messages that can't be handled MUST be send up the chain using <see cref="IPipelineHandlerContext.SendUpstream"/>. /// </remarks> public void HandleUpstream(IPipelineHandlerContext context, IPipelineMessage message) { var msg = message as ReceivedHttpRequest; if (msg == null) { if (message is PipelineFailure) MainConsole.Instance.ErrorFormat("[BaseHttpServer]: Failed to get message, {0}", (message as PipelineFailure).Exception); return; } //MainConsole.Instance.Warn("Taking in request " + msg.HttpRequest.Uri.ToString()); var request = msg.HttpRequest; PollServiceEventArgs psEvArgs; OSHttpRequest req = new OSHttpRequest(context, request); if (_server.TryGetPollServiceHTTPHandler(request.Uri.AbsolutePath, out psEvArgs)) { PollServiceHttpRequest psreq = new PollServiceHttpRequest(psEvArgs, context, request); if (psEvArgs.Request != null) { string requestBody; using (StreamReader reader = new StreamReader(req.InputStream, Encoding.UTF8)) requestBody = reader.ReadToEnd(); Hashtable keysvals = new Hashtable(), headervals = new Hashtable(); string[] querystringkeys = req.QueryString.AllKeys; string[] rHeaders = req.Headers.AllKeys; keysvals.Add("body", requestBody); keysvals.Add("uri", req.RawUrl); keysvals.Add("content-type", req.ContentType); keysvals.Add("http-method", req.HttpMethod); foreach (string queryname in querystringkeys) keysvals.Add(queryname, req.QueryString[queryname]); foreach (string headername in rHeaders) headervals[headername] = req.Headers[headername]; keysvals.Add("headers", headervals); keysvals.Add("querystringkeys", querystringkeys); psEvArgs.Request(psreq.RequestID, keysvals); } _server.PollServiceManager.Enqueue(psreq); } else HandleRequest(req, req.MakeResponse(HttpStatusCode.OK, "OK")); }