1
1
using System ;
2
2
using System . Collections ;
3
3
using System . Collections . Generic ;
4
- using System . Text ;
4
+ using Duck . Http . Service ;
5
+ using Duck . Http . Service . Unity ;
5
6
using UnityEngine ;
6
7
using UnityEngine . Networking ;
7
8
@@ -14,19 +15,30 @@ public static Http Instance
14
15
get
15
16
{
16
17
if ( instance != null ) return instance ;
17
- instance = new GameObject ( typeof ( Http ) . Name ) . AddComponent < Http > ( ) ;
18
- instance . gameObject . hideFlags = HideFlags . HideInHierarchy ;
19
- instance . superHeaders = new Dictionary < string , string > ( ) ;
20
- instance . httpRequests = new Dictionary < HttpRequest , Coroutine > ( ) ;
21
- DontDestroyOnLoad ( instance . gameObject ) ;
18
+ Init ( new UnityHttpService ( ) ) ;
22
19
return instance ;
23
20
}
24
21
}
25
22
26
23
private static Http instance ;
27
24
25
+ private IHttpService service ;
28
26
private Dictionary < string , string > superHeaders ;
29
- private Dictionary < HttpRequest , Coroutine > httpRequests ;
27
+ private Dictionary < IHttpRequest , Coroutine > httpRequests ;
28
+
29
+ public static void Init ( IHttpService service )
30
+ {
31
+ if ( instance ) return ;
32
+
33
+ instance = new GameObject ( typeof ( Http ) . Name ) . AddComponent < Http > ( ) ;
34
+ instance . gameObject . hideFlags = HideFlags . HideInHierarchy ;
35
+ instance . superHeaders = new Dictionary < string , string > ( ) ;
36
+ instance . httpRequests = new Dictionary < IHttpRequest , Coroutine > ( ) ;
37
+ instance . service = service ;
38
+ DontDestroyOnLoad ( instance . gameObject ) ;
39
+ }
40
+
41
+ #region Super Headers
30
42
31
43
/// <summary>
32
44
/// Super headers are key value pairs that will be added to every subsequent HttpRequest.
@@ -72,168 +84,108 @@ public static bool RemoveSuperHeader(string key)
72
84
return Instance . superHeaders . Remove ( key ) ;
73
85
}
74
86
75
- /// <summary>
76
- /// Creates a HttpRequest configured for HTTP GET.
77
- /// </summary>
78
- /// <param name="uri">The URI of the resource to retrieve via HTTP GET.</param>
79
- /// <returns>A HttpRequest object configured to retrieve data from uri.</returns >
80
- public static HttpRequest Get ( string uri )
87
+ #endregion
88
+
89
+ #region Static Requests
90
+
91
+ /// <see cref="Duck.Http.Service.IHttpService.Get"/ >
92
+ public static IHttpRequest Get ( string uri )
81
93
{
82
- return new HttpRequest ( UnityWebRequest . Get ( uri ) ) ;
94
+ return Instance . service . Get ( uri ) ;
83
95
}
84
96
85
- /// <summary>
86
- /// Creates a HttpRequest configured for HTTP GET.
87
- /// </summary>
88
- /// <param name="uri">The URI of the resource to retrieve via HTTP GET.</param>
89
- /// <returns>A HttpRequest object configured to retrieve data from uri.</returns>
90
- public static HttpRequest GetTexture ( string uri )
97
+ /// <see cref="Duck.Http.Service.IHttpService.GetTexture"/>
98
+ public static IHttpRequest GetTexture ( string uri )
91
99
{
92
- return new HttpRequest ( UnityWebRequestTexture . GetTexture ( uri ) ) ;
100
+ return Instance . service . GetTexture ( uri ) ;
93
101
}
94
102
95
- /// <summary>
96
- /// Creates a HttpRequest configured to send form data to a server via HTTP POST.
97
- /// </summary>
98
- /// <param name="uri">The target URI to which form data will be transmitted.</param>
99
- /// <param name="postData">Form body data. Will be URLEncoded via WWWTranscoder.URLEncode prior to transmission.</param>
100
- /// <returns>A HttpRequest configured to send form data to uri via POST.</returns>
101
- public static HttpRequest Post ( string uri , string postData )
103
+ /// <see cref="Duck.Http.Service.IHttpService.Post(string, string)"/>
104
+ public static IHttpRequest Post ( string uri , string postData )
102
105
{
103
- return new HttpRequest ( UnityWebRequest . Post ( uri , postData ) ) ;
106
+ return Instance . service . Post ( uri , postData ) ;
104
107
}
105
108
106
- /// <summary>
107
- /// Creates a HttpRequest configured to send form data to a server via HTTP POST.
108
- /// </summary>
109
- /// <param name="uri">The target URI to which form data will be transmitted.</param>
110
- /// <param name="formData">Form fields or files encapsulated in a WWWForm object, for formatting and transmission to the remote server.</param>
111
- /// <returns> A HttpRequest configured to send form data to uri via POST. </returns>
112
- public static HttpRequest Post ( string uri , WWWForm formData )
109
+ /// <see cref="Duck.Http.Service.IHttpService.Post(string, WWWForm)"/>
110
+ public static IHttpRequest Post ( string uri , WWWForm formData )
113
111
{
114
- return new HttpRequest ( UnityWebRequest . Post ( uri , formData ) ) ;
112
+ return Instance . service . Post ( uri , formData ) ;
115
113
}
116
114
117
- /// <summary>
118
- /// Creates a HttpRequest configured to send form data to a server via HTTP POST.
119
- /// </summary>
120
- /// <param name="uri">The target URI to which form data will be transmitted.</param>
121
- /// <param name="formData">Form fields in the form of a Key Value Pair, for formatting and transmission to the remote server.</param>
122
- /// <returns>A HttpRequest configured to send form data to uri via POST.</returns>
123
- public static HttpRequest Post ( string uri , Dictionary < string , string > formData )
115
+ /// <see cref="Duck.Http.Service.IHttpService.Post(string, Dictionary<string, string>)"/>
116
+ public static IHttpRequest Post ( string uri , Dictionary < string , string > formData )
124
117
{
125
- return new HttpRequest ( UnityWebRequest . Post ( uri , formData ) ) ;
118
+ return Instance . service . Post ( uri , formData ) ;
126
119
}
127
120
128
- /// <summary>
129
- /// Creates a HttpRequest configured to send form multipart form to a server via HTTP POST.
130
- /// </summary>
131
- /// <param name="uri">The target URI to which form data will be transmitted.</param>
132
- /// <param name="multipartForm">MultipartForm data for formatting and transmission to the remote server.</param>
133
- /// <returns>A HttpRequest configured to send form data to uri via POST.</returns>
134
- public static HttpRequest Post ( string uri , List < IMultipartFormSection > multipartForm )
121
+ /// <see cref="Duck.Http.Service.IHttpService.Post(string, List<IMultipartFormSection>)"/>
122
+ public static IHttpRequest Post ( string uri , List < IMultipartFormSection > multipartForm )
135
123
{
136
- return new HttpRequest ( UnityWebRequest . Post ( uri , multipartForm ) ) ;
124
+ return Instance . service . Post ( uri , multipartForm ) ;
137
125
}
138
126
139
- /// <summary>
140
- /// Creates a HttpRequest configured to send raw bytes to a server via HTTP POST.
141
- /// </summary>
142
- /// <param name="uri">The target URI to which bytes will be transmitted.</param>
143
- /// <param name="bytes">Byte array data.</param>
144
- /// <param name="contentType">String representing the MIME type of the data (e.g. image/jpeg).</param>
145
- /// <returns>A HttpRequest configured to send raw bytes to a server via POST.</returns>
146
- public static HttpRequest Post ( string uri , byte [ ] bytes , string contentType )
127
+ /// <see cref="Duck.Http.Service.IHttpService.Post(string, byte[], string)"/>
128
+ public static IHttpRequest Post ( string uri , byte [ ] bytes , string contentType )
147
129
{
148
- var unityWebRequest = new UnityWebRequest ( uri , UnityWebRequest . kHttpVerbPOST )
149
- {
150
- uploadHandler = new UploadHandlerRaw ( bytes )
151
- {
152
- contentType = contentType
153
- } ,
154
- downloadHandler = new DownloadHandlerBuffer ( )
155
- } ;
156
- return new HttpRequest ( unityWebRequest ) ;
130
+ return Instance . service . Post ( uri , bytes , contentType ) ;
157
131
}
158
132
159
- /// <summary>
160
- /// Creates a HttpRequest configured to send json data to a server via HTTP POST.
161
- /// </summary>
162
- /// <param name="uri">The target URI to which json data will be transmitted.</param>
163
- /// <param name="json">Json body data.</param>
164
- /// <returns>A HttpRequest configured to send json data to uri via POST.</returns>
165
- public static HttpRequest PostJson ( string uri , string json )
133
+ /// <see cref="Duck.Http.Service.IHttpService.PostJson"/>
134
+ public static IHttpRequest PostJson ( string uri , string json )
166
135
{
167
- return Post ( uri , Encoding . UTF8 . GetBytes ( json ) , "application/ json" ) ;
136
+ return Instance . service . PostJson ( uri , json ) ;
168
137
}
169
138
170
- /// <summary>
171
- /// Creates a HttpRequest configured to send json data to a server via HTTP POST.
172
- /// </summary>
173
- /// <param name="uri">The target URI to which json data will be transmitted.</param>
174
- /// <param name="payload">The object to be parsed to json data.</param>
175
- /// <returns>A HttpRequest configured to send json data to uri via POST.</returns>
176
- public static HttpRequest PostJson < T > ( string uri , T payload ) where T : class
139
+ /// <see cref="Duck.Http.Service.IHttpService.PostJson{T}(string, T)"/>
140
+ public static IHttpRequest PostJson < T > ( string uri , T payload ) where T : class
177
141
{
178
- return PostJson ( uri , JsonUtility . ToJson ( payload ) ) ;
142
+ return Instance . service . PostJson ( uri , payload ) ;
179
143
}
180
144
181
- /// <summary>
182
- /// Creates a HttpRequest configured to upload raw data to a remote server via HTTP PUT.
183
- /// </summary>
184
- /// <param name="uri">The URI to which the data will be sent.</param>
185
- /// <param name="bodyData">The data to transmit to the remote server.</param>
186
- /// <returns>A HttpRequest configured to transmit bodyData to uri via HTTP PUT.</returns>
187
- public static HttpRequest Put ( string uri , byte [ ] bodyData )
145
+ /// <see cref="Duck.Http.Service.IHttpService.Put(string, byte[])"/>
146
+ public static IHttpRequest Put ( string uri , byte [ ] bodyData )
188
147
{
189
- return new HttpRequest ( UnityWebRequest . Put ( uri , bodyData ) ) ;
148
+ return Instance . service . Put ( uri , bodyData ) ;
190
149
}
191
150
192
- /// <summary>
193
- /// Creates a HttpRequest configured to upload raw data to a remote server via HTTP PUT.
194
- /// </summary>
195
- /// <param name="uri">The URI to which the data will be sent.</param>
196
- /// <param name="bodyData">The data to transmit to the remote server.
197
- /// The string will be converted to raw bytes via <a href="http:msdn.microsoft.comen-uslibrarysystem.text.encoding.utf8">System.Text.Encoding.UTF8<a>.</param>
198
- /// <returns>A HttpRequest configured to transmit bodyData to uri via HTTP PUT.</returns>
199
- public static HttpRequest Put ( string uri , string bodyData )
151
+ /// <see cref="Duck.Http.Service.IHttpService.Put(string, string)"/>
152
+ public static IHttpRequest Put ( string uri , string bodyData )
200
153
{
201
- return new HttpRequest ( UnityWebRequest . Put ( uri , bodyData ) ) ;
154
+ return Instance . service . Put ( uri , bodyData ) ;
202
155
}
203
156
204
- /// <summary>
205
- /// Creates a HttpRequest configured for HTTP DELETE.
206
- /// </summary>
207
- /// <param name="uri">The URI to which a DELETE request should be sent.</param>
208
- /// <returns>A HttpRequest configured to send an HTTP DELETE request.</returns>
209
- public static HttpRequest Delete ( string uri )
157
+ /// <see cref="Duck.Http.Service.IHttpService.Delete"/>
158
+ public static IHttpRequest Delete ( string uri )
210
159
{
211
- return new HttpRequest ( UnityWebRequest . Delete ( uri ) ) ;
160
+ return Instance . service . Delete ( uri ) ;
212
161
}
213
162
214
- /// <summary>
215
- /// Creates a HttpRequest configured to send a HTTP HEAD request.
216
- /// </summary>
217
- /// <param name="uri">The URI to which to send a HTTP HEAD request.</param>
218
- /// <returns>A HttpRequest configured to transmit a HTTP HEAD request.</returns>
219
- public static HttpRequest Head ( string uri )
163
+ /// <see cref="Duck.Http.Service.IHttpService.Head"/>
164
+ public static IHttpRequest Head ( string uri )
220
165
{
221
- return new HttpRequest ( UnityWebRequest . Head ( uri ) ) ;
166
+ return Instance . service . Head ( uri ) ;
222
167
}
223
168
224
- internal void Send ( HttpRequest request , Action < HttpResponse > onSuccess = null ,
169
+ #endregion
170
+
171
+ internal void Send ( IHttpRequest request , Action < HttpResponse > onSuccess = null ,
225
172
Action < HttpResponse > onError = null , Action < HttpResponse > onNetworkError = null )
226
173
{
227
- var coroutine = StartCoroutine ( SendCoroutine ( request , onSuccess , onError , onNetworkError ) ) ;
174
+ var enumerator = SendCoroutine ( request , onSuccess , onError , onNetworkError ) ;
175
+ var coroutine = StartCoroutine ( enumerator ) ;
228
176
httpRequests . Add ( request , coroutine ) ;
229
177
}
230
178
231
- internal void Abort ( HttpRequest request )
179
+ private IEnumerator SendCoroutine ( IHttpRequest request , Action < HttpResponse > onSuccess = null ,
180
+ Action < HttpResponse > onError = null , Action < HttpResponse > onNetworkError = null )
232
181
{
233
- if ( request . UnityWebRequest != null && ! request . UnityWebRequest . isDone )
234
- {
235
- request . UnityWebRequest . Abort ( ) ;
236
- }
182
+ yield return service . Send ( request , onSuccess , onError , onNetworkError ) ;
183
+ Instance . httpRequests . Remove ( request ) ;
184
+ }
185
+
186
+ internal void Abort ( IHttpRequest request )
187
+ {
188
+ Instance . service . Abort ( request ) ;
237
189
238
190
if ( httpRequests . ContainsKey ( request ) )
239
191
{
@@ -247,38 +199,8 @@ private void Update()
247
199
{
248
200
foreach ( var httpRequest in httpRequests . Keys )
249
201
{
250
- httpRequest . UpdateProgress ( ) ;
202
+ ( httpRequest as IUpdateProgress ) ? . UpdateProgress ( ) ;
251
203
}
252
204
}
253
-
254
- private static IEnumerator SendCoroutine ( HttpRequest request , Action < HttpResponse > onSuccess = null ,
255
- Action < HttpResponse > onError = null , Action < HttpResponse > onNetworkError = null )
256
- {
257
- var unityWebRequest = request . UnityWebRequest ;
258
- yield return unityWebRequest . SendWebRequest ( ) ;
259
-
260
- var response = new HttpResponse ( unityWebRequest ) ;
261
-
262
- if ( unityWebRequest . isNetworkError )
263
- {
264
- if ( onNetworkError != null )
265
- {
266
- onNetworkError . Invoke ( response ) ;
267
- }
268
- }
269
- else if ( unityWebRequest . isHttpError )
270
- {
271
- if ( onError != null )
272
- {
273
- onError . Invoke ( response ) ;
274
- }
275
- }
276
- else if ( onSuccess != null )
277
- {
278
- onSuccess . Invoke ( response ) ;
279
- }
280
-
281
- Instance . httpRequests . Remove ( request ) ;
282
- }
283
205
}
284
206
}
0 commit comments