6 "github.com/stretchr/testify/mock"
14 type ClientManager interface {
15 List() []*ClientConn // Returns list of sorted clients
16 Get(id ClientID) *ClientConn
21 type MockClientMgr struct {
25 func (m *MockClientMgr) List() []*ClientConn {
28 return args.Get(0).([]*ClientConn)
31 func (m *MockClientMgr) Get(id ClientID) *ClientConn {
34 return args.Get(0).(*ClientConn)
37 func (m *MockClientMgr) Add(cc *ClientConn) {
40 func (m *MockClientMgr) Delete(id ClientID) {
44 type MemClientMgr struct {
45 clients map[ClientID]*ClientConn
48 nextClientID atomic.Uint32
51 func NewMemClientMgr() *MemClientMgr {
53 clients: make(map[ClientID]*ClientConn),
57 // List returns slice of sorted clients.
58 func (cm *MemClientMgr) List() []*ClientConn {
62 var clients []*ClientConn
63 for _, client := range cm.clients {
64 clients = append(clients, client)
67 slices.SortFunc(clients, func(a, b *ClientConn) int {
69 binary.BigEndian.Uint16(a.ID[:]),
70 binary.BigEndian.Uint16(b.ID[:]),
77 func (cm *MemClientMgr) Get(id ClientID) *ClientConn {
84 func (cm *MemClientMgr) Add(cc *ClientConn) {
88 cm.nextClientID.Add(1)
89 binary.BigEndian.PutUint16(cc.ID[:], uint16(cm.nextClientID.Load()))
91 cm.clients[cc.ID] = cc
94 func (cm *MemClientMgr) Delete(id ClientID) {
98 delete(cm.clients, id)