save client activity data to multisave
This commit is contained in:
parent
8d3961b6fb
commit
45a24fab27
|
@ -49,7 +49,6 @@ class Client(Endpoint):
|
||||||
self.version = [0, 0, 0]
|
self.version = [0, 0, 0]
|
||||||
self.messageprocessor = ClientMessageProcessor(ctx, self)
|
self.messageprocessor = ClientMessageProcessor(ctx, self)
|
||||||
self.ctx = weakref.ref(ctx)
|
self.ctx = weakref.ref(ctx)
|
||||||
ctx.client_connection_timers[self.team, self.slot] = datetime.datetime.now(datetime.timezone.utc)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def wants_item_notification(self):
|
def wants_item_notification(self):
|
||||||
|
@ -86,7 +85,7 @@ class Context(Node):
|
||||||
self.item_cheat = item_cheat
|
self.item_cheat = item_cheat
|
||||||
self.running = True
|
self.running = True
|
||||||
self.client_activity_timers: typing.Dict[
|
self.client_activity_timers: typing.Dict[
|
||||||
typing.Tuple[int, int], datetime.datetime] = {} # datatime of last new item check
|
typing.Tuple[int, int], datetime.datetime] = {} # datetime of last new item check
|
||||||
self.client_connection_timers: typing.Dict[
|
self.client_connection_timers: typing.Dict[
|
||||||
typing.Tuple[int, int], datetime.datetime] = {} # datetime of last connection
|
typing.Tuple[int, int], datetime.datetime] = {} # datetime of last connection
|
||||||
self.client_game_state: typing.Dict[typing.Tuple[int, int], int] = collections.defaultdict(int)
|
self.client_game_state: typing.Dict[typing.Tuple[int, int], int] = collections.defaultdict(int)
|
||||||
|
@ -193,7 +192,11 @@ class Context(Node):
|
||||||
"hints": tuple((key, list(value)) for key, value in self.hints.items()),
|
"hints": tuple((key, list(value)) for key, value in self.hints.items()),
|
||||||
"location_checks": tuple((key, tuple(value)) for key, value in self.location_checks.items()),
|
"location_checks": tuple((key, tuple(value)) for key, value in self.location_checks.items()),
|
||||||
"name_aliases": tuple((key, value) for key, value in self.name_aliases.items()),
|
"name_aliases": tuple((key, value) for key, value in self.name_aliases.items()),
|
||||||
"client_game_state": tuple((key, value) for key, value in self.client_game_state.items())
|
"client_game_state": tuple((key, value) for key, value in self.client_game_state.items()),
|
||||||
|
"client_activity_timers": tuple(
|
||||||
|
(key, value.timestamp()) for key, value in self.client_activity_timers.items()),
|
||||||
|
"client_connection_timers": tuple(
|
||||||
|
(key, value.timestamp()) for key, value in self.client_connection_timers.items()),
|
||||||
}
|
}
|
||||||
return d
|
return d
|
||||||
|
|
||||||
|
@ -224,7 +227,16 @@ class Context(Node):
|
||||||
self.name_aliases.update({tuple(key): value for key, value in savedata["name_aliases"]})
|
self.name_aliases.update({tuple(key): value for key, value in savedata["name_aliases"]})
|
||||||
if "client_game_state" in savedata:
|
if "client_game_state" in savedata:
|
||||||
self.client_game_state.update({tuple(key): value for key, value in savedata["client_game_state"]})
|
self.client_game_state.update({tuple(key): value for key, value in savedata["client_game_state"]})
|
||||||
|
if "client_activity_timers" in savedata:
|
||||||
|
self.client_connection_timers.update(
|
||||||
|
{tuple(key): datetime.datetime.fromtimestamp(value, datetime.timezone.utc) for key, value
|
||||||
|
in savedata["client_connection_timers"]})
|
||||||
|
self.client_activity_timers.update(
|
||||||
|
{tuple(key): datetime.datetime.fromtimestamp(value, datetime.timezone.utc) for key, value
|
||||||
|
in savedata["client_activity_timers"]})
|
||||||
|
|
||||||
self.location_checks.update({tuple(key): set(value) for key, value in savedata["location_checks"]})
|
self.location_checks.update({tuple(key): set(value) for key, value in savedata["location_checks"]})
|
||||||
|
|
||||||
logging.info(f'Loaded save file with {sum([len(p) for p in received_items.values()])} received items '
|
logging.info(f'Loaded save file with {sum([len(p) for p in received_items.values()])} received items '
|
||||||
f'for {len(received_items)} players')
|
f'for {len(received_items)} players')
|
||||||
|
|
||||||
|
@ -337,7 +349,7 @@ async def on_client_joined(ctx: Context, client: Client):
|
||||||
client.team + 1,
|
client.team + 1,
|
||||||
".".join(str(x) for x in client.version),
|
".".join(str(x) for x in client.version),
|
||||||
client.tags))
|
client.tags))
|
||||||
|
ctx.client_connection_timers[client.team, client.slot] = datetime.datetime.now(datetime.timezone.utc)
|
||||||
|
|
||||||
async def on_client_left(ctx: Context, client: Client):
|
async def on_client_left(ctx: Context, client: Client):
|
||||||
ctx.notify_all("%s (Team #%d) has left the game" % (ctx.get_aliased_name(client.team, client.slot), client.team + 1))
|
ctx.notify_all("%s (Team #%d) has left the game" % (ctx.get_aliased_name(client.team, client.slot), client.team + 1))
|
||||||
|
|
Loading…
Reference in New Issue