Prepare v0.6.7-alpha discovery release

This commit is contained in:
Alexander Sellite 2026-08-11 20:31:02 -04:00
parent ef30369865
commit 54937fad4b
7 changed files with 75 additions and 12 deletions

View file

@ -184,6 +184,8 @@ class DiscoveryRequestHandler(BaseHTTPRequestHandler):
payload = self._read_json_object()
if payload is None:
return
if self._reject_incompatible_game_version(payload):
return
try:
room, token, verification_token = self.server.registry.create(
self._client_address(), payload
@ -211,6 +213,8 @@ class DiscoveryRequestHandler(BaseHTTPRequestHandler):
payload = self._read_json_object()
if payload is None:
return
if self._reject_incompatible_game_version(payload):
return
try:
room = self.server.registry.update(
room_id,
@ -300,6 +304,22 @@ class DiscoveryRequestHandler(BaseHTTPRequestHandler):
except ValueError:
return peer_text
def _reject_incompatible_game_version(self, payload: dict[str, Any]) -> bool:
game_version = payload.get("game_version")
if not isinstance(game_version, str) or game_version.strip() == __version__:
return False
self._send_error(
HTTPStatus.CONFLICT,
"game_version_mismatch",
(
f"This discovery server only lists NETfishing {__version__} rooms. "
"Your room will not be listed until the game and discovery server "
"use the same version."
),
{"required_game_version": __version__},
)
return True
def _room_id_from_path(self) -> str | None:
path = urlsplit(self.path).path
prefix = "/v1/rooms/"
@ -341,8 +361,17 @@ class DiscoveryRequestHandler(BaseHTTPRequestHandler):
raise ValueError
return values[0]
def _send_error(self, status: HTTPStatus, code: str, message: str) -> None:
self._send_json(status, {"error": {"code": code, "message": message}})
def _send_error(
self,
status: HTTPStatus,
code: str,
message: str,
details: dict[str, Any] | None = None,
) -> None:
error: dict[str, Any] = {"code": code, "message": message}
if details is not None:
error.update(details)
self._send_json(status, {"error": error})
def _send_json(self, status: HTTPStatus, payload: dict[str, Any]) -> None:
body = json.dumps(payload, ensure_ascii=False, separators=(",", ":")).encode("utf-8")