Enhance school management and protocol handling by introducing a new worker failure mechanism, ensuring proper cleanup of schools when a worker thread encounters an error. Update the map snapshot protocol to allow larger school data sizes, improving the handling of extensive map layouts. Revise documentation to reflect changes in save intervals and introduce a minimum save interval for better performance. Update tests to validate the new functionalities and ensure robustness in handling large data scenarios.
This commit is contained in:
@@ -142,6 +142,15 @@ say so explicitly in the change description.
|
||||
runs six times over once six schools exist. `OpenSchool` only subscribes to clock frames.
|
||||
- The menu polls `GET /api/schools` once a second and patches its cards in place. Rebuilding the
|
||||
list on every refresh would drop focus and swallow clicks.
|
||||
- **An abandoned `WaitToReadAsync` stays queued on its channel.** `GameClient.RunSendLoopAsync`
|
||||
keeps its two wait tasks across iterations for that reason; recreating both on every idle pass
|
||||
leaked the loser of `Task.WhenAny` once per clock frame.
|
||||
- **A map snapshot is not bounded by `MaxMessageSize`.** That constant limits what the server
|
||||
reads. Outbound snapshots are sized with `ProtocolCodec.MapSnapshotSize`, because a school the
|
||||
player enlarged in the create editor passes 8 KiB at roughly sixty furnished rooms.
|
||||
- **A worker that dies must tell the supervisor** (`GameCommand.WorkerFailed`). It owns the table,
|
||||
so a school that removed itself would break invariant 3 — and a school that removes nothing
|
||||
leaves a card in the menu whose clock never moves again.
|
||||
- The client outbox drops the oldest frame under pressure. That is correct for clock frames and
|
||||
wrong for anything that must arrive exactly once — such a message would need its own path.
|
||||
- `erasableSyntaxOnly` is off in `tsconfig.app.json` on purpose: constructor parameter properties
|
||||
|
||||
Reference in New Issue
Block a user