dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

commit 96782ffb3d08d691953e724cbdf5b515cc1d5db9
parent 12cd5ff4f726dfb254fa51390792d545cd58b688
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Tue, 23 May 2023 23:31:02 -0700

cleanup users streams management

Diffstat:
Mpkg/web/handlers/handlers.go | 53+++++++++++++++++++++++++++++++----------------------
1 file changed, 31 insertions(+), 22 deletions(-)

diff --git a/pkg/web/handlers/handlers.go b/pkg/web/handlers/handlers.go @@ -4825,18 +4825,10 @@ func ChessGameHandler(c echo.Context) error { close(quit1) }) - usersStreamsMapMtx.Lock() - if usersStreamsMap[authUser.ID] >= userMaxStream { - usersStreamsMapMtx.Unlock() + if err := usersStreamsManager.Add(authUser.ID); err != nil { return nil } - usersStreamsMap[authUser.ID] += 1 - usersStreamsMapMtx.Unlock() - defer func() { - usersStreamsMapMtx.Lock() - usersStreamsMap[authUser.ID] -= 1 - usersStreamsMapMtx.Unlock() - }() + usersStreamsManager.Remove(authUser.ID) c.Response().Header().Set(echo.HeaderContentType, echo.MIMETextHTMLCharsetUTF8) c.Response().WriteHeader(http.StatusOK) @@ -4925,8 +4917,33 @@ func ChatStreamMenuHandler(c echo.Context) error { const userMaxStream = 15 -var usersStreamsMap = make(map[database.UserID]int64) -var usersStreamsMapMtx sync.Mutex +var ErrTooManyStreams = errors.New("too many streams") + +type UsersStreamsManager struct { + sync.Mutex + m map[database.UserID]int64 +} + +func NewUsersStreamsManager() *UsersStreamsManager { + return &UsersStreamsManager{m: make(map[database.UserID]int64)} +} + +func (m *UsersStreamsManager) Add(userID database.UserID) error { + m.Lock() + defer m.Unlock() + if m.m[userID] > userMaxStream { + return ErrTooManyStreams + } + m.m[userID]++ +} + +func (m *UsersStreamsManager) Remove(userID database.UserID) { + m.Lock() + defer m.Unlock() + m.m[userID]-- +} + +var usersStreamsManager = NewUsersStreamsManager() func ChatStreamMessagesHandler(c echo.Context) error { db := c.Get("database").(*database.DkfDB) @@ -4961,18 +4978,10 @@ func ChatStreamMessagesHandler(c echo.Context) error { close(quit1) }) - usersStreamsMapMtx.Lock() - if usersStreamsMap[authUser.ID] >= userMaxStream { - usersStreamsMapMtx.Unlock() + if err := usersStreamsManager.Add(authUser.ID); err != nil { return nil } - usersStreamsMap[authUser.ID] += 1 - usersStreamsMapMtx.Unlock() - defer func() { - usersStreamsMapMtx.Lock() - usersStreamsMap[authUser.ID] -= 1 - usersStreamsMapMtx.Unlock() - }() + usersStreamsManager.Remove(authUser.ID) c.Response().Header().Set(echo.HeaderContentType, echo.MIMETextHTMLCharsetUTF8) c.Response().WriteHeader(http.StatusOK)