ZillionClient: fix manual disconnect (#1266)
This commit is contained in:
parent
816de5ff02
commit
608794cded
|
@ -48,6 +48,9 @@ class ZillionContext(CommonContext):
|
||||||
command_processor: Type[ClientCommandProcessor] = ZillionCommandProcessor
|
command_processor: Type[ClientCommandProcessor] = ZillionCommandProcessor
|
||||||
items_handling = 1 # receive items from other players
|
items_handling = 1 # receive items from other players
|
||||||
|
|
||||||
|
known_name: Optional[str]
|
||||||
|
""" This is almost the same as `auth` except `auth` is reset to `None` when server disconnects, and this isn't. """
|
||||||
|
|
||||||
from_game: "asyncio.Queue[events.EventFromGame]"
|
from_game: "asyncio.Queue[events.EventFromGame]"
|
||||||
to_game: "asyncio.Queue[events.EventToGame]"
|
to_game: "asyncio.Queue[events.EventToGame]"
|
||||||
ap_local_count: int
|
ap_local_count: int
|
||||||
|
@ -82,6 +85,7 @@ class ZillionContext(CommonContext):
|
||||||
server_address: str,
|
server_address: str,
|
||||||
password: str) -> None:
|
password: str) -> None:
|
||||||
super().__init__(server_address, password)
|
super().__init__(server_address, password)
|
||||||
|
self.known_name = None
|
||||||
self.from_game = asyncio.Queue()
|
self.from_game = asyncio.Queue()
|
||||||
self.to_game = asyncio.Queue()
|
self.to_game = asyncio.Queue()
|
||||||
self.got_room_info = asyncio.Event()
|
self.got_room_info = asyncio.Event()
|
||||||
|
@ -396,7 +400,8 @@ async def zillion_sync_task(ctx: ZillionContext) -> None:
|
||||||
game_id = memory.get_rom_to_ram_data(ram)
|
game_id = memory.get_rom_to_ram_data(ram)
|
||||||
name, seed_end = name_seed_from_ram(game_id)
|
name, seed_end = name_seed_from_ram(game_id)
|
||||||
if len(name):
|
if len(name):
|
||||||
if name == ctx.auth:
|
if name == ctx.known_name:
|
||||||
|
ctx.auth = name
|
||||||
# this is the name we know
|
# this is the name we know
|
||||||
if ctx.server and ctx.server.socket: # type: ignore
|
if ctx.server and ctx.server.socket: # type: ignore
|
||||||
if ctx.got_room_info.is_set():
|
if ctx.got_room_info.is_set():
|
||||||
|
@ -439,6 +444,7 @@ async def zillion_sync_task(ctx: ZillionContext) -> None:
|
||||||
memory.reset_game_state()
|
memory.reset_game_state()
|
||||||
|
|
||||||
ctx.auth = name
|
ctx.auth = name
|
||||||
|
ctx.known_name = name
|
||||||
async_start(ctx.connect())
|
async_start(ctx.connect())
|
||||||
await asyncio.wait((
|
await asyncio.wait((
|
||||||
ctx.got_room_info.wait(),
|
ctx.got_room_info.wait(),
|
||||||
|
|
Loading…
Reference in New Issue