legacy websockets: add mutex.

This commit is contained in:
Miroslav Šedivý
2024-09-09 00:05:14 +02:00
parent 063fa8821f
commit b7fb738e3a
2 changed files with 11 additions and 19 deletions
+10 -11
View File
@@ -7,6 +7,7 @@ import (
"io" "io"
"net/http" "net/http"
"strings" "strings"
"sync"
oldTypes "m1k1o/neko/internal/http/legacy/types" oldTypes "m1k1o/neko/internal/http/legacy/types"
@@ -47,7 +48,9 @@ type session struct {
lockedFileTransfer bool lockedFileTransfer bool
sessions map[string]*memberStruct sessions map[string]*memberStruct
muClient sync.Mutex
connClient *websocket.Conn connClient *websocket.Conn
muBackend sync.Mutex
connBackend *websocket.Conn connBackend *websocket.Conn
} }
@@ -129,12 +132,10 @@ func (s *session) apiReq(method, path string, request, response any) error {
// send message to client (in old format) // send message to client (in old format)
func (s *session) toClient(payload any) error { func (s *session) toClient(payload any) error {
msg, err := json.Marshal(payload) s.muClient.Lock()
if err != nil { defer s.muClient.Unlock()
return err
}
err = s.connClient.WriteMessage(websocket.TextMessage, msg) err := s.connClient.WriteJSON(payload)
if err != nil { if err != nil {
return fmt.Errorf("%w: %s", ErrWebsocketSend, err) return fmt.Errorf("%w: %s", ErrWebsocketSend, err)
} }
@@ -144,20 +145,18 @@ func (s *session) toClient(payload any) error {
// send message to backend (in new format) // send message to backend (in new format)
func (s *session) toBackend(event string, payload any) error { func (s *session) toBackend(event string, payload any) error {
s.muBackend.Lock()
defer s.muBackend.Unlock()
rawPayload, err := json.Marshal(payload) rawPayload, err := json.Marshal(payload)
if err != nil { if err != nil {
return err return err
} }
msg, err := json.Marshal(&types.WebSocketMessage{ err = s.connBackend.WriteJSON(types.WebSocketMessage{
Event: event, Event: event,
Payload: rawPayload, Payload: rawPayload,
}) })
if err != nil {
return err
}
err = s.connBackend.WriteMessage(websocket.TextMessage, msg)
if err != nil { if err != nil {
return fmt.Errorf("%w: %s", ErrWebsocketSend, err) return fmt.Errorf("%w: %s", ErrWebsocketSend, err)
} }
+1 -8
View File
@@ -5,7 +5,6 @@ import (
"fmt" "fmt"
"net/http" "net/http"
"github.com/gorilla/websocket"
"github.com/pion/webrtc/v3" "github.com/pion/webrtc/v3"
oldEvent "m1k1o/neko/internal/http/legacy/event" oldEvent "m1k1o/neko/internal/http/legacy/event"
@@ -175,7 +174,7 @@ func (s *session) wsToBackend(msg []byte) error {
} }
// loopback emote // loopback emote
msg, err := json.Marshal(&oldMessage.EmoteSend{ err = s.toClient(&oldMessage.EmoteSend{
Event: oldEvent.CHAT_EMOTE, Event: oldEvent.CHAT_EMOTE,
ID: s.id, ID: s.id,
Emote: request.Emote, Emote: request.Emote,
@@ -184,12 +183,6 @@ func (s *session) wsToBackend(msg []byte) error {
return err return err
} }
// loopback emote
err = s.connClient.WriteMessage(websocket.TextMessage, msg)
if err != nil {
return err
}
// broadcast emote to other users // broadcast emote to other users
return s.toBackend(event.SEND_BROADCAST, &message.SendBroadcast{ return s.toBackend(event.SEND_BROADCAST, &message.SendBroadcast{
Sender: s.id, Sender: s.id,