diff --git a/controllers/default.py b/controllers/default.py index d971f34c36ea6849cf5f4a9aa615493ca6c818e2..3f780d06b07954e95264a4ff5b4f5053b2ae6381 100644 --- a/controllers/default.py +++ b/controllers/default.py @@ -1,4 +1,4 @@ import random def index(): - return dict(var=random.random(), meta=db(db.Meta).select().first()) + return dict() diff --git a/controllers/player.py b/controllers/player.py new file mode 100644 index 0000000000000000000000000000000000000000..12d94937c091eff6b5c1f3f8c60b9d10b1cb791f --- /dev/null +++ b/controllers/player.py @@ -0,0 +1,26 @@ +from parameter_util import JSON_BODY, JSON_CONTAINS +from http_util import FAIL, CODE_JSON, CODE_MISSING, CODE_SEMANTIC, CODE_GONE, CODE_NOTFOUND +from room_util import ROOM_GET_CODE + +def create(): + parameters = JSON_BODY(request) + + if parameters == None: + return(FAIL(CODE_JSON)) + + if not JSON_CONTAINS(parameters, [('room_code', str), ('user_name', str)]): + return(FAIL(CODE_MISSING)) + + room_code = parameters["room_code"] + user_name = parameters["user_name"] + + if (len(room_code) != 4) or (len(user_name) == 0) or (len(user_name) > 15): + return(FAIL(CODE_SEMANTIC)) + + room_record = ROOM_GET_CODE(room_code) + + if not room_record: + return(FAIL(CODE_NOTFOUND)) + + db.Player.insert(name=user_name, room_id=room_record.id) + return(200) diff --git a/modules/http_util.py b/modules/http_util.py index 3a9ca102d8f817d4b21ce611468624a3abda09eb..2a08f645d48a89ee8442fd9f4bb39ef2f306bae9 100644 --- a/modules/http_util.py +++ b/modules/http_util.py @@ -4,6 +4,7 @@ CODE_MISSING = 400 CODE_JSON = 406 CODE_GONE = 410 CODE_SEMANTIC = 422 +CODE_NOTFOUND = 404 def FAIL(_code): current.response.status = _code diff --git a/modules/room_util.py b/modules/room_util.py index 13290b8fb994f2490985bf05dfcd934098b5c914..a3c47314849b30e1db96ca6569d2a94cf10854a0 100644 --- a/modules/room_util.py +++ b/modules/room_util.py @@ -12,6 +12,15 @@ def ROOM_GET(_id, _password): return(room_record) +def ROOM_GET_CODE(_code): + room_record = current.db((current.db.Room.code == _code) & (current.db.Room.closed == False)).select().first() + + if not room_record: + return(None) + + return(room_record) + + def PLAYERS_GET(_room): rows = current.db(current.db.Player.room_id == _room.id).select(orderby=current.db.Player.id) diff --git a/static/css/base.css b/static/css/base.css new file mode 100644 index 0000000000000000000000000000000000000000..1055cf2e0e3343dbe7f18189e13e99366c01db2d --- /dev/null +++ b/static/css/base.css @@ -0,0 +1,18 @@ +#footer { + position: fixed; + + left: 0px; + bottom: 0px; + width: 100%; + + margin-top: 20px; + padding: 5px; + + background-color: gray; + text-align: center; +} + +#footer a { + color: white; + text-decoration: none; +} diff --git a/static/css/client.css b/static/css/client.css new file mode 100644 index 0000000000000000000000000000000000000000..d8f9aa62ce986da05e9cdc269b0c0e8ad69d3b0c --- /dev/null +++ b/static/css/client.css @@ -0,0 +1,4 @@ +body { + text-align: center; + background-color: lightgrey; +} diff --git a/static/js/ajax.js b/static/js/ajax.js new file mode 100644 index 0000000000000000000000000000000000000000..4268188091aa0119492177402f986df25336a95f --- /dev/null +++ b/static/js/ajax.js @@ -0,0 +1,15 @@ +function AJAX_JSON(_url, _payload, _returnFunction) { + $.ajax({ + type: 'POST', + url: _url, + dataType: 'json', + data: JSON.stringify(_payload), + contentType : 'application/json', + success: function(data) { + _returnFunction(200, data); + }, + error: function(xhr, statusText, errorThrown){ + _returnFunction(xhr.status, errorThrown); + } + }); +} diff --git a/views/default/index.html b/views/default/index.html index 788800143577d87f67ce78ff065930a84853afa3..0a2a625bdf28cd972420293dd613a016d044fadd 100644 --- a/views/default/index.html +++ b/views/default/index.html @@ -1,8 +1,23 @@ -<html> - <body> - This is a test {{=var}}<br><br> - This is commit <b>{{=meta.git_commit[:10] if len(meta.git_commit) > 10 else meta.git_commit}}</b> from <b>{{=meta.git_date}}</b> show on - <a href="https://git.noc.ruhr-uni-bochum.de/studienprojekt-ss20/lynchburg-server/-/commit/{{=meta.git_commit}}">GitLab</a><br> - Database from: {{=meta.creation}} - </body> -</html> +{{extend 'layout.html'}} + +{{block head}} +<link rel="stylesheet" type="text/css" href="{{=URL('static/css', 'client.css')}}"> +{{end}} + +<div id="current_content"> + <form id="form_login"> + <input type="text" id="room_code" placeholder="Room Code" maxlength="4"><br><br> + <input type="text" id="user_name" placeholder="User Name" maxlength="15"><br><br> + <input type="submit" value="Enter"> + </form> +</div> + +{{block page_js}} +<script type="text/javascript"> + $("#form_login").on("submit", function(){ + var payload = {"room_code": $("#room_code").val(), "user_name": $("#user_name").val()} + AJAX_JSON("{{=URL('player', 'create')}}", payload, function(code, data){alert(code);}); + return false; + }); +</script> +{{end}} diff --git a/views/layout.html b/views/layout.html index ded03bfd837c1a48f368be18dc23ec42a32710c9..ec20e883bbd05ac5181b641c3076d0724a0577e8 100644 --- a/views/layout.html +++ b/views/layout.html @@ -2,9 +2,25 @@ <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <link rel="stylesheet" type="text/css" href="{{=URL('static/css', 'base.css')}}"> <script src="{{=URL('static','js/jquery.js')}}" type="text/javascript"></script> + <script src="{{=URL('static','js/ajax.js')}}" type="text/javascript"></script> + + {{block head}}{{end head}} </head> <body> + + <!-- Page Content --> {{include}} + <!-- ======================== --> + + <div id="footer"> + [ <a href="{{=URL('default', 'index')}}">WebClient</a> ] + [ <a href="{{=URL('debug', 'index')}}">Debug</a> ] + [ <a href="https://git.noc.ruhr-uni-bochum.de/studienprojekt-ss20">GitLab</a> ] + <!-- Page specific JavaScript --> + {{block page_js}}{{end page_js}} + <!-- ======================== --> + </body> </html>