commit 96782ffb3d08d691953e724cbdf5b515cc1d5db9
parent 12cd5ff4f726dfb254fa51390792d545cd58b688
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Tue, 23 May 2023 23:31:02 -0700
cleanup users streams management
Diffstat:
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)