XUnityWebClient.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Collections.Specialized;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Net;
  8. using System.Reflection;
  9. using System.Text;
  10. using Harmony;
  11. using UnityEngine;
  12. using XUnity.AutoTranslator.Plugin.Core.Endpoints.Http;
  13. using XUnity.AutoTranslator.Plugin.Core.Web.Internal;
  14. namespace XUnity.AutoTranslator.Plugin.Core.Web
  15. {
  16. public class XUnityWebClient : ConnectionTrackingWebClient
  17. {
  18. private HttpStatusCode? _responseCode;
  19. private CookieCollection _responseCookies;
  20. private CookieContainer _requestCookies;
  21. private WebHeaderCollection _requestHeaders;
  22. public XUnityWebClient()
  23. {
  24. Encoding = Encoding.UTF8;
  25. }
  26. private void UnityWebClient_UploadStringCompleted( object sender, XUnityUploadStringCompletedEventArgs ev )
  27. {
  28. UploadStringCompleted -= UnityWebClient_UploadStringCompleted;
  29. var handle = ev.UserState as XUnityWebResponse;
  30. handle.SetCompleted( _responseCode.Value, ev.Result, responseHeaders, _responseCookies, ev.Error );
  31. }
  32. private void UnityWebClient_DownloadStringCompleted( object sender, XUnityDownloadStringCompletedEventArgs ev )
  33. {
  34. DownloadStringCompleted -= UnityWebClient_DownloadStringCompleted;
  35. var handle = ev.UserState as XUnityWebResponse;
  36. handle.SetCompleted( _responseCode.Value, ev.Result, responseHeaders, _responseCookies, ev.Error );
  37. }
  38. protected override WebRequest GetWebRequest( Uri address )
  39. {
  40. var request = base.GetWebRequest( address );
  41. SetRequestVariables( request );
  42. return request;
  43. }
  44. protected override WebResponse GetWebResponse( WebRequest request, IAsyncResult result )
  45. {
  46. WebResponse response = base.GetWebResponse( request, result );
  47. SetResponseVariables( response );
  48. return response;
  49. }
  50. protected override WebResponse GetWebResponse( WebRequest request )
  51. {
  52. WebResponse response = base.GetWebResponse( request );
  53. SetResponseVariables( response );
  54. return response;
  55. }
  56. private void SetRequestVariables( WebRequest r )
  57. {
  58. var httpRequest = r as HttpWebRequest;
  59. if( httpRequest != null )
  60. {
  61. if( _requestCookies != null )
  62. {
  63. httpRequest.CookieContainer = _requestCookies;
  64. }
  65. if( _requestHeaders != null )
  66. {
  67. Headers = _requestHeaders;
  68. }
  69. }
  70. }
  71. private void SetResponseVariables( WebResponse r )
  72. {
  73. var httpResponse = r as HttpWebResponse;
  74. if( httpResponse != null )
  75. {
  76. _responseCode = httpResponse.StatusCode;
  77. _responseCookies = httpResponse.Cookies;
  78. }
  79. }
  80. public XUnityWebResponse Send( XUnityWebRequest request )
  81. {
  82. var handle = new XUnityWebResponse();
  83. _requestCookies = request.Cookies;
  84. _requestHeaders = request.Headers;
  85. if( request.Data == null )
  86. {
  87. try
  88. {
  89. DownloadStringCompleted += UnityWebClient_DownloadStringCompleted;
  90. DownloadStringAsync( request.Address, handle );
  91. }
  92. catch
  93. {
  94. DownloadStringCompleted -= UnityWebClient_DownloadStringCompleted;
  95. throw;
  96. }
  97. }
  98. else
  99. {
  100. try
  101. {
  102. UploadStringCompleted += UnityWebClient_UploadStringCompleted;
  103. UploadStringAsync( request.Address, request.Method, request.Data, handle );
  104. }
  105. catch
  106. {
  107. UploadStringCompleted -= UnityWebClient_UploadStringCompleted;
  108. throw;
  109. }
  110. }
  111. return handle;
  112. }
  113. }
  114. }