3.4 KiB
3.4 KiB
Protocol Notes
This is a behavior guide for packet semantics beyond raw schemas.
Direction
- Client packet schema lives in
server/app/models.py(ClientPacket). - Browser-side validation/parsing lives in
client/src/network/protocol.ts. - Keep these synchronized on every protocol change.
Client -> Server
update_position: authoritative player position update.update_nickname: nickname change request (server enforces uniqueness).chat_message: player chat.ping: latency measurement.item_add,item_pickup,item_drop,item_delete,item_use,item_update: item actions.
Server -> Client
welcome: initial snapshot with users/items plus server UI/world metadata.signal: forwarded WebRTC offer/answer/ICE.update_position,update_nickname,user_left: presence updates.chat_message: system and user chat stream.pong: ping response.nickname_result: accepted/rejected nickname result.item_upsert: full item replacement after mutation.item_remove: item deletion.item_action_result: action success/failure and user-facing message.item_use_sound: spatial one-shot sound on successful item use (ifuseSoundconfigured).
Item Packet Behavior
item_upsertis full-state replacement for one item, not partial patch.item_action_resultmessages are intended for direct screen-reader/user status feedback.item_use_soundcontains absolute item world coordinates (x,y) and sound path.
Welcome Metadata
-
welcome.worldConfig.gridSize: server-authoritative grid size used by clients for bounds/drawing. -
welcome.serverInfo: server process identity/version metadata:instanceId: unique id generated at server startupversion: server package version (orunknownfallback)
-
welcome.uiDefinitions: server-provided item UI definitions:itemTypeOrder: add-item menu orderitemTypes[].tooltip: item-level tooltip/help textitemTypes[].editableProperties: editable property keys by item typeitemTypes[].propertyOptions: menu options for property keys (for example clocktimeZone)itemTypes[].propertyMetadata: property-level metadata (valueType, optionalrange, optionaltooltip)itemTypes[].globalProperties: non-editable global values (useSound,emitSound,useCooldownMs,emitRange,directional,emitSoundSpeed,emitSoundTempo)
-
Clients keep local fallback defaults but should prefer server-provided metadata when present.
Validation Boundaries
- Server is authoritative for all action validation and normalization.
- Client validates incoming packet shapes and applies runtime behavior.
- Client-side item edit validation is convenience only; server remains source of truth.
Heartbeat/Stale Recovery
- Client sends automatic heartbeat
pingpackets every 10 seconds while connected. - Heartbeat pings use negative
clientSentAtids and are internal (not user-visible ping status). - If websocket close is observed unexpectedly, client starts reconnect flow.
- If a heartbeat
pongis missed for one interval (10 seconds), client also starts reconnect flow. - Reconnect flow waits 2 seconds and retries up to 3 times before stopping.
- After reconnect, if
welcome.serverInfo.instanceIdchanged, client announcesServer restarted. - Client emits
Connected. Version <version>.after eachwelcome. - If
welcome.serverInfo.versiondiffers from running client version, client auto-reloads.