public void Parse(HttpListenerContext httpContext) { var httpRequest = httpContext.Request; var rpcResultHandler = new AsyncCallback( callback => { var asyncData = ((JsonRpcStateAsync) callback); var result = asyncData.Result; var response = Encoding.UTF8.GetBytes(result); var context = (HttpServiceContext)asyncData.AsyncState; context.Request.Response.ContentType = "application/json"; context.Request.Response.ContentEncoding = Encoding.UTF8; context.Request.Response.ContentLength64 = response.Length; context.Request.Response.OutputStream.Write(response, 0, response.Length); }); using (var reader = new StreamReader(httpRequest.InputStream, Encoding.UTF8)) { var line = reader.ReadToEnd(); Log.ForContext<VanillaMiner>().Verbose(line.PrettifyJson()); var rpcRequest = new HttpServiceRequest(line, httpContext); var rpcContext = new HttpServiceContext(this, rpcRequest); var async = new JsonRpcStateAsync(rpcResultHandler, rpcContext) { JsonRpc = line }; JsonRpcProcessor.Process(async, rpcContext); } }
public HttpServiceContext(IMiner miner, HttpServiceRequest request) { Miner = miner; Request = request; }