summaryrefslogtreecommitdiff
path: root/server.py
blob: cdd8abf8c428907e1da28087868304ed764d363d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/env python

from websocket_server import WebsocketServer
import CAO_GameManager
import CAO_Client
from CAO_Status import cao_error

import json

game_manager = CAO_GameManager.CAO_GameManager()

def new_client_handler(client, server):
    client['cao_client'] = CAO_Client.CAO_Client(server, client, game_manager)

def client_left_handler(client, server):
    pass

def message_received_handler(client, server, message):
    try:
        json_msg = json.loads(message)
    except:
        res = cao_error('badly formatted json')
    else:
        op = json_msg['op']
        if op == 'join_game':
            try:
                game_name = json_msg['game_name']
            except KeyError:
                res = cao_error('field `game_name\' is required')
            else:
                res = client['cao_client'].join_game(game_name)
        elif op == 'view_player_cards':
            res = client['cao_client'].view_player_cards()
        elif op == 'view_black_card':
            res = client['cao_client'].view_black_card()
        elif op == 'view_played_cards':
            res = client['cao_client'].view_played_cards()
        elif op == 'pick_black_card':
            res = client['cao_client'].pick_black_card()
        elif op == 'designate_card':
            try:
                card_id = int(json_msg['card_id'])
            except KeyError:
                res = cao_error('field `card_id\' is required')
            else:
                res = client['cao_client'].designate_card(card_id)
        elif op == 'play_white_card':
            try:
                card_id = int(json_msg['card_id'])
            except KeyError:
                res = cao_error('field `card_id\' is required')
            else:
                res = client['cao_client'].play_white_card(card_id)
        elif op == 'collect_cards':
            res = client['cao_client'].collect_cards()
        else:
            res = cao_error('invalid command')

    server.send_message(client, res)

def main():
    server = WebsocketServer(1236)
    server.set_fn_new_client(new_client_handler)
    server.set_fn_client_left(client_left_handler)
    server.set_fn_message_received(message_received_handler)

    server.run_forever()

if __name__ == '__main__':
    main()