Question by
iiiiiiiiiiiiiiiiiiiiiiii · Aug 25, 2015 at 05:22 AM ·
webglwwwsocket
WebGL/WebSocket has stopped while processing WWW.LoadFromCacheOrDownload
First, apologize my English. My WebGL/WebSocket has stopped while processing WWW.LoadFromCacheOrDownload on Chrome. The Server sent a packet but, client socket can not receive immediately. when WWW download has done, the client receives a number of accumulated packets.
Please, help me!
My Unity version is 5.1.2p3 and, Chrome browser version is 44.0.2403.157 and, here is my websocket.jslib code.
var LibraryWebSockets =
{
$webSocketInstances: [],
SocketConnect: function(url, callee, onopen, onmessage, onclose, onerror)
{
var strURL = Pointer_stringify(url);
var strCallee = Pointer_stringify(callee);
var strOnOpen = Pointer_stringify(onopen);
var strOnMessage = Pointer_stringify(onmessage);
var strOnClose = Pointer_stringify(onclose);
var strOnError = Pointer_stringify(onerror);
var socket =
{
socket: new WebSocket(strURL),
buffer: new Uint8Array(0),
error: null,
messages: []
}
socket.socket.onopen = function(e)
{
SendMessage(strCallee, strOnOpen, "");
};
socket.socket.onmessage = function(e)
{
if (e.data instanceof Blob)
{
var reader = new FileReader();
reader.addEventListener("loadend", function()
{
var array = new Uint8Array(reader.result);
socket.messages.push(array);
SendMessage(strCallee, strOnMessage, "");
});
reader.readAsArrayBuffer(e.data);
}
};
socket.socket.onclose = function(e)
{
if (e.code != 1000)
{
if (e.reason != null && e.reason.length > 0)
{
socket.error = e.reason;
}
else
{
switch (e.code)
{
case 1001:
socket.error = "Endpoint going away.";
break;
case 1002:
socket.error = "Protocol error.";
break;
case 1003:
socket.error = "Unsupported message.";
break;
case 1005:
socket.error = "No status.";
break;
case 1006:
socket.error = "Abnormal disconnection.";
break;
case 1009:
socket.error = "Data frame too large.";
break;
default:
socket.error = "Error " + e.code;
}
}
}
SendMessage(strCallee, strOnClose, "");
};
socket.socket.onerror = function(e)
{
socket.error = e.data;
SendMessage(strCallee, strOnError, "");
}
var instance = webSocketInstances.push(socket) - 1;
return instance;
},
SocketState: function(socketInstance)
{
var socket = webSocketInstances[socketInstance];
return socket.socket.readyState;
},
SocketError: function(socketInstance, ptr, bufsize)
{
var socket = webSocketInstances[socketInstance];
if (socket.error == null)
return 0;
var str = socket.error.slice(0, Math.max(0, bufsize - 1));
writeStringToMemory(str, ptr, false);
return 1;
},
SocketSend: function(socketInstance, ptr, length)
{
var socket = webSocketInstances[socketInstance];
socket.socket.send (HEAPU8.buffer.slice(ptr, ptr+length));
},
SocketRecvLength: function(socketInstance)
{
var socket = webSocketInstances[socketInstance];
if (socket.messages.length == 0)
return 0;
return socket.messages[0].length;
},
SocketRecv: function(socketInstance, ptr, length)
{
var socket = webSocketInstances[socketInstance];
if (socket.messages.length == 0)
return 0;
if (socket.messages[0].length > length)
return 0;
HEAPU8.set(socket.messages[0], ptr);
socket.messages = socket.messages.slice(1);
return 1;
},
SocketClose: function(socketInstance)
{
var socket = webSocketInstances[socketInstance];
socket.socket.close();
}
};
autoAddDeps(LibraryWebSockets, '$webSocketInstances');
mergeInto(LibraryManager.library, LibraryWebSockets);
Comment