forked from LtHummus/SpyPartyDraft
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathroom.py
88 lines (71 loc) · 2.68 KB
/
room.py
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import copy
import datetime
from draft.draft import Draft
# TODO: don't keep this hardcoded
TOURNEY = "scl_season_1"
class Room:
def __init__(self, id_, server, spectator_broadcast, draft_type):
self.id = id_
self.player_list = []
self.spectator_list = []
self.draft = None
self.server = server
self.last_touched = datetime.datetime.now()
self.events = []
self.spectator_broadcast = spectator_broadcast
self.draft_type = draft_type
self.map_pool = copy.copy(draft_type.map_pool)
def get_spectator_data(self):
return {
'events': self.events,
'map_pool': self.serializable_map_pool(),
'room_id': self.id
}
def post_event(self, event):
self.events.append(event)
data_map = self.get_spectator_data()
for x in self.spectator_list:
self.spectator_broadcast(x, data_map)
def add_user_to_room(self, username):
self.touch()
self.player_list.append(username)
self.broadcast('{} has joined the room!'.format(username))
def broadcast(self, message):
self.touch()
self.server(self.id, message)
def serializable_map_pool(self):
self.touch()
return [x.as_map() for x in self.map_pool]
def start_draft(self):
print "starting draft"
print self.map_pool
self.draft = Draft(self.id, self.player_list[0], self.player_list[1], self.map_pool, self.draft_type)
self.touch()
def touch(self):
self.last_touched = datetime.datetime.now()
def secs_since_last_touch(self):
delta = datetime.datetime.now() - self.last_touched
return delta.seconds
def should_be_cleaned(self):
if self.secs_since_last_touch() > (15 * 60):
return True
if self.draft is None:
return False
return self.draft.draft_complete()
def serialize(self):
return {
'room_id': self.id,
'banned_maps': self.draft.serializable_bans(),
'picked_maps': self.draft.serializable_picks(),
'player_one': self.draft.player_one,
'player_two': self.draft.player_two,
'map_pool': self.serializable_map_pool(),
'current_player': self.draft.current_player,
'start_player': self.draft.start_player,
'coin_flip_winner': self.draft.coin_flip_winner,
'coin_flip_loser': self.draft.coin_flip_loser(),
'first_spy': self.draft.first_spy,
'state': self.draft.state,
'user_readable_state': self.draft.user_readable_state(),
'draft_type': self.draft_type.name
}