141 lines
3.0 KiB
Go
141 lines
3.0 KiB
Go
package models
|
|
|
|
type Suit int
|
|
|
|
const (
|
|
SuitHeart Suit = iota
|
|
SuitDiamond
|
|
SuitClub
|
|
SuitSpade
|
|
SuitJoker
|
|
SuitSuper
|
|
)
|
|
|
|
type Card struct {
|
|
Suit Suit `json:"suit"`
|
|
Value int `json:"value"`
|
|
}
|
|
|
|
type CardType int
|
|
|
|
const (
|
|
CardTypeInvalid CardType = iota
|
|
CardTypeSingle
|
|
CardTypePair
|
|
CardTypeTriple
|
|
CardTypeTripleOne
|
|
CardTypeTriplePair
|
|
CardTypeStraight
|
|
CardTypeDoubleStraight
|
|
CardTypeBomb
|
|
CardTypeRocket
|
|
)
|
|
|
|
type Player struct {
|
|
ID string `json:"id"`
|
|
UserID string `json:"userId,omitempty"`
|
|
Name string `json:"name"`
|
|
Cards []Card `json:"cards,omitempty"`
|
|
CardCount int `json:"cardCount"`
|
|
IsReady bool `json:"isReady"`
|
|
IsOnline bool `json:"isOnline"`
|
|
}
|
|
|
|
type RoomState int
|
|
|
|
const (
|
|
RoomStateWaiting RoomState = iota
|
|
RoomStatePlaying
|
|
RoomStateFinished
|
|
)
|
|
|
|
type PlayRecord struct {
|
|
PlayerID string `json:"playerId"`
|
|
Cards []Card `json:"cards"`
|
|
CardType CardType `json:"cardType"`
|
|
}
|
|
|
|
type Room struct {
|
|
ID string `json:"id"`
|
|
Players []*Player `json:"players"`
|
|
CurrentTurn int `json:"currentTurn"`
|
|
State RoomState `json:"state"`
|
|
LastPlay *PlayRecord `json:"lastPlay,omitempty"`
|
|
LastWinner string `json:"lastWinner,omitempty"`
|
|
RoundCount int `json:"roundCount"`
|
|
MaxPlayers int `json:"maxPlayers"`
|
|
}
|
|
|
|
type MessageType string
|
|
|
|
const (
|
|
MsgTypeJoin MessageType = "join"
|
|
MsgTypeLeave MessageType = "leave"
|
|
MsgTypeReady MessageType = "ready"
|
|
MsgTypePlay MessageType = "play"
|
|
MsgTypePass MessageType = "pass"
|
|
MsgTypeState MessageType = "state"
|
|
MsgTypeError MessageType = "error"
|
|
MsgTypeChat MessageType = "chat"
|
|
MsgTypeGameOver MessageType = "gameOver"
|
|
)
|
|
|
|
type Message struct {
|
|
Type MessageType `json:"type"`
|
|
PlayerID string `json:"playerId,omitempty"`
|
|
Data interface{} `json:"data,omitempty"`
|
|
Timestamp int64 `json:"timestamp"`
|
|
}
|
|
|
|
type ApiResponse struct {
|
|
Status int `json:"status"`
|
|
Code int `json:"code"`
|
|
Message string `json:"message"`
|
|
Data interface{} `json:"data"`
|
|
}
|
|
|
|
type CreateRoomRequest struct {
|
|
PlayerName string `json:"playerName"`
|
|
MaxPlayers int `json:"maxPlayers"`
|
|
}
|
|
|
|
type JoinRoomRequest struct {
|
|
PlayerName string `json:"playerName"`
|
|
}
|
|
|
|
type User struct {
|
|
ID string `json:"id"`
|
|
Username string `json:"username"`
|
|
Password string `json:"-"`
|
|
Nickname string `json:"nickname"`
|
|
}
|
|
|
|
type RegisterRequest struct {
|
|
Username string `json:"username"`
|
|
Password string `json:"password"`
|
|
Nickname string `json:"nickname"`
|
|
Captcha string `json:"captcha"`
|
|
CaptchaID string `json:"captchaId"`
|
|
}
|
|
|
|
type LoginRequest struct {
|
|
Username string `json:"username"`
|
|
Password string `json:"password"`
|
|
Captcha string `json:"captcha"`
|
|
CaptchaID string `json:"captchaId"`
|
|
}
|
|
|
|
type CaptchaResponse struct {
|
|
CaptchaID string `json:"captchaId"`
|
|
Image string `json:"image"`
|
|
}
|
|
|
|
type LeaveRoomRequest struct {
|
|
PlayerID string `json:"playerId"`
|
|
}
|
|
|
|
type PlayerRoomInfo struct {
|
|
UserID string `json:"userId"`
|
|
RoomID string `json:"roomId"`
|
|
}
|