def join_room_api(request): # grab data from input json try: raw_data = parse_body_json_or_400( request, required_keys=["room", "nickname", "password"]) except InvalidRequestJsonError as e: return JsonResponse({"error": str(e)}) room = Room.get_for_encoded_uuid_or_404(raw_data["room"]) # use a JoinRoomForm to share validation with the regular path form_data = JoinRoomForm.for_room(room).initial form_data.update({ "player_name": raw_data["nickname"], "passphrase": raw_data["password"], "is_spectator": raw_data.get("is_specator", False), }) join_form = JoinRoomForm(form_data) if join_form.is_valid(): player = join_form.create_player() _save_session_player(request.session, player) return redirect("get_socket_key", encoded_room_uuid=room.encoded_uuid) else: return HttpResponse(join_form.errors.as_json(), content_type="application/json", status=400)
def get_socket_key(request, encoded_room_uuid): room = Room.get_for_encoded_uuid_or_404(encoded_room_uuid) player = _get_session_player(request.session, room) data = { "socket_key": _create_temporary_socket_key(player), } return JsonResponse(data)
def room_view(request, encoded_room_uuid): if request.method == "POST": join_form = JoinRoomForm(request.POST) if join_form.is_valid(): player = join_form.create_player() _save_session_player(request.session, player) return redirect("room_view", encoded_room_uuid=encoded_room_uuid) else: room = Room.get_for_encoded_uuid_or_404(encoded_room_uuid) return _join_room(request, join_form, room) else: try: room = Room.get_for_encoded_uuid_or_404(encoded_room_uuid) initial_values = { "game_type": room.current_game.game_type.group.value, "variant_type": room.current_game.game_type.value, "lockout_mode": room.current_game.lockout_mode.value, "hide_card": room.hide_card, } new_card_form = RoomForm(initial=initial_values) new_card_form.helper.layout = Layout( "game_type", "variant_type", "custom_json", "lockout_mode", "seed", "hide_card", ) new_card_form.helper['variant_type'].wrap(Field, wrapper_class='hidden') new_card_form.helper['custom_json'].wrap(Field, wrapper_class='hidden') player = _get_session_player(request.session, room) params = { "room": room, "game": room.current_game, "player": player, "sockets_url": SOCKETS_URL, "new_card_form": new_card_form, "temporary_socket_key": _create_temporary_socket_key(player) } return render(request, "bingosync/bingosync.html", params) except NotAuthenticatedError: join_form = JoinRoomForm.for_room(room) return _join_room(request, join_form, room)
def board_revealed(request): data = parse_body_json_or_400(request, required_keys=["room"]) room = Room.get_for_encoded_uuid_or_404(data["room"]) player = _get_session_player(request.session, room) revealed_event = RevealedEvent(player=player, player_color_value=player.color.value) revealed_event.save() publish_revealed_event(revealed_event) return HttpResponse("Received data: " + str(data))
def select_color(request): data = parse_body_json_or_400(request, required_keys=["room", "color"]) room = Room.get_for_encoded_uuid_or_404(data["room"]) player = _get_session_player(request.session, room) color = Color.for_name(data["color"]) color_event = player.update_color(color) publish_color_event(color_event) return HttpResponse("Received data: ", str(data))
def chat_message(request): data = parse_body_json_or_400(request, required_keys=["room", "text"]) room = Room.get_for_encoded_uuid_or_404(data["room"]) player = _get_session_player(request.session, room) text = data["text"] chat_event = ChatEvent(player=player, player_color_value=player.color.value, body=text) chat_event.save() publish_chat_event(chat_event) return HttpResponse("Recieved data: " + str(data))
def goal_selected(request): data = parse_body_json_or_400(request, required_keys=["room", "slot", "color", "remove_color"]) room = Room.get_for_encoded_uuid_or_404(data["room"]) player = _get_session_player(request.session, room) game = room.current_game slot = int(data["slot"]) color = Color.for_name(data["color"]) remove_color = data["remove_color"] goal_event = game.update_goal(player, slot, color, remove_color) if not goal_event: return HttpResponseBadRequest("Blocked by Lockout") publish_goal_event(goal_event) return HttpResponse("Recieved data: " + str(data))
def room_feed(request, encoded_room_uuid): room = Room.get_for_encoded_uuid_or_404(encoded_room_uuid) # lookup the player to force authentication _get_session_player(request.session, room) events_to_return = [] all_included = True if request.GET.get('full') == 'true': events_to_return = Event.get_all_for_room(room) else: recent_events = Event.get_all_recent_for_room(room) events_to_return = recent_events["events"] all_included = recent_events["all_included"] all_jsons = [event.to_json() for event in events_to_return] return JsonResponse({'events': all_jsons, 'allIncluded': all_included}, safe=False)
def room_disconnect(request, encoded_room_uuid): room = Room.get_for_encoded_uuid_or_404(encoded_room_uuid) _clear_session_player(request.session, room) return redirect("rooms")
def room_board(request, encoded_room_uuid): room = Room.get_for_encoded_uuid_or_404(encoded_room_uuid) board = room.current_game.board return JsonResponse(board, safe=False)