From 34c41196d3e74515786cff5fe767eadababdc6b5 Mon Sep 17 00:00:00 2001 From: Nils G <nils.gondermann@ruhr-uni-bochum.de> Date: Sat, 18 Apr 2020 13:52:34 +0200 Subject: [PATCH] Add handling of different websocket packet types and split websocket handling into own include --- modules/websocket_util.py | 2 +- views/game/index.html | 35 ++------------------------ views/include/websocket.html | 48 ++++++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 34 deletions(-) create mode 100644 views/include/websocket.html diff --git a/modules/websocket_util.py b/modules/websocket_util.py index a96fe69..7ad84d7 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 45e22c6..78175b6 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 0000000..298eee3 --- /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> -- GitLab