package socket import ( connection "g365sfu/socket/struct" "sync" ) // Это хранилище для всех подключённых сокетов. // Оно обеспечивает потокобезопасный доступ к ним, // позволяя добавлять, удалять и получать сокеты без риска // гонок данных. // Здесь содержатся только соединения прошедшие рукопожатие // Потокобезопасное хранилище подключённых сокетов var ( handshakeCompletedSockets = make(map[string]*connection.Connection) socketsMutex = sync.RWMutex{} ) // Добавление сокета в хранилище func AddSocket(conn *connection.Connection) { socketsMutex.Lock() defer socketsMutex.Unlock() handshakeCompletedSockets[conn.Identificator] = conn } // Удаление сокета из хранилища func RemoveSocket(identificator string) { socketsMutex.Lock() defer socketsMutex.Unlock() delete(handshakeCompletedSockets, identificator) } // Получение сокета по идентификатору func GetSocket(identificator string) (*connection.Connection, bool) { socketsMutex.RLock() defer socketsMutex.RUnlock() conn, exists := handshakeCompletedSockets[identificator] return conn, exists } // Получение всех сокетов func GetAllSockets() []*connection.Connection { socketsMutex.RLock() defer socketsMutex.RUnlock() connections := make([]*connection.Connection, 0, len(handshakeCompletedSockets)) for _, conn := range handshakeCompletedSockets { connections = append(connections, conn) } return connections }