introduce persistent data storage, which for now just caches rom -> server pairs
This commit is contained in:
parent
7582767401
commit
5d33b4b164
|
@ -589,13 +589,22 @@ async def server_loop(ctx : Context, address = None):
|
||||||
logging.error('Already connected')
|
logging.error('Already connected')
|
||||||
return
|
return
|
||||||
|
|
||||||
if address is None:
|
if address is None: # set through CLI or BMBP
|
||||||
address = ctx.server_address
|
address = ctx.server_address
|
||||||
|
if address is None: # see if this is an old connection
|
||||||
|
try:
|
||||||
|
address = Utils.persistent_load()["servers"][ctx.auth]
|
||||||
|
except Exception as e:
|
||||||
|
logging.debug(f"Could not find cached server address. {e}")
|
||||||
|
else:
|
||||||
|
logging.info(f"Using server {address} from the last time this rom was loaded. \n"
|
||||||
|
f"Should this be in error, use /connect <new_address>")
|
||||||
while not address:
|
while not address:
|
||||||
logging.info('Enter multiworld server address')
|
logging.info('Enter multiworld server address')
|
||||||
address = await console_input(ctx)
|
address = await console_input(ctx)
|
||||||
|
|
||||||
|
Utils.persistent_store("servers", ctx.auth, address)
|
||||||
|
|
||||||
address = f"ws://{address}" if "://" not in address else address
|
address = f"ws://{address}" if "://" not in address else address
|
||||||
port = urllib.parse.urlparse(address).port or 38281
|
port = urllib.parse.urlparse(address).port or 38281
|
||||||
|
|
||||||
|
|
|
@ -519,6 +519,7 @@ class ClientMessageProcessor(CommandProcessor):
|
||||||
notify_all(self.ctx, get_players_string(self.ctx))
|
notify_all(self.ctx, get_players_string(self.ctx))
|
||||||
else:
|
else:
|
||||||
self.output(get_players_string(self.ctx))
|
self.output(get_players_string(self.ctx))
|
||||||
|
return True
|
||||||
|
|
||||||
def _cmd_forfeit(self) -> bool:
|
def _cmd_forfeit(self) -> bool:
|
||||||
"""Surrender and send your remaining items out to their recipients"""
|
"""Surrender and send your remaining items out to their recipients"""
|
||||||
|
|
24
Utils.py
24
Utils.py
|
@ -9,7 +9,7 @@ import sys
|
||||||
import typing
|
import typing
|
||||||
import functools
|
import functools
|
||||||
|
|
||||||
from yaml import load
|
from yaml import load, dump
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from yaml import CLoader as Loader
|
from yaml import CLoader as Loader
|
||||||
|
@ -212,6 +212,28 @@ def get_location_name_from_address(address):
|
||||||
return Regions.lookup_id_to_name.get(address, f'Unknown location (ID:{address})')
|
return Regions.lookup_id_to_name.get(address, f'Unknown location (ID:{address})')
|
||||||
|
|
||||||
|
|
||||||
|
def persistent_store(category, key, value):
|
||||||
|
path = local_path("_persistent_storage.yaml")
|
||||||
|
storage: dict = persistent_load()
|
||||||
|
category = storage.setdefault(category, {})
|
||||||
|
category[key] = value
|
||||||
|
with open(path, "wt") as f:
|
||||||
|
f.write(dump(storage))
|
||||||
|
|
||||||
|
|
||||||
|
def persistent_load():
|
||||||
|
path = local_path("_persistent_storage.yaml")
|
||||||
|
storage: dict = {}
|
||||||
|
if os.path.exists(path):
|
||||||
|
try:
|
||||||
|
with open(path, "r") as f:
|
||||||
|
storage = parse_yaml(f.read())
|
||||||
|
except Exception as e:
|
||||||
|
import logging
|
||||||
|
logging.debug(f"Could not read store: {e}")
|
||||||
|
return storage
|
||||||
|
|
||||||
|
|
||||||
class ReceivedItem(typing.NamedTuple):
|
class ReceivedItem(typing.NamedTuple):
|
||||||
item: int
|
item: int
|
||||||
location: int
|
location: int
|
||||||
|
|
|
@ -4,4 +4,5 @@ PyYAML>=5.3.1
|
||||||
fuzzywuzzy>=0.18.0
|
fuzzywuzzy>=0.18.0
|
||||||
bsdiff4>=1.1.9
|
bsdiff4>=1.1.9
|
||||||
upnpy>=1.1.5
|
upnpy>=1.1.5
|
||||||
prompt_toolkit>=3.0.5
|
prompt_toolkit>=3.0.5
|
||||||
|
appdirs>=1.4.3
|
Loading…
Reference in New Issue