private Task <ResponseResult <PartialResponse[]> > RspHandler(Task <HttpResponseMessage> rsp, string methodName) { ResponseResult <PartialResponse[]> result; try { return(rsp.Result.EnsureSuccessStatusCode().Content.ReadAsStringAsync().ContinueWith((str) => { result = str.Result.DeserializeJsonToObject <ResponseResult <PartialResponse[]> >(); if (result.code == 0) { foreach (var item in result.data) { if (item.code != 0) { PartialErrorHandlers.SelectValueOrDefault(item.code)?.Invoke(item); } else { PartialHandlers.SelectValueOrDefault(item.name)?.Invoke(item); } } } ResponseHandlers.SelectValueOrDefault(result.code)?.Invoke(result); return result; })); } catch (HttpRequestException ex) { result = new ResponseResult <PartialResponse[]>() { code = -1, msg = ex.Message, data = new PartialResponse[] { new PartialResponse() { code = (int)rsp.Result.StatusCode, msg = rsp.Result.StatusCode.ToString() } } }; } catch (Exception ex) { result = new ResponseResult <PartialResponse[]>() { code = -1, msg = ex.Message }; } result.source = methodName; ResponseHandlers.SelectValueOrDefault(result.code)?.Invoke(result); return(Task.FromResult(result)); }
// ... -p 80 -h domain static void Main(string[] args) { bool hostAltered = false; (string hostname, int port, string webRootPath) = Utils.ParseArguments(args); Console.CancelKeyPress += delegate { Console.WriteLine("Ctrl-C. Exiting."); if (hostAltered) Utils.AlterHostsFile("/etc/hosts", hostname, true); }; Func<string, bool> isRemote = host => !new List<string> {"localhost", "127.0.0.1", "0.0.0.0"}.Contains(host); Console.WriteLine($"Server starting at {hostname}:{port}"); try { if (isRemote(hostname)) { if (Utils.AlterHostsFile("/etc/hosts", hostname)) hostAltered = true; else return; } var server = CreateServer(port); while (true) { using var client = server.Accept(); using var stream = new NetworkStream(client); using var textReader = new StreamReader(stream); string requestedResource = RequestHandler.Handle(textReader, webRootPath); if (requestedResource == null) { ResponseHandlers.NotFoundResponse(stream); return; } ResponseHandlers.Handle(requestedResource, stream); client.Shutdown(SocketShutdown.Both); } } catch (Exception ex) { Console.WriteLine($"Cannot start the server. {ex.Message}"); } finally { if (hostAltered) Utils.AlterHostsFile("/etc/hosts", hostname, true); } }
public SocketClient(IRouteProvider routeProvider, params Assembly[] cmdAssemblies) { RouteProvider = routeProvider; //加载处理程序 var commandAssemblies = cmdAssemblies; foreach (var assembly in commandAssemblies) { try { lock (ResponseHandlers) { ResponseHandlers.AddRange(assembly.GetImplementedObjectsByInterface <ISocketPackageHandler>()); } } catch (Exception exc) { throw new Exception(string.Format("加载程序集失败,程序集: {0}!", assembly.FullName), exc); } } }