diff --git a/glebby-server/glebby.py b/glebby-server/glebby.py index 9ec1e12..f4f7adc 100644 --- a/glebby-server/glebby.py +++ b/glebby-server/glebby.py @@ -5,8 +5,36 @@ from collections import OrderedDict from flask import Flask from flask_sock import Sock from queue import Queue +from random import Random from threading import Thread, Lock +class BoardGenerator: + def __init__(self, seed): + self.dice = [ + 'aeaneg', + 'wngeeh', + 'ahspco', + 'lnhnrz', + 'aspffk', + 'tstiyd', + 'objoab', + 'owtoat', + 'iotmuc', + 'erttyl', + 'ryvdel', + 'toessi', + 'lreixd', + 'terwhv', + 'eiunes', + 'nuihmq' + ] + self.rng = Random(seed) + + def generate_board(self): + shuffled_dice = self.rng.sample(self.dice, k=len(self.dice)) + roll_results = [self.rng.choice(die) for die in shuffled_dice] + return [roll_results[4 * i : 4 * (i+1)] for i in range(0, 4)] + class Client: def __init__(self, sock, client_id): self.sock = sock @@ -23,6 +51,9 @@ class GlebbyState: self.next_client_id = 0 self.incoming_messages = Queue() + + self.board_generator = BoardGenerator(42) + self.board = None # domain stuff @@ -40,6 +71,12 @@ class GlebbyState: 'type': 'chat', 'message': payload['message'] }) + elif payload['type'] == 'roll': + self.board = self.board_generator.generate_board() + self.broadcast(client_id, { + 'type': 'roll', + 'board': self.board + }) else: print("Unhandled!") @@ -49,7 +86,8 @@ class GlebbyState: 'players': [ self.clients[other_client_id].data for other_client_id in self.clients - ] + ], + 'board': self.board } # message receiving and sending