package req import ( "encoding/json" "git.noahlan.cn/noahlan/ntool/nsys/cmdn" ) type Stone struct { Player string // 玩家 "B" / "W" Location string // "C4" GTP标准协议,或 "CC" 行列协议 } func (s Stone) MarshalJSON() ([]byte, error) { ret := []string{s.Player, s.Location} return json.Marshal(ret) } var _ cmdn.ICommand = (*AnalQueryReq)(nil) type AnalQueryReq struct { ID string `json:"id"` // ID Moves []Stone `json:"moves"` // moves InitialStones []Stone `json:"initialStones,omitempty,optional"` // 初始化棋子(让子棋,棋谱等等) Rules string `json:"rules"` // 规则, chinese / japanese / tromp-taylor .etc... Komi float32 `json:"komi"` // 贴目,中国规则一般7.5目 BoardXSize int64 `json:"boardXSize"` // 棋盘X大小 BoardYSize int64 `json:"boardYSize"` // 棋盘Y大小 AnalyzeTurns []int32 `json:"analyzeTurns,omitempty,optional"` // 需要分析的回合数,与moves对应,若不指定,则分析最后一回合 InitialPlayer string `json:"initialPlayer,omitempty,optional"` // 指定第一手的玩家 "B" / "W",当moves为空时很有用 /// .etc... } func (r *AnalQueryReq) MessageID() string { return r.ID } func (r *AnalQueryReq) AddMove(player, location string) { r.Moves = append(r.Moves, Stone{Player: player, Location: location}) } func (r *AnalQueryReq) AddInitialStone(player, location string) { r.InitialStones = append(r.InitialStones, Stone{Player: player, Location: location}) } var _ cmdn.ICommand = (*AnalQueryActionReq)(nil) const ( AnalActionQueryVersion = "query_version" AnalActionClearCache = "clear_cache" AnalActionTerminate = "terminate" AnalActionTerminateAll = "terminate_all" ) type AnalQueryActionReq struct { ID string `json:"id"` // ID Action string `json:"action"` // 查询动作 // terminate TerminateId string `json:"terminateId,omitempty,optional"` // terminate | terminate_all TurnNumbers []int32 `json:"turnNumbers,omitempty,optional"` } func (r *AnalQueryActionReq) MessageID() string { return r.ID }