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 MemChatManager struct {
27 chats map[ChatID]*PrivateChat
32 func NewMemChatManager() *MemChatManager {
33 return &MemChatManager{
34 chats: make(map[ChatID]*PrivateChat),
38 func (cm *MemChatManager) New(cc *ClientConn) ChatID {
43 _, _ = rand.Read(randID[:])
45 cm.chats[randID] = &PrivateChat{ClientConn: make(map[[2]byte]*ClientConn)}
47 cm.chats[randID].ClientConn[cc.ID] = cc
52 func (cm *MemChatManager) Join(id ChatID, cc *ClientConn) {
57 chat.ClientConn[cc.ID] = cc
60 func (cm *MemChatManager) Leave(id ChatID, clientID [2]byte) {
64 privChat, ok := cm.chats[id]
69 delete(privChat.ClientConn, clientID)
72 func (cm *MemChatManager) GetSubject(id ChatID) string {
76 return cm.chats[id].Subject
79 func (cm *MemChatManager) Members(id ChatID) []*ClientConn {
85 var members []*ClientConn
86 for _, cc := range chat.ClientConn {
87 members = append(members, cc)
90 slices.SortFunc(members, clientConnSortFunc)
95 func (cm *MemChatManager) SetSubject(id ChatID, subject string) {
101 chat.Subject = subject
104 type MockChatManager struct {
108 func (m *MockChatManager) New(cc *ClientConn) ChatID {
111 return args.Get(0).(ChatID)
114 func (m *MockChatManager) GetSubject(id ChatID) string {
117 return args.String(0)
120 func (m *MockChatManager) Join(id ChatID, cc *ClientConn) {
124 func (m *MockChatManager) Leave(id ChatID, clientID [2]byte) {
125 m.Called(id, clientID)
128 func (m *MockChatManager) SetSubject(id ChatID, subject string) {
129 m.Called(id, subject)
133 func (m *MockChatManager) Members(id ChatID) []*ClientConn {
136 return args.Get(0).([]*ClientConn)