summaryrefslogtreecommitdiff
path: root/cao-server
blob: 162cd5dc9f230544f7e83729681e0725a20b6f57 (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
71
72
#!/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.GameManager()

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

def client_left_handler(client, server):
    client['cao_client'].disconnect();

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:
                lang = json_msg.get('lang')
                res = client['cao_client'].join_game(game_name, lang)
        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':
            card_id = None
            try:
                card_id = int(json_msg['card_id'])
            except (KeyError, TypeError):
                pass
            finally:
                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, '0.0.0.0')
    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()