forked from carlflor/unity_graphql_client
-
Notifications
You must be signed in to change notification settings - Fork 2
/
GraphQLClient.cs
67 lines (50 loc) · 2.09 KB
/
GraphQLClient.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using System;
using System.Collections;
using System.Text;
using Newtonsoft.Json;
using UnityEngine.Networking;
namespace GraphQL {
public class GraphQLClient {
private string url;
public GraphQLClient (string url) {
this.url = url;
}
private class GraphQLQuery {
public string query;
public object variables;
}
private UnityWebRequest QueryRequest (string query, object variables, string token = null) {
var fullQuery = new GraphQLQuery() {
query = query,
variables = variables,
};
string json = JsonConvert.SerializeObject(fullQuery);
UnityWebRequest request = UnityWebRequest.Post(url, UnityWebRequest.kHttpVerbPOST);
byte[] payload = Encoding.UTF8.GetBytes(json);
request.uploadHandler = new UploadHandlerRaw(payload);
request.SetRequestHeader("Content-Type", "application/json");
if (token != null) request.SetRequestHeader("Authorization", "Bearer " + token);
return request;
}
private IEnumerator SendRequest (string query, object variables = null,
Action<GraphQLResponse> callback = null,
string token = null) {
var request = QueryRequest(query, variables, token);
using (UnityWebRequest www = request) {
yield return www.Send();
if (www.isNetworkError) {
if (callback != null) callback(new GraphQLResponse("", www.error));
yield break;
}
string responseString = www.downloadHandler.text;
var result = new GraphQLResponse(responseString);
if (callback != null) callback(result);
}
request.Dispose();
}
public void Query (string query, object variables = null, Action<GraphQLResponse> callback = null,
string sToken = "") {
Coroutiner.StartCoroutine(SendRequest(query, variables, callback, sToken));
}
}
}