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));
        }
Beispiel #2
0
	    // ... -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);
	        }
        }
Beispiel #3
0
        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);
                }
            }
        }