add solution word to client
This commit is contained in:
@ -1,6 +1,8 @@
|
||||
import logging
|
||||
import uuid
|
||||
|
||||
import datetime as dt
|
||||
|
||||
from . import json_websockets
|
||||
from . import session
|
||||
|
||||
@ -9,12 +11,27 @@ class CrosswordConnection(json_websockets.JsonWebsocketConnection):
|
||||
|
||||
sessions = {}
|
||||
|
||||
last_cleanup = None
|
||||
|
||||
def clean_sessions():
|
||||
now = dt.datetime.utcnow()
|
||||
if CrosswordConnection.last_cleanup is None or (now - CrosswordConnection.last_cleanup).total_seconds() > 3600:
|
||||
CrosswordConnection.last_cleanup = now
|
||||
|
||||
sessions_to_close = []
|
||||
for key, session in CrosswordConnection.sessions.items():
|
||||
if session.is_expired():
|
||||
sessions_to_close.append(key)
|
||||
|
||||
for key in sessions_to_close:
|
||||
del(CrosswordConnection.sessions[key])
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
self._session = None
|
||||
|
||||
async def send_crossword(self, sessionId: str, lang:str = "en"):
|
||||
async def send_crossword(self, sessionId: str, lang: str = "en"):
|
||||
if sessionId not in CrosswordConnection.sessions:
|
||||
await self.send_error(msg="unknown session")
|
||||
return
|
||||
@ -83,6 +100,9 @@ class CrosswordConnection(json_websockets.JsonWebsocketConnection):
|
||||
|
||||
await self.send_crossword(sessionId, lang=lang)
|
||||
|
||||
# clean up old session
|
||||
CrosswordConnection.clean_sessions()
|
||||
|
||||
async def send_error(self, msg: str):
|
||||
await self.send({
|
||||
'type': 'error',
|
||||
@ -103,7 +123,7 @@ class CrosswordConnection(json_websockets.JsonWebsocketConnection):
|
||||
sessionId = message['sessionId']
|
||||
if "lang" in message:
|
||||
lang = message['lang']
|
||||
await self.register(sessionId=sessionId, lang = lang)
|
||||
await self.register(sessionId=sessionId, lang=lang)
|
||||
return
|
||||
|
||||
if self._session is None:
|
||||
|
@ -185,7 +185,7 @@ def create_word_grid(w: int, h: int, lang_code: str = "en", target_density=0.5):
|
||||
# check if there is space before and after
|
||||
if y - 1 >= 0 and grid[y - 1, x] != " ":
|
||||
return False
|
||||
if y + n < grid.shape[0] - 1 and grid[y+n, x] != " ":
|
||||
if y + n < grid.shape[0] and grid[y+n, x] != " ":
|
||||
return False
|
||||
|
||||
if grid.shape[0] - n < y or y < 0:
|
||||
@ -214,7 +214,7 @@ def create_word_grid(w: int, h: int, lang_code: str = "en", target_density=0.5):
|
||||
# check if there is space before and after
|
||||
if x - 1 >= 0 and grid[y, x - 1] != " ":
|
||||
return False
|
||||
if x + n < grid.shape[1] - 1 and grid[y, x + n] != " ":
|
||||
if x + n < grid.shape[1] and grid[y, x + n] != " ":
|
||||
return False
|
||||
|
||||
if grid.shape[1] - n < x or x < 0:
|
||||
|
@ -4,10 +4,12 @@ from . import crossword
|
||||
|
||||
|
||||
class Session(object):
|
||||
def __init__(self) -> None:
|
||||
def __init__(self, days_to_expire:int = 2) -> None:
|
||||
self.crossword = None
|
||||
self.datetime_created = dt.datetime.utcnow()
|
||||
self.connected_sockets = set()
|
||||
self.last_touched = self.datetime_created
|
||||
self.days_to_expire = 2
|
||||
|
||||
def cleanup(self):
|
||||
sockets_to_remove = []
|
||||
@ -46,3 +48,17 @@ class Session(object):
|
||||
self.create_crossword(lang = lang)
|
||||
|
||||
return self.crossword
|
||||
|
||||
def touch(self):
|
||||
self.last_touched = dt.datetime.utcnow()
|
||||
|
||||
def is_expired(self):
|
||||
self.cleanup()
|
||||
if len(self.connected_sockets) > 0:
|
||||
return False
|
||||
now = dt.datetime.utcnow()
|
||||
if (now - self.last_touched).days > self.days_to_expire:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
697425
server/steam@cake:
Normal file
697425
server/steam@cake:
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user