Browse Source

修改截取类

章政 7 years ago
parent
commit
dae5fe5b7f
4 changed files with 32 additions and 45 deletions
  1. 5 3
      UAS_Web/Browser.cs
  2. 0 3
      UAS_Web/tool/FilterManager.cs
  3. 7 22
      UAS_Web/tool/MessageFilter.cs
  4. 20 17
      UAS_Web/tool/RequestHandler.cs

+ 5 - 3
UAS_Web/Browser.cs

@@ -4,6 +4,7 @@ using System.Diagnostics;
 using System.Runtime.InteropServices;
 using System.Runtime.InteropServices;
 using System.Windows.Forms;
 using System.Windows.Forms;
 using UAS_Web.tool;
 using UAS_Web.tool;
+using CefSharp;
 
 
 namespace UAS_Web
 namespace UAS_Web
 {
 {
@@ -33,15 +34,16 @@ namespace UAS_Web
             webBrowser.LoadError += WebBrowser_LoadError;
             webBrowser.LoadError += WebBrowser_LoadError;
         }
         }
 
 
-        private void WebBrowser_LoadError(object sender, CefSharp.LoadErrorEventArgs e)
+        private void WebBrowser_LoadError(object sender, LoadErrorEventArgs e)
         {
         {
-            MessageBox.Show("当前网络无法访问");
+            MessageBox.Show("当前网络无法访问" + e.ErrorText);
         }
         }
 
 
         private void Browser_FormClosing(object sender, FormClosingEventArgs e)
         private void Browser_FormClosing(object sender, FormClosingEventArgs e)
         {
         {
             webBrowser.GetBrowser().CloseBrowser(true);
             webBrowser.GetBrowser().CloseBrowser(true);
-            CefSharp.Cef.Shutdown();
+            Cef.Shutdown();
+            Close();
         }
         }
 
 
         private void Browser_Load(object sender, EventArgs e)
         private void Browser_Load(object sender, EventArgs e)

+ 0 - 3
UAS_Web/tool/FilterManager.cs

@@ -1,8 +1,5 @@
 using CefSharp;
 using CefSharp;
-using System;
 using System.Collections.Generic;
 using System.Collections.Generic;
-using System.Linq;
-using System.Text;
 
 
 namespace UAS_Web.tool
 namespace UAS_Web.tool
 {
 {

+ 7 - 22
UAS_Web/tool/MessageFilter.cs

@@ -7,7 +7,6 @@ namespace UAS_Web.tool
 {
 {
     class MessageFilter : IResponseFilter
     class MessageFilter : IResponseFilter
     {
     {
-
         public event Action<byte[]> NotifyData;
         public event Action<byte[]> NotifyData;
         private int contentLength = 0;
         private int contentLength = 0;
         public List<byte> dataAll = new List<byte>();
         public List<byte> dataAll = new List<byte>();
@@ -19,47 +18,33 @@ namespace UAS_Web.tool
 
 
         public void Dispose()
         public void Dispose()
         {
         {
-            
+
         }
         }
 
 
         public FilterStatus Filter(Stream dataIn, out long dataInRead, Stream dataOut, out long dataOutWritten)
         public FilterStatus Filter(Stream dataIn, out long dataInRead, Stream dataOut, out long dataOutWritten)
         {
         {
             try
             try
             {
             {
-                if (dataIn == null)
+                if (dataIn == null || dataIn.Length == 0)
                 {
                 {
                     dataInRead = 0;
                     dataInRead = 0;
                     dataOutWritten = 0;
                     dataOutWritten = 0;
+
                     return FilterStatus.Done;
                     return FilterStatus.Done;
                 }
                 }
-
                 dataInRead = dataIn.Length;
                 dataInRead = dataIn.Length;
                 dataOutWritten = Math.Min(dataInRead, dataOut.Length);
                 dataOutWritten = Math.Min(dataInRead, dataOut.Length);
-
                 dataIn.CopyTo(dataOut);
                 dataIn.CopyTo(dataOut);
                 dataIn.Seek(0, SeekOrigin.Begin);
                 dataIn.Seek(0, SeekOrigin.Begin);
                 byte[] bs = new byte[dataIn.Length];
                 byte[] bs = new byte[dataIn.Length];
                 dataIn.Read(bs, 0, bs.Length);
                 dataIn.Read(bs, 0, bs.Length);
                 dataAll.AddRange(bs);
                 dataAll.AddRange(bs);
 
 
-                if (dataAll.Count == this.contentLength)
-                {
-                    // 通过这里进行通知  
-                    NotifyData(dataAll.ToArray());
-                    return FilterStatus.Done;
-                }
-                else if (dataAll.Count < this.contentLength)
-                {
-                    dataInRead = dataIn.Length;
-                    dataOutWritten = dataIn.Length;
-                    return FilterStatus.NeedMoreData;
-                }
-                else
-                {
-                    return FilterStatus.Error;
-                }
+                dataInRead = dataIn.Length;
+                dataOutWritten = dataIn.Length;
+                return FilterStatus.NeedMoreData;
             }
             }
-            catch (Exception)
+            catch (Exception )
             {
             {
                 dataInRead = dataIn.Length;
                 dataInRead = dataIn.Length;
                 dataOutWritten = dataIn.Length;
                 dataOutWritten = dataIn.Length;

+ 20 - 17
UAS_Web/tool/RequestHandler.cs

@@ -6,9 +6,10 @@ namespace UAS_Web.tool
     class RequestHandler : IRequestHandler
     class RequestHandler : IRequestHandler
     {
     {
         public event Action<byte[]> NotifyMsg;
         public event Action<byte[]> NotifyMsg;
-
-        public IResponseFilter GetResourceResponseFilter(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
+        MessageFilter filter=null;
+        IResponseFilter IRequestHandler.GetResourceResponseFilter(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
         {
         {
+            Console.WriteLine("GetResourceResponseFilter1");
             var url = new Uri(request.Url);
             var url = new Uri(request.Url);
             if (url.AbsoluteUri.Contains("http://192.168.253.6/uas_dev/jsps/vendbarcode/login.jsp"))
             if (url.AbsoluteUri.Contains("http://192.168.253.6/uas_dev/jsps/vendbarcode/login.jsp"))
             {
             {
@@ -26,13 +27,13 @@ namespace UAS_Web.tool
             }
             }
         }
         }
 
 
-        public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength)
+        void IRequestHandler.OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength)
         {
         {
+            Console.WriteLine("OnResourceLoadComplete1");
             if (request.Url.Contains("http://192.168.253.6/uas_dev/jsps/vendbarcode/login.jsp"))
             if (request.Url.Contains("http://192.168.253.6/uas_dev/jsps/vendbarcode/login.jsp"))
             {
             {
                 var filter = FilterManager.GetFileter(request.Identifier.ToString()) as MessageFilter;
                 var filter = FilterManager.GetFileter(request.Identifier.ToString()) as MessageFilter;
-                string str = System.Text.Encoding.ASCII.GetString(filter.dataAll.ToArray());
-                Console.WriteLine(str);
+                //string str = System.Text.Encoding.ASCII.GetString(filter.dataAll.ToArray());
                 filter_NotifyData(filter.dataAll.ToArray());
                 filter_NotifyData(filter.dataAll.ToArray());
             }
             }
         }
         }
@@ -76,7 +77,6 @@ namespace UAS_Web.tool
         public void OnPluginCrashed(IWebBrowser browserControl, IBrowser browser, string pluginPath)
         public void OnPluginCrashed(IWebBrowser browserControl, IBrowser browser, string pluginPath)
         {
         {
             Console.WriteLine("OnPluginCrashed");
             Console.WriteLine("OnPluginCrashed");
-            //throw new NotImplementedException();
         }
         }
 
 
         public bool OnProtocolExecution(IWebBrowser browserControl, IBrowser browser, string url)
         public bool OnProtocolExecution(IWebBrowser browserControl, IBrowser browser, string url)
@@ -94,32 +94,35 @@ namespace UAS_Web.tool
         public void OnRenderProcessTerminated(IWebBrowser browserControl, IBrowser browser, CefTerminationStatus status)
         public void OnRenderProcessTerminated(IWebBrowser browserControl, IBrowser browser, CefTerminationStatus status)
         {
         {
             Console.WriteLine("OnRenderProcessTerminated");
             Console.WriteLine("OnRenderProcessTerminated");
-            //throw new NotImplementedException();
         }
         }
 
 
         public void OnRenderViewReady(IWebBrowser browserControl, IBrowser browser)
         public void OnRenderViewReady(IWebBrowser browserControl, IBrowser browser)
         {
         {
             Console.WriteLine("OnRenderViewReady");
             Console.WriteLine("OnRenderViewReady");
-            //throw new NotImplementedException();
         }
         }
 
 
-        //public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength)
-        //{
-        //    Console.WriteLine("OnResourceLoadComplete");
-        //    Console.WriteLine(response.ResponseHeaders);
-        //}
+        public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength)
+        {
+            Console.WriteLine("OnResourceLoadComplete");
+        }
 
 
         public void OnResourceRedirect(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, ref string newUrl)
         public void OnResourceRedirect(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, ref string newUrl)
         {
         {
             Console.WriteLine("OnResourceRedirect");
             Console.WriteLine("OnResourceRedirect");
-            //throw new NotImplementedException();
         }
         }
 
 
-        public bool OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
+        bool IRequestHandler.OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
         {
         {
-            //Console.WriteLine(response.MimeType);
-            //Console.WriteLine(response.StatusText);
             Console.WriteLine("OnResourceResponse");
             Console.WriteLine("OnResourceResponse");
+            try
+            {
+                var content_length = int.Parse(response.ResponseHeaders["Content-Length"]);
+                if (filter != null)
+                {
+                    filter.SetContentLength(content_length);
+                }
+            }   
+            catch { }
             return false;
             return false;
         }
         }
     }
     }