156 lines
3.4 KiB
JavaScript
156 lines
3.4 KiB
JavaScript
var Lib_BEST_HTTP_WebGL_ES_Bridge =
|
|
{
|
|
$es: {
|
|
eventSourceInstances: {},
|
|
nextInstanceId : 1,
|
|
|
|
Set : function(event) {
|
|
es.eventSourceInstances[es.nextInstanceId] = event;
|
|
return es.nextInstanceId++;
|
|
},
|
|
|
|
Get : function(id) {
|
|
return es.eventSourceInstances[id];
|
|
},
|
|
|
|
Remove: function(id) {
|
|
delete es.eventSourceInstances[id];
|
|
},
|
|
|
|
_callOnError: function(errCallback, id, reason)
|
|
{
|
|
if (reason)
|
|
{
|
|
var length = lengthBytesUTF8(reason) + 1;
|
|
var buffer = _malloc(length);
|
|
|
|
stringToUTF8Array(reason, HEAPU8, buffer, length);
|
|
|
|
Module['dynCall_vii'](errCallback, id, buffer);
|
|
|
|
_free(buffer);
|
|
}
|
|
else
|
|
Module['dynCall_vii'](errCallback, [id, 0]);
|
|
},
|
|
|
|
_GenericEventHandler: function(id, eventName, e, onMessage) {
|
|
function AllocString(str) {
|
|
if (str != undefined)
|
|
{
|
|
var length = lengthBytesUTF8(str) + 1;
|
|
var buff = _malloc(length);
|
|
|
|
stringToUTF8Array(str, HEAPU8, buff, length);
|
|
|
|
return buff;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
var eventBuffer = AllocString(eventName);
|
|
var dataBuffer = AllocString(e.data);
|
|
var idBuffer = AllocString(e.id);
|
|
|
|
Module['dynCall_viiiii'](onMessage, id, eventBuffer, dataBuffer, idBuffer, e.retry);
|
|
|
|
if (eventBuffer != 0)
|
|
_free(eventBuffer);
|
|
|
|
if (dataBuffer != 0)
|
|
_free(dataBuffer);
|
|
|
|
if (idBuffer != 0)
|
|
_free(idBuffer);
|
|
}
|
|
},
|
|
|
|
ES_IsSupported: function() {
|
|
return typeof(EventSource) !== "undefined";
|
|
},
|
|
|
|
ES_Create: function(urlPtr, withCredentials, onOpen, onMessage, onError)
|
|
{
|
|
var url = new URL(UTF8ToString(urlPtr)); ///*encodeURI*/(UTF8ToString(urlPtr)).replace(/\+/g, '%2B').replace(/%252[fF]/ig, '%2F');
|
|
|
|
var event = {
|
|
onError: onError
|
|
};
|
|
|
|
var id = es.nextInstanceId;
|
|
|
|
console.log(id + ' ES_Create(' + url + ', ' + withCredentials + ')');
|
|
|
|
event.eventImpl = new EventSource(url, { withCredentials: withCredentials != 0 ? true : false } );
|
|
event.onMessage = onMessage;
|
|
|
|
event.eventImpl.onopen = function() {
|
|
console.log(id + ' ES_Create - onOpen');
|
|
|
|
Module['dynCall_vi'](onOpen, id);
|
|
};
|
|
|
|
event.eventImpl.onmessage = function(e) {
|
|
console.log(id + ' on Generic Message');
|
|
es._GenericEventHandler(id, undefined, e, onMessage);
|
|
};
|
|
|
|
event.eventImpl.onerror = function(e) {
|
|
console.log(id + ' ES_Create - onError');
|
|
|
|
es._callOnError(onError, id, "Unknown Error!");
|
|
|
|
if (e.target.readyState === 0)
|
|
event.eventImpl.close();
|
|
};
|
|
|
|
return es.Set(event);
|
|
},
|
|
|
|
ES_AddEventHandler: function(id, eventNamePtr) {
|
|
var eventName = UTF8ToString(eventNamePtr);
|
|
|
|
console.log(id + ' ES_AddEventHandler(' + eventName + ')');
|
|
|
|
var event = es.Get(id);
|
|
|
|
try
|
|
{
|
|
event.eventImpl.addEventListener(eventName, function(e) {
|
|
console.log(id + ' onEvent('+ eventName + ')');
|
|
|
|
es._GenericEventHandler(id, eventName, e, event.onMessage);
|
|
});
|
|
}
|
|
catch(e) {
|
|
es._callOnError(event.eventImpl.onError, id, ' ' + e.name + ': ' + e.message);
|
|
}
|
|
},
|
|
|
|
ES_Close: function(id)
|
|
{
|
|
console.log(id + ' ES_Close');
|
|
|
|
var event = es.Get(id);
|
|
|
|
try
|
|
{
|
|
event.eventImpl.close();
|
|
}
|
|
catch(e) {
|
|
es._callOnError(event.eventImpl.onError, id, ' ' + e.name + ': ' + e.message);
|
|
}
|
|
},
|
|
|
|
ES_Release: function(id)
|
|
{
|
|
console.log(id + ' ES_Release');
|
|
|
|
es.Remove(id);
|
|
}
|
|
};
|
|
|
|
autoAddDeps(Lib_BEST_HTTP_WebGL_ES_Bridge, '$es');
|
|
mergeInto(LibraryManager.library, Lib_BEST_HTTP_WebGL_ES_Bridge);
|