Multiserver: Only update client status for a slot when the first enters and the last leaves (#1358)
This commit is contained in:
parent
5a4203649d
commit
856efebc39
|
@ -781,6 +781,7 @@ async def on_client_disconnected(ctx: Context, client: Client):
|
||||||
|
|
||||||
|
|
||||||
async def on_client_joined(ctx: Context, client: Client):
|
async def on_client_joined(ctx: Context, client: Client):
|
||||||
|
if ctx.client_game_state[client.team, client.slot] == ClientStatus.CLIENT_UNKNOWN:
|
||||||
update_client_status(ctx, client, ClientStatus.CLIENT_CONNECTED)
|
update_client_status(ctx, client, ClientStatus.CLIENT_CONNECTED)
|
||||||
version_str = '.'.join(str(x) for x in client.version)
|
version_str = '.'.join(str(x) for x in client.version)
|
||||||
verb = "tracking" if "Tracker" in client.tags else "playing"
|
verb = "tracking" if "Tracker" in client.tags else "playing"
|
||||||
|
@ -798,11 +799,12 @@ async def on_client_joined(ctx: Context, client: Client):
|
||||||
|
|
||||||
|
|
||||||
async def on_client_left(ctx: Context, client: Client):
|
async def on_client_left(ctx: Context, client: Client):
|
||||||
|
if len(ctx.clients[client.team][client.slot]) < 1:
|
||||||
update_client_status(ctx, client, ClientStatus.CLIENT_UNKNOWN)
|
update_client_status(ctx, client, ClientStatus.CLIENT_UNKNOWN)
|
||||||
|
ctx.client_connection_timers[client.team, client.slot] = datetime.datetime.now(datetime.timezone.utc)
|
||||||
ctx.broadcast_text_all(
|
ctx.broadcast_text_all(
|
||||||
"%s (Team #%d) has left the game" % (ctx.get_aliased_name(client.team, client.slot), client.team + 1),
|
"%s (Team #%d) has left the game" % (ctx.get_aliased_name(client.team, client.slot), client.team + 1),
|
||||||
{"type": "Part", "team": client.team, "slot": client.slot})
|
{"type": "Part", "team": client.team, "slot": client.slot})
|
||||||
ctx.client_connection_timers[client.team, client.slot] = datetime.datetime.now(datetime.timezone.utc)
|
|
||||||
|
|
||||||
|
|
||||||
async def countdown(ctx: Context, timer: int):
|
async def countdown(ctx: Context, timer: int):
|
||||||
|
|
|
@ -70,7 +70,7 @@ Sent to clients when they connect to an Archipelago server.
|
||||||
| tags | list\[str\] | Denotes special features or capabilities that the sender is capable of. Example: `WebHost` |
|
| tags | list\[str\] | Denotes special features or capabilities that the sender is capable of. Example: `WebHost` |
|
||||||
| password | bool | Denoted whether a password is required to join this room. |
|
| password | bool | Denoted whether a password is required to join this room. |
|
||||||
| permissions | dict\[str, [Permission](#Permission)\[int\]\] | Mapping of permission name to [Permission](#Permission), keys are: "release", "collect" and "remaining". |
|
| permissions | dict\[str, [Permission](#Permission)\[int\]\] | Mapping of permission name to [Permission](#Permission), keys are: "release", "collect" and "remaining". |
|
||||||
| hint_cost | int | The amount of points it costs to receive a hint from the server. |
|
| hint_cost | int | The percentage of total locations that need to be checked to receive a hint from the server. |
|
||||||
| location_check_points | int | The amount of hint points you receive per item/location check completed. |
|
| location_check_points | int | The amount of hint points you receive per item/location check completed. |
|
||||||
| games | list\[str\] | List of games present in this multiworld. |
|
| games | list\[str\] | List of games present in this multiworld. |
|
||||||
| datapackage_versions | dict\[str, int\] | Data versions of the individual games' data packages the server will send. Used to decide which games' caches are outdated. See [Data Package Contents](#Data-Package-Contents). **Deprecated. Use `datapackage_checksums` instead.** |
|
| datapackage_versions | dict\[str, int\] | Data versions of the individual games' data packages the server will send. Used to decide which games' caches are outdated. See [Data Package Contents](#Data-Package-Contents). **Deprecated. Use `datapackage_checksums` instead.** |
|
||||||
|
@ -555,12 +555,16 @@ Color options:
|
||||||
`flags` contains the [NetworkItem](#NetworkItem) flags that belong to the item
|
`flags` contains the [NetworkItem](#NetworkItem) flags that belong to the item
|
||||||
|
|
||||||
### Client States
|
### Client States
|
||||||
An enumeration containing the possible client states that may be used to inform the server in [StatusUpdate](#StatusUpdate).
|
An enumeration containing the possible client states that may be used to inform
|
||||||
|
the server in [StatusUpdate](#StatusUpdate). The MultiServer automatically sets
|
||||||
|
the client state to `ClientStatus.CLIENT_CONNECTED` on the first active connection
|
||||||
|
to a slot.
|
||||||
|
|
||||||
```python
|
```python
|
||||||
import enum
|
import enum
|
||||||
class ClientStatus(enum.IntEnum):
|
class ClientStatus(enum.IntEnum):
|
||||||
CLIENT_UNKNOWN = 0
|
CLIENT_UNKNOWN = 0
|
||||||
|
CLIENT_CONNECTED = 5
|
||||||
CLIENT_READY = 10
|
CLIENT_READY = 10
|
||||||
CLIENT_PLAYING = 20
|
CLIENT_PLAYING = 20
|
||||||
CLIENT_GOAL = 30
|
CLIENT_GOAL = 30
|
||||||
|
|
Loading…
Reference in New Issue