forked from Siv3D/OpenSiv3D
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Siv3D.HTTPClient.js
117 lines (100 loc) · 4.83 KB
/
Siv3D.HTTPClient.js
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
mergeInto(LibraryManager.library, {
$siv3dXMLHTTPRequestList: [],
$siv3dXMLHTTPRequestListNextID: 0,
siv3dCreateXMLHTTPRequest: function() {
const id = siv3dXMLHTTPRequestListNextID++;
siv3dXMLHTTPRequestList[id] = new XMLHttpRequest();
return id;
},
siv3dCreateXMLHTTPRequest__sig: "vi",
siv3dCreateXMLHTTPRequest__deps: [ "$siv3dXMLHTTPRequestList", "$siv3dXMLHTTPRequestListNextID" ],
siv3dSetXMLHTTPRequestWriteBackFile: function(id, fileNamePtr) {
const http = siv3dXMLHTTPRequestList[id];
const _file = UTF8ToString(fileNamePtr);
http.addEventListener("load", function() {
const index = _file.lastIndexOf('/');
const destinationDirectory = PATH.dirname(_file);
if (http.status >= 200 && http.status < 300) {
// if a file exists there, we overwrite it
try {
FS.unlink(_file);
} catch (e) {}
// if the destination directory does not yet exist, create it
FS.mkdirTree(destinationDirectory);
FS.createDataFile( _file.substr(0, index), _file.substr(index + 1), new Uint8Array(/** @type{ArrayBuffer}*/(http.response)), true, true, false);
}
});
},
siv3dSetXMLHTTPRequestWriteBackFile__sig: "vii",
siv3dSetXMLHTTPRequestWriteBackFile__deps: [ "$siv3dXMLHTTPRequestList" ],
siv3dSetXMLHTTPRequestCallback: function(id, fnPtr, userDataPtr) {
siv3dXMLHTTPRequestList[id].addEventListener("load", function() {
{{{ makeDynCall("vii", "fnPtr") }}}(id, userDataPtr);
});
},
siv3dSetXMLHTTPRequestCallback__sig: "viii",
siv3dSetXMLHTTPRequestCallback__deps: [ "$siv3dXMLHTTPRequestList" ],
siv3dSetXMLHTTPRequestErrorCallback: function(id, fnPtr, userDataPtr) {
siv3dXMLHTTPRequestList[id].addEventListener("error", function() {
{{{ makeDynCall("vii", "fnPtr") }}}(id, userDataPtr);
});
},
siv3dSetXMLHTTPRequestErrorCallback__sig: "viii",
siv3dSetXMLHTTPRequestErrorCallback__deps: [ "$siv3dXMLHTTPRequestList" ],
siv3dSetXMLHTTPRequestProgressCallback: function(id, fnPtr, userDataPtr) {
siv3dXMLHTTPRequestList[id].addEventListener("progress", function(e) {
{{{ makeDynCall("viiii", "fnPtr") }}}(id, userDataPtr, e.total, e.loaded);
});
},
siv3dSetXMLHTTPRequestProgressCallback__sig: "viii",
siv3dSetXMLHTTPRequestProgressCallback__deps: [ "$siv3dXMLHTTPRequestList" ],
siv3dSetXMLHTTPRequestRequestHeader: function(id, namePtr, dataPtr) {
const name = UTF8ToString(namePtr);
const data = UTF8ToString(dataPtr);
siv3dXMLHTTPRequestList[id].setRequestHeader(name, data);
},
siv3dSetXMLHTTPRequestRequestHeader__sig: "viii",
siv3dSetXMLHTTPRequestRequestHeader__deps: [ "$siv3dXMLHTTPRequestList" ],
siv3dGetXMLHTTPRequestResponseHeaders: function(id) {
const http = siv3dXMLHTTPRequestList[id];
const responseHeaders = http.getAllResponseHeaders();
return allocate(intArrayFromString(`HTTP/1.1 ${http.status} ${http.statusText}\r\n${responseHeaders}`), ALLOC_NORMAL);
},
siv3dGetXMLHTTPRequestResponseHeaders__sig: "ii",
siv3dGetXMLHTTPRequestResponseHeaders__deps: [ "$siv3dXMLHTTPRequestList" ],
siv3dSendXMLHTTPRequest: function(id, dataPtr) {
{{{ runtimeKeepalivePush() }}}
siv3dXMLHTTPRequestList[id].addEventListener("load", function() {
{{{ runtimeKeepalivePop() }}}
});
siv3dXMLHTTPRequestList[id].addEventListener("error", function() {
{{{ runtimeKeepalivePop() }}}
});
const data = dataPtr ? UTF8ToString(dataPtr) : null;
siv3dXMLHTTPRequestList[id].send(data);
},
siv3dSendXMLHTTPRequest__sig: "vii",
siv3dSendXMLHTTPRequest__deps: [ "$siv3dXMLHTTPRequestList" ],
siv3dOpenXMLHTTPRequest: function(id, methodPtr, urlPtr) {
const http = siv3dXMLHTTPRequestList[id];
const method = UTF8ToString(methodPtr);
const url = UTF8ToString(urlPtr);
http.open(method, url, true);
http.responseType = "arraybuffer";
if (method == "POST") {
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
}
},
siv3dOpenXMLHTTPRequest__sig: "viii",
siv3dOpenXMLHTTPRequest__deps: [ "$siv3dXMLHTTPRequestList" ],
siv3dAbortXMLHTTPRequest: function(id) {
siv3dXMLHTTPRequestList[id].abort();
},
siv3dAbortXMLHTTPRequest__sig: "vi",
siv3dAbortXMLHTTPRequest__deps: [ "$siv3dXMLHTTPRequestList" ],
siv3dDeleteXMLHTTPRequest: function(id, methodPtr, urlPtr) {
delete siv3dXMLHTTPRequestList[id];
},
siv3dDeleteXMLHTTPRequest__sig: "viii",
siv3dDeleteXMLHTTPRequest__deps: [ "$siv3dXMLHTTPRequestList" ],
});