5 "github.com/stretchr/testify/mock"
10 type PrivateChat struct {
12 ClientConn map[[2]byte]*ClientConn
17 type ChatManager interface {
18 New(cc *ClientConn) ChatID
19 GetSubject(id ChatID) string
20 Join(id ChatID, cc *ClientConn)
21 Leave(id ChatID, clientID [2]byte)
22 SetSubject(id ChatID, subject string)
23 Members(id ChatID) []*ClientConn
26 type MockChatManager struct {
30 func (m *MockChatManager) New(cc *ClientConn) ChatID {
33 return args.Get(0).(ChatID)
36 func (m *MockChatManager) GetSubject(id ChatID) string {
42 func (m *MockChatManager) Join(id ChatID, cc *ClientConn) {
46 func (m *MockChatManager) Leave(id ChatID, clientID [2]byte) {
47 m.Called(id, clientID)
50 func (m *MockChatManager) SetSubject(id ChatID, subject string) {
55 func (m *MockChatManager) Members(id ChatID) []*ClientConn {
58 return args.Get(0).([]*ClientConn)
61 type MemChatManager struct {
62 chats map[ChatID]*PrivateChat
67 func NewMemChatManager() *MemChatManager {
68 return &MemChatManager{
69 chats: make(map[ChatID]*PrivateChat),
73 func (cm *MemChatManager) New(cc *ClientConn) ChatID {
78 _, _ = rand.Read(randID[:])
80 cm.chats[randID] = &PrivateChat{ClientConn: make(map[[2]byte]*ClientConn)}
82 cm.chats[randID].ClientConn[cc.ID] = cc
87 func (cm *MemChatManager) Join(id ChatID, cc *ClientConn) {
92 chat.ClientConn[cc.ID] = cc
95 func (cm *MemChatManager) Leave(id ChatID, clientID [2]byte) {
99 privChat, ok := cm.chats[id]
104 delete(privChat.ClientConn, clientID)
107 func (cm *MemChatManager) GetSubject(id ChatID) string {
111 return cm.chats[id].Subject
114 func (cm *MemChatManager) Members(id ChatID) []*ClientConn {
120 var members []*ClientConn
121 for _, cc := range chat.ClientConn {
122 members = append(members, cc)
125 slices.SortFunc(members, clientConnSortFunc)
130 func (cm *MemChatManager) SetSubject(id ChatID, subject string) {
136 chat.Subject = subject