Хранилище handshaked соединений

This commit is contained in:
set
2026-03-10 15:49:07 +02:00
parent db17ef8581
commit 153240912a

59
socket/connections.go Normal file
View File

@@ -0,0 +1,59 @@
package socket
import (
"sync"
"github.com/gorilla/websocket"
)
// Это хранилище для всех подключённых сокетов.
// Оно обеспечивает потокобезопасный доступ к ним,
// позволяя добавлять, удалять и получать сокеты без риска
// гонок данных.
// Здесь содержатся только соединения прошедшие рукопожатие
type Connection struct {
Identificator string
//Подсоединенный сокет
Socket *websocket.Conn
}
// Потокобезопасное хранилище подключённых сокетов
var (
handshakeCompletedSockets = make(map[string]*Connection)
socketsMutex = sync.RWMutex{}
)
// Добавление сокета в хранилище
func AddSocket(conn *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, bool) {
socketsMutex.RLock()
defer socketsMutex.RUnlock()
conn, exists := handshakeCompletedSockets[identificator]
return conn, exists
}
// Получение всех сокетов
func GetAllSockets() []*Connection {
socketsMutex.RLock()
defer socketsMutex.RUnlock()
connections := make([]*Connection, 0, len(handshakeCompletedSockets))
for _, conn := range handshakeCompletedSockets {
connections = append(connections, conn)
}
return connections
}