mirror of
https://github.com/m1k1o/neko.git
synced 2026-11-03 08:21:50 -06:00
legacy websockets: add mutex.
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user