diff --git a/modules/websocket_util.py b/modules/websocket_util.py index a96fe69d32032857a192adaa4d6ce4ea967e779d..7ad84d76fcc33e171cec5ef782c94be45352a7c9 100644 --- a/modules/websocket_util.py +++ b/modules/websocket_util.py @@ -4,7 +4,7 @@ from gluon.contrib.websocket_messaging import websocket_send from http_util import GET_HOST def WEBSOCKET_SEND(_room, _type, _data): - websocket_send(current.request.env.wsgi_url_scheme + '://' + GET_HOST() + ':8888', _data, '67c371fd204fbcbf9742310d1a9d951bcca1aa86', _room.code) + websocket_send(current.request.env.wsgi_url_scheme + '://' + GET_HOST() + ':8888', _type + ":" + _data, '67c371fd204fbcbf9742310d1a9d951bcca1aa86', _room.code) def GET_URL(_room): if current.request.env.wsgi_url_scheme == "https": diff --git a/views/game/index.html b/views/game/index.html index 45e22c6a32030f991306bfd32745ca69ccaf7f3c..78175b6720f7969d914e8c150283278ef77d1965 100644 --- a/views/game/index.html +++ b/views/game/index.html @@ -24,37 +24,6 @@ $(document).ready(function(){ render(name, role, JSON.parse('{{=XML(room_record.roles)}}')); }); - - - //Websocket connection - $(document).ready(function(){ - - if ('WebSocket' in window) { - var ws = new WebSocket("{{=GET_URL(room_record)}}"); - ws.onopen = function () { - ws.initialConnect = true; - }; - ws.onmessage = function(e) { - set_info(e.data); - render(name, role, JSON.parse(e.data)); - }; - ws.onerror = function(e) { - set_error("{{=T('Error')}}: "+e); - }; - ws.onclose = function () { - if(ws.initialConnect) { - window.setTimeout(function() { - set_error("{{=T('WebSocket has closed')}}. {{=T('Please refresh this website')}}."); - }, 1000); - } else { - set_error("{{=T('WebSocket server is not responding')}}."); - } - }; - } else { - /* not supported */ - set_error("{{=T('WebSocket is not supported by your browser')}}."); - } - - }); - </script> + +{{include 'include/websocket.html'}} diff --git a/views/include/websocket.html b/views/include/websocket.html new file mode 100644 index 0000000000000000000000000000000000000000..298eee30f59c2ae60886eb0b01bd40a52c84d153 --- /dev/null +++ b/views/include/websocket.html @@ -0,0 +1,48 @@ +<script type="text/javascript"> + //Websocket connection + $(document).ready(function(){ + + if ('WebSocket' in window) { + var ws = new WebSocket("{{=GET_URL(room_record)}}"); + ws.onopen = function () { + ws.initialConnect = true; + }; + ws.onmessage = function(e) { + var firstColon = e.data.indexOf(":"); + if(firstColon === -1) { + set_error("{{=T('Invalid WebSocket data received')}}: '" + e.data + "'"); + return; + } + + var type = e.data.substring(0, firstColon); + var data = e.data.substring(firstColon + 1); + + switch(type) { + case "roles": + render(name, role, JSON.parse(data)); + break; + default: + set_error("{{=T('Invalid WebSocket data received')}}: '" + type + "'"); + return; + } + + }; + ws.onerror = function(e) { + set_error("{{=T('Error')}}: "+e); + }; + ws.onclose = function () { + if(ws.initialConnect) { + window.setTimeout(function() { + set_error("{{=T('WebSocket has closed')}}. {{=T('Please refresh this website')}}."); + }, 1000); + } else { + set_error("{{=T('WebSocket server is not responding')}}."); + } + }; + } else { + /* not supported */ + set_error("{{=T('WebSocket is not supported by your browser')}}."); + } + + }); +</script>