From 153240912aee3ac71eb8d222a3b21ea53fc48f07 Mon Sep 17 00:00:00 2001 From: set Date: Tue, 10 Mar 2026 15:49:07 +0200 Subject: [PATCH] =?UTF-8?q?=D0=A5=D1=80=D0=B0=D0=BD=D0=B8=D0=BB=D0=B8?= =?UTF-8?q?=D1=89=D0=B5=20handshaked=20=D1=81=D0=BE=D0=B5=D0=B4=D0=B8?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- socket/connections.go | 59 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 socket/connections.go diff --git a/socket/connections.go b/socket/connections.go new file mode 100644 index 0000000..f5777cd --- /dev/null +++ b/socket/connections.go @@ -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 +}