Implement timeouts

This commit is contained in:
Dominic Zimmer 2022-10-30 11:25:24 +01:00
parent cb9494c89a
commit dfbe9f6603

View File

@ -20,6 +20,8 @@ class GameMode:
name: str
mode_function: ModeFunction
allow_multitouch: bool
min_time: int
max_time: int
@dataclass
@ -62,9 +64,9 @@ class Arbiter:
self.modeswitch_time = None
self.clients: dict[WebSocket, ClientState] = dict()
def mode(self, name: str, allow_multitouch: bool = True):
def mode(self, name: str, allow_multitouch: bool = True, min_time=10, max_time=90):
def inner(f: ModeFunction):
self.modes.append(GameMode(name, f, allow_multitouch))
self.modes.append(GameMode(name, f, allow_multitouch, min_time, max_time))
return inner
@ -118,7 +120,7 @@ class Arbiter:
self.state.mode = self.current_mode.name
self.update_next_mode()
self.modeswitch_time = datetime.now() + timedelta(
seconds=settings.arbiter_mode_switch_cycle
seconds=random.randint(self.current_mode.min_time, self.current_mode.max_time)
)
if self.current_mode_task:
@ -151,7 +153,7 @@ class Arbiter:
arbiter = Arbiter()
@arbiter.mode("democracy", allow_multitouch=False)
@arbiter.mode("democracy", allow_multitouch=False, min_time=5*60, max_time=10*60)
async def _(get_input: InputGetter, set_output: OutputSetter):
while True:
await asyncio.sleep(settings.democracy_vote_cycle)
@ -188,7 +190,7 @@ async def _(get_input: InputGetter, set_output: OutputSetter):
set_output(output)
@arbiter.mode("anarchy", allow_multitouch=False)
@arbiter.mode("anarchy", allow_multitouch=False, min_time=5*60, max_time=10*60)
async def _(get_input: InputGetter, set_output: OutputSetter):
while True:
await asyncio.sleep(settings.democracy_vote_cycle)
@ -206,7 +208,7 @@ async def _(get_input: InputGetter, set_output: OutputSetter):
set_output(output)
@arbiter.mode("random", allow_multitouch=False)
@arbiter.mode("random", allow_multitouch=False, min_time=20, max_time=90)
async def _(get_input: InputGetter, set_output: OutputSetter):
while True:
await asyncio.sleep(settings.democracy_vote_cycle)