Refactor draft messaging to unified enum-based protocol
- Replaced scattered message strings with `DraftMessage` `StrEnum` and numeric `DraftPhase` `IntEnum` for clear, centralized definitions. - Added Python→JS constants sync via `scripts/generate_js_constants.py` to ensure backend/frontend parity. - Refactored WebSocket consumers to use `broadcast.*` and `direct.message` handlers with `_dispatch_broadcast` for consistent event delivery. - Enhanced `DraftStateManager` to store `draft_index` and explicitly manage `connected_participants`. - Added colored logging config in settings for improved debugging. - Frontend: split UI into `ParticipantList` and `DraftMoviePool`, extracted message handlers (`handleDraftStatusMessages`, `handleUserIdentifyMessages`), and updated components to use new message/phase enums.
This commit is contained in:
@@ -1,43 +1,51 @@
|
||||
from enum import IntEnum
|
||||
from enum import IntEnum, StrEnum
|
||||
|
||||
class DraftMessage:
|
||||
# Server
|
||||
INFORM_PHASE_CHANGE = "inform.phase.change"
|
||||
CONFIRM_PHASE_CHANGE = "confirm.phase.change"
|
||||
INFORM_PHASE = "inform.phase"
|
||||
INFORM_DRAFT_STATUS = "inform.draft_status"
|
||||
class DraftMessage(StrEnum):
|
||||
# Participant
|
||||
PARTICIPANT_JOIN_REQUEST = "participant.join.request" # client -> server
|
||||
PARTICIPANT_JOIN_CONFIRM = "participant.join.confirm" # server -> client
|
||||
PARTICIPANT_JOIN_REJECT = "participant.join.reject" # server -> client
|
||||
PARTICIPANT_LEAVE_INFORM = "participant.leave.inform" # server -> client (broadcast)
|
||||
|
||||
# Client
|
||||
REQUEST_PHASE_CHANGE = "request.phase.change"
|
||||
REQUEST_DRAFT_STATUS = "request.draft_status"
|
||||
# User presence
|
||||
USER_JOIN_INFORM = "user.join.inform" # server -> client
|
||||
USER_LEAVE_INFORM = "user.leave.inform"
|
||||
USER_IDENTIFICATION_INFORM = "user.identification.inform" # server -> client (tells socket "you are X", e.g. after connect) # server -> client
|
||||
|
||||
# Waiting Phase
|
||||
## Server
|
||||
INFORM_JOIN_USER = "inform.join.user"
|
||||
REQUEST_JOIN_PARTICIPANT = "request.join.participant"
|
||||
REQUEST_JOIN_ADMIN = "request.join.admin"
|
||||
INFORM_LEAVE_PARTICIPANT = "inform.leave.participant"
|
||||
# Phase control
|
||||
PHASE_CHANGE_INFORM = "phase.change.inform" # server -> client (target phase payload)
|
||||
PHASE_CHANGE_REQUEST = "phase.change.request" # server -> client (target phase payload)
|
||||
PHASE_CHANGE_CONFIRM = "phase.change.confirm" # server -> client (target phase payload)
|
||||
|
||||
## Client
|
||||
NOTIFY_JOIN_USER = "notify.join.user"
|
||||
CONFIRM_JOIN_PARTICIPANT = "confirm.join.participant"
|
||||
REJECT_JOIN_PARTICIPANT = "reject.join.participant"
|
||||
CONFIRM_JOIN_ADMIN = "confirm.join.admin"
|
||||
# Status / sync
|
||||
STATUS_SYNC_REQUEST = "status.sync.request" # client -> server
|
||||
STATUS_SYNC_INFORM = "status.sync.inform" # server -> client (full/partial state)
|
||||
|
||||
# Determine Order
|
||||
## Server
|
||||
CONFIRM_DETERMINE_DRAFT_ORDER = "confirm.determine.draft_order"
|
||||
## Client
|
||||
REQUEST_DETERMINE_DRAFT_ORDER = "request.determine.draft_order"
|
||||
DRAFT_INDEX_ADVANCE_REQUEST = "draft.index.advance.request"
|
||||
DRAFT_INDEX_ADVANCE_CONFIRM = "draft.index.advance.confirm"
|
||||
|
||||
# Order determination
|
||||
ORDER_DETERMINE_REQUEST = "order.determine.request" # client -> server (admin)
|
||||
ORDER_DETERMINE_CONFIRM = "order.determine.confirm" # server -> client
|
||||
|
||||
# Bidding (examples, adjust to your flow)
|
||||
BID_START_INFORM = "bid.start.inform" # server -> client (movie, ends_at)
|
||||
BID_PLACE_REQUEST = "bid.place.request" # client -> server (amount)
|
||||
BID_UPDATE_INFORM = "bid.update.inform" # server -> client (high bid)
|
||||
BID_END_INFORM = "bid.end.inform" # server -> client (winner)
|
||||
|
||||
# Nomination (examples)
|
||||
NOMINATION_SUBMIT_REQUEST = "nomination.submit.request" # client -> server (movie_id)
|
||||
NOMINATION_CONFIRM = "nomination.submit.confirm" # server -> client
|
||||
|
||||
|
||||
class DraftPhase(IntEnum):
|
||||
WAITING = 0
|
||||
DETERMINE_ORDER = 10
|
||||
NOMINATION = 20
|
||||
BIDDING = 30
|
||||
AWARD = 40
|
||||
FINALIZE = 50
|
||||
WAITING = 10
|
||||
DETERMINE_ORDER = 20
|
||||
NOMINATING = 30
|
||||
BIDDING = 40
|
||||
AWARDING = 50
|
||||
FINALIZING = 60
|
||||
|
||||
def __str__(self):
|
||||
return self.name.lower()
|
||||
|
||||
Reference in New Issue
Block a user