RequestHandler.cs 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. using CefSharp;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Text.RegularExpressions;
  5. namespace UAS_Web.tool
  6. {
  7. class RequestHandler : IRequestHandler
  8. {
  9. public event Action<byte[]> NotifyMsg;
  10. IResponseFilter IRequestHandler.GetResourceResponseFilter(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
  11. {
  12. switch (request.Url.Substring(request.Url.LastIndexOf("/") + 1))
  13. {
  14. case "default?type=printer":
  15. //MessageFilter filter = FilterManager.CreateFilter(request.Identifier.ToString()) as MessageFilter;
  16. //return filter;
  17. case "zplPrint.action":
  18. MessageFilter filter = FilterManager.CreateFilter(request.Identifier.ToString()) as MessageFilter;
  19. return filter;
  20. default:
  21. break;
  22. }
  23. return null;
  24. }
  25. void IRequestHandler.OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength)
  26. {
  27. switch (request.Url.Substring(request.Url.LastIndexOf("/") + 1))
  28. {
  29. case "default?type=printer":
  30. //MessageFilter filter = FilterManager.GetFileter(request.Identifier.ToString()) as MessageFilter;
  31. //string str = System.Text.Encoding.UTF8.GetString(filter.dataAll.ToArray());
  32. //filter_NotifyData(filter.dataAll.ToArray());
  33. //Console.WriteLine(str);
  34. break;
  35. case "zplPrint.action":
  36. MessageFilter filter = FilterManager.GetFileter(request.Identifier.ToString()) as MessageFilter;
  37. string str = System.Text.Encoding.UTF8.GetString(filter.dataAll.ToArray());
  38. filter_NotifyData(filter.dataAll.ToArray());
  39. //Console.WriteLine(str);
  40. break;
  41. default:
  42. break;
  43. }
  44. }
  45. void filter_NotifyData(byte[] data)
  46. {
  47. if (NotifyMsg != null)
  48. {
  49. NotifyMsg(data);
  50. }
  51. }
  52. public bool GetAuthCredentials(IWebBrowser browserControl, IBrowser browser, IFrame frame, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback)
  53. {
  54. return false;
  55. }
  56. public bool OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, bool isRedirect)
  57. {
  58. return false;
  59. }
  60. public CefReturnValue OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
  61. {
  62. return CefReturnValue.Continue;
  63. }
  64. public bool OnCertificateError(IWebBrowser browserControl, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback)
  65. {
  66. return false;
  67. }
  68. public bool OnOpenUrlFromTab(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture)
  69. {
  70. return false;
  71. }
  72. public void OnPluginCrashed(IWebBrowser browserControl, IBrowser browser, string pluginPath)
  73. {
  74. }
  75. public bool OnProtocolExecution(IWebBrowser browserControl, IBrowser browser, string url)
  76. {
  77. return false;
  78. }
  79. public bool OnQuotaRequest(IWebBrowser browserControl, IBrowser browser, string originUrl, long newSize, IRequestCallback callback)
  80. {
  81. return false;
  82. }
  83. public void OnRenderProcessTerminated(IWebBrowser browserControl, IBrowser browser, CefTerminationStatus status)
  84. {
  85. }
  86. public void OnRenderViewReady(IWebBrowser browserControl, IBrowser browser)
  87. {
  88. }
  89. public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength)
  90. {
  91. }
  92. public void OnResourceRedirect(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, ref string newUrl)
  93. {
  94. }
  95. bool IRequestHandler.OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
  96. {
  97. return false;
  98. }
  99. public void GetData()
  100. {
  101. }
  102. public static Dictionary<string, object> ToDictionary(string JsonData)
  103. {
  104. object Data = null;
  105. Dictionary<string, object> Dic = new Dictionary<string, object>();
  106. if (JsonData.StartsWith("["))
  107. {
  108. //如果目标直接就为数组类型,则将会直接输出一个Key为List的List<Dictionary<string, object>>集合
  109. //使用示例List<Dictionary<string, object>> ListDic = (List<Dictionary<string, object>>)Dic["List"];
  110. List<Dictionary<string, object>> List = new List<Dictionary<string, object>>();
  111. MatchCollection ListMatch = Regex.Matches(JsonData, @"{[\s\S]+?}");//使用正则表达式匹配出JSON数组
  112. foreach (Match ListItem in ListMatch)
  113. {
  114. List.Add(ToDictionary(ListItem.ToString()));//递归调用
  115. }
  116. Data = List;
  117. Dic.Add("List", Data);
  118. }
  119. else
  120. {
  121. MatchCollection Match = Regex.Matches(JsonData, @"""(.+?)"": {0,1}(\[[\s\S]+?\]|null|"".+?""|-{0,1}\d*)");//使用正则表达式匹配出JSON数据中的键与值
  122. foreach (Match item in Match)
  123. {
  124. try
  125. {
  126. if (item.Groups[2].ToString().StartsWith("["))
  127. {
  128. //如果目标是数组,将会输出一个Key为当前Json的List<Dictionary<string, object>>集合
  129. //使用示例List<Dictionary<string, object>> ListDic = (List<Dictionary<string, object>>)Dic["Json中的Key"];
  130. List<Dictionary<string, object>> List = new List<Dictionary<string, object>>();
  131. MatchCollection ListMatch = Regex.Matches(item.Groups[2].ToString(), @"{[\s\S]+?}");//使用正则表达式匹配出JSON数组
  132. foreach (Match ListItem in ListMatch)
  133. {
  134. List.Add(ToDictionary(ListItem.ToString()));//递归调用
  135. }
  136. Data = List;
  137. }
  138. else if (item.Groups[2].ToString().ToLower() == "null") Data = null;//如果数据为null(字符串类型),直接转换成null
  139. else Data = item.Groups[2].ToString(); //数据为数字、字符串中的一类,直接写入
  140. Dic.Add(item.Groups[1].ToString(), Data);
  141. }
  142. catch { }
  143. }
  144. }
  145. return Dic;
  146. }
  147. }
  148. }