feat: add messages feature
This commit is contained in:
@@ -30,6 +30,8 @@ type anyMsg struct {
|
||||
Players []PlayerInfo `json:"players"`
|
||||
Code string `json:"code"` // table_lobby
|
||||
Host bool `json:"host"` // table_lobby
|
||||
Text string `json:"text"` // chat
|
||||
Emoji string `json:"emoji"` // chat
|
||||
}
|
||||
|
||||
// TestFourPlayersFullGame یک بازی کامل را روی WebSocket واقعی با ۴ ربات اجرا میکند.
|
||||
@@ -585,6 +587,68 @@ func TestRefundOnAbort(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// TestChatBroadcast: پیامِ چتِ یک بازیکن باید برای همهی میز (شاملِ گیرندهی دیگر)
|
||||
// با جایگاهِ فرستنده و متن پخش شود.
|
||||
func TestChatBroadcast(t *testing.T) {
|
||||
hub := testHub()
|
||||
srv := httptest.NewServer(http.HandlerFunc(hub.ServeWS))
|
||||
defer srv.Close()
|
||||
wsURL := "ws" + strings.TrimPrefix(srv.URL, "http")
|
||||
|
||||
conns := make([]*websocket.Conn, 4)
|
||||
seats := make([]int, 4)
|
||||
for i := 0; i < 4; i++ {
|
||||
c, _, err := websocket.DefaultDialer.Dial(wsURL+"?token="+strconv.Itoa(i), nil)
|
||||
if err != nil {
|
||||
t.Fatalf("dial %d: %v", i, err)
|
||||
}
|
||||
defer c.Close()
|
||||
conns[i] = c
|
||||
_ = c.WriteJSON(map[string]string{"type": "join_queue"})
|
||||
}
|
||||
|
||||
// منتظرِ matched برای دانستنِ جایگاهِ فرستنده.
|
||||
for i := 0; i < 4; i++ {
|
||||
_ = conns[i].SetReadDeadline(time.Now().Add(3 * time.Second))
|
||||
for {
|
||||
_, raw, err := conns[i].ReadMessage()
|
||||
if err != nil {
|
||||
t.Fatalf("read matched %d: %v", i, err)
|
||||
}
|
||||
var m anyMsg
|
||||
_ = json.Unmarshal(raw, &m)
|
||||
if m.Type == "matched" {
|
||||
seats[i] = m.Seat
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// فرستنده: بازیکن ۰ یک پیام میفرستد.
|
||||
_ = conns[0].WriteJSON(map[string]string{"type": "chat", "text": "سلام"})
|
||||
|
||||
// گیرنده: بازیکن ۱ باید پیامِ chat با جایگاهِ بازیکن ۰ و متنِ درست بگیرد.
|
||||
_ = conns[1].SetReadDeadline(time.Now().Add(3 * time.Second))
|
||||
got := false
|
||||
for !got {
|
||||
_, raw, err := conns[1].ReadMessage()
|
||||
if err != nil {
|
||||
t.Fatalf("read chat: %v", err)
|
||||
}
|
||||
var m anyMsg
|
||||
_ = json.Unmarshal(raw, &m)
|
||||
if m.Type == "chat" {
|
||||
if m.Seat != seats[0] {
|
||||
t.Fatalf("chat seat = %d, want %d", m.Seat, seats[0])
|
||||
}
|
||||
if m.Text != "سلام" {
|
||||
t.Fatalf("chat text = %q, want سلام", m.Text)
|
||||
}
|
||||
got = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// legalCard یک کارت مجاز انتخاب میکند (follow suit در صورت امکان).
|
||||
func legalCard(hand []string, leadSuit string) string {
|
||||
if leadSuit != "" {
|
||||
|
||||
Reference in New Issue
Block a user