Пример #1
0
        public HttpConnectionHandlerTest()
        {
            _mockSocket            = new Mock <IAppSocket>();
            _mockSocketReader      = new Mock <ISocketReader>();
            _mockDataParser        = new Mock <IDataParser>();
            _mockResponseRetriever = new Mock <IRequestProcessor>();

            _testConnectionHandler = new HttpConnectionHandler()
            {
                SocketReader     = _mockSocketReader.Object,
                DataParser       = _mockDataParser.Object,
                RequestProcessor = _mockResponseRetriever.Object
            };

            _testGetRequestString = "GET / HTTP/1.1\r\n" +
                                    "\r\n";
            _testGetRequestBytes = Encoding.UTF8.GetBytes(_testGetRequestString);

            _testGetRequest = new Request(
                "GET",
                "/",
                "HTTP/1.1"
                );

            _testGetResponse = new Response("HTTP/1.1", 200, "OK")
                               .AddHeader("fake", "header");

            _mockResponseRetriever.Setup(rr => rr.HandleRequest(It.IsAny <Request>()))
            .Returns(_testGetResponse);
        }
Пример #2
0
 /// <summary>
 /// 默认配置信息
 /// 使用<see cref="DefaultLogger"/>和<see cref="DefaultHttpLogger"/>
 /// 处理顺序:<see cref="ConnectionHandler"/>=><see cref="RetryHandler"/>=><see cref="LoggingHandler"/>
 /// </summary>
 /// <param name="path">日志目录</param>
 public HttpClientConfigs(string path)
 {
     Logger            = new DefaultLogger(path);
     ConnectionHandler = new HttpConnectionHandler(Logger);
     HttpLogger        = new DefaultHttpLogger(path);
     LoggingHandler    = new HttpLoggingHandler(ConnectionHandler, HttpLogger);
     RetryHandler      = new HttpRetryHandler(LoggingHandler, Logger);
 }
Пример #3
0
        /// <summary>
        /// 处理顺序:<see cref="ConnectionHandler"/>=><see cref="RetryHandler"/>=><see cref="LoggingHandler"/>
        /// </summary>
        /// <param name="logger">通常日志记录者。记录一些类似“开始任务”或“进入特殊处理”之类的日志</param>
        /// <param name="httpLogger">HTTP日志记录者。每个Request与Response的头和内容都被记录在单独的文件中</param>
        public HttpClientConfigs(ILogger logger, IHttpLogger httpLogger)
        {
            Logger     = logger;
            HttpLogger = httpLogger;

            ConnectionHandler = new HttpConnectionHandler(Logger);
            LoggingHandler    = new HttpLoggingHandler(ConnectionHandler, HttpLogger);
            RetryHandler      = new HttpRetryHandler(LoggingHandler, Logger);
        }
Пример #4
0
        /// <summary>
        /// 默认配置信息
        /// 使用<see cref="DefaultLogger"/>和<see cref="DefaultHttpLogger"/>
        /// 处理顺序:<see cref="ConnectionHandler"/>=><see cref="RetryHandler"/>=><see cref="LoggingHandler"/>
        /// </summary>
        public HttpClientConfigs()
        {
            var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "GlobalLogs", DateTime.Now.ToString("yyyy-MM-dd"), Guid.NewGuid().ToString("N"));

            Logger            = new DefaultLogger(path);
            ConnectionHandler = new HttpConnectionHandler(Logger);
            HttpLogger        = new DefaultHttpLogger(path);
            LoggingHandler    = new HttpLoggingHandler(ConnectionHandler, HttpLogger);
            RetryHandler      = new HttpRetryHandler(LoggingHandler, Logger);
        }
Пример #5
0
        /// <summary>
        /// 创建<see cref="HttpClient"/>对象
        /// 推荐在不需要控制HTTP细节时使用
        /// </summary>
        /// <param name="path">日志保存目录</param>
        public static HttpClient CreateHttpClient(string path)
        {
            var logger            = new DefaultLogger(path);
            var connectionHandler = new HttpConnectionHandler(logger);
            var httpLogger        = new DefaultHttpLogger(path);
            var loggingHandler    = new HttpLoggingHandler(connectionHandler, httpLogger);
            var retryHandler      = new HttpRetryHandler(loggingHandler, logger);

            return(new HttpClient(retryHandler));
        }
Пример #6
0
 public void Stop()
 {
     if (connectionHandler != null)
     {
         connectionHandler.Stop();
         connectionHandler = null;
         lock (parserSync)
             allowedUrls.Clear();
         Logger.Debug("Proxy: Stopped listener");
     }
 }
Пример #7
0
 public void Start()
 {
     if (connectionHandler == null)
     {
         connectionHandler = new HttpConnectionHandler(ipAddress, Port);
         connectionHandler.SocketAccepted += connectionHandler_SocketAccepted;
         connectionHandler.Start();
         Port         = connectionHandler.Port;
         proxyAddress = string.Format("http://{0}:{1}", ipAddress, Port);
         Logger.Debug("Proxy: Started listener on '{0}'", proxyAddress);
     }
 }
Пример #8
0
        public void Start()
        {
            lock (SyncRoot)
            {
                if (listener != null)
                {
                    Stop();
                }

                OnStarting();
                listener = new HttpConnectionHandler(IPAddress.Any, port);
                listener.SocketAccepted += listener_SocketAccepted;
                listener.Start();
                if (Emitter != null)
                {
                    Emitter.Publish();
                }
            }
        }
Пример #9
0
 public void Stop()
 {
     Logger.Info("Server: Stopping");
     lock (SyncRoot)
     {
         OnStopping();
         if (Emitter != null)
         {
             Emitter.Stop();
             Emitter = null;
         }
         if (listener != null)
         {
             listener.Stop();
             listener = null;
         }
     }
     CloseConnections();
     Logger.Info("Server: Stopped");
 }