diff options
| author | nsfisis <nsfisis@gmail.com> | 2024-07-28 19:42:05 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2024-07-28 19:52:31 +0900 |
| commit | 22ddf340f0b0c8d0cd04c34d9fa1481a1fbf422f (patch) | |
| tree | fab36f8dc1a2be23e331752b3e3d35e10d797ecf /backend/game/message.go | |
| parent | 7bd55ee264f7eefda6c1f71865a2c6287d7e20fa (diff) | |
| download | phperkaigi-2025-albatross-22ddf340f0b0c8d0cd04c34d9fa1481a1fbf422f.tar.gz phperkaigi-2025-albatross-22ddf340f0b0c8d0cd04c34d9fa1481a1fbf422f.tar.zst phperkaigi-2025-albatross-22ddf340f0b0c8d0cd04c34d9fa1481a1fbf422f.zip | |
refactor(backend): move game-related code to game module
Diffstat (limited to 'backend/game/message.go')
| -rw-r--r-- | backend/game/message.go | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/backend/game/message.go b/backend/game/message.go new file mode 100644 index 0000000..7d1a166 --- /dev/null +++ b/backend/game/message.go @@ -0,0 +1,104 @@ +package game + +import ( + "encoding/json" + "fmt" +) + +type MessageWithClient struct { + Client *GameClient + Message *Message +} + +type Message struct { + Type string `json:"type"` + Data MessageData `json:"data"` +} + +type MessageData interface{} + +type MessageDataConnect struct { +} + +type MessageDataPrepare struct { + Problem string `json:"problem"` +} + +type MessageDataReady struct { +} + +type MessageDataStart struct { + StartTime string `json:"startTime"` +} + +type MessageDataCode struct { + Code string `json:"code"` +} + +type MessageDataScore struct { + Score int `json:"score"` +} + +type MessageDataFinish struct { + YourScore *int `json:"yourScore"` + OpponentScore *int `json:"opponentScore"` +} + +type MessageDataWatch struct { + Problem string `json:"problem"` + ScoreA *int `json:"scoreA"` + CodeA string `json:"codeA"` + ScoreB *int `json:"scoreB"` + CodeB string `json:"codeB"` +} + +func (m *Message) UnmarshalJSON(data []byte) error { + var raw map[string]json.RawMessage + if err := json.Unmarshal(data, &raw); err != nil { + return err + } + + if err := json.Unmarshal(raw["type"], &m.Type); err != nil { + return err + } + + var err error + switch m.Type { + case "connect": + var data MessageDataConnect + err = json.Unmarshal(raw["data"], &data) + m.Data = data + case "prepare": + var data MessageDataPrepare + err = json.Unmarshal(raw["data"], &data) + m.Data = data + case "ready": + var data MessageDataReady + err = json.Unmarshal(raw["data"], &data) + m.Data = data + case "start": + var data MessageDataStart + err = json.Unmarshal(raw["data"], &data) + m.Data = data + case "code": + var data MessageDataCode + err = json.Unmarshal(raw["data"], &data) + m.Data = data + case "score": + var data MessageDataScore + err = json.Unmarshal(raw["data"], &data) + m.Data = data + case "finish": + var data MessageDataFinish + err = json.Unmarshal(raw["data"], &data) + m.Data = data + case "watch": + var data MessageDataWatch + err = json.Unmarshal(raw["data"], &data) + m.Data = data + default: + err = fmt.Errorf("unknown message type: %s", m.Type) + } + + return err +} |
