您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

58 行
2.1 KiB

var LibraryUTPWebSocket = {
$GlobalData: {
ws: []
},
js_html_utpWebSocketCreate : function(sockId, addrData, addrSize, data, size) {
addr = new TextDecoder().decode(HEAPU8.subarray(addrData, addrData + addrSize));
sock = new WebSocket("ws://" + addr);
sock.binaryType = "arraybuffer";
sock.utpMessageQueue = [];
connectMsg = HEAPU8.subarray(data, data + size).slice();
sock.addEventListener('open', function (e) {
sock.send(connectMsg);
});
sock.addEventListener('message', function (e) {
var data8 = new Uint8Array(e.data);
sock.utpMessageQueue.push(data8);
});
GlobalData.ws[sockId] = sock;
},
js_html_utpWebSocketDestroy : function(sockId) {
sock = GlobalData.ws[sockId];
if (sock && (sock.readyState == WebSocket.CONNECTING || sock.readyState == WebSocket.OPEN)) {
sock.close();
}
GlobalData.ws[sockId] = undefined;
},
js_html_utpWebSocketSend : function(sockId, data, size) {
sock = GlobalData.ws[sockId];
if (!sock || sock.readyState != WebSocket.OPEN)
return -1;
sock.send(HEAPU8.subarray(data, data + size));
return size;
},
js_html_utpWebSocketRecv : function(sockId, data, size) {
sock = GlobalData.ws[sockId];
if (!sock || sock.readyState != WebSocket.OPEN)
return -1;
if (sock.utpMessageQueue.length == 0)
return 0;
var buffer = sock.utpMessageQueue.shift();
if (buffer.length > size)
return 0;
HEAP8.set(buffer, data);
return buffer.length;
},
js_html_utpWebSocketIsConnected : function(sockId) {
sock = GlobalData.ws[sockId];
if (!sock)
return -1;
if (sock.readyState == WebSocket.OPEN)
return 1;
if (sock.readyState == WebSocket.CONNECTING)
return 0;
return -1;
}
};
autoAddDeps(LibraryUTPWebSocket, '$GlobalData');
mergeInto(LibraryManager.library, LibraryUTPWebSocket);