2024-01-28 22:04:40 +00:00
|
|
|
package socket
|
|
|
|
|
|
|
|
import (
|
2024-01-31 00:16:57 +00:00
|
|
|
"sync"
|
|
|
|
|
2024-01-28 22:04:40 +00:00
|
|
|
"github.com/ectrc/snow/aid"
|
|
|
|
"github.com/ectrc/snow/person"
|
|
|
|
"github.com/gofiber/contrib/websocket"
|
|
|
|
"github.com/google/uuid"
|
|
|
|
)
|
|
|
|
|
|
|
|
type MatchmakerData struct {
|
|
|
|
PlaylistID string
|
|
|
|
Region string
|
|
|
|
}
|
|
|
|
|
2024-01-29 21:08:05 +00:00
|
|
|
type Socket[T JabberData | MatchmakerData] struct {
|
2024-01-28 22:04:40 +00:00
|
|
|
ID string
|
|
|
|
Connection *websocket.Conn
|
|
|
|
Data *T
|
|
|
|
Person *person.Person
|
2024-01-31 00:16:57 +00:00
|
|
|
mutex sync.Mutex
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *Socket[T]) Write(payload []byte) {
|
|
|
|
s.mutex.Lock()
|
|
|
|
defer s.mutex.Unlock()
|
|
|
|
|
|
|
|
s.Connection.WriteMessage(websocket.TextMessage, payload)
|
2024-01-28 22:04:40 +00:00
|
|
|
}
|
|
|
|
|
2024-01-29 21:08:05 +00:00
|
|
|
func newSocket[T JabberData | MatchmakerData](conn *websocket.Conn, data ...T) *Socket[T] {
|
2024-01-28 22:04:40 +00:00
|
|
|
additional := data[0]
|
|
|
|
|
|
|
|
return &Socket[T]{
|
|
|
|
ID: uuid.New().String(),
|
|
|
|
Connection: conn,
|
|
|
|
Data: &additional,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewJabberSocket(conn *websocket.Conn, id string, data JabberData) *Socket[JabberData] {
|
|
|
|
socket := newSocket[JabberData](conn, data)
|
|
|
|
socket.ID = id
|
|
|
|
return socket
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewMatchmakerSocket(conn *websocket.Conn, data MatchmakerData) *Socket[MatchmakerData] {
|
|
|
|
return newSocket[MatchmakerData](conn, data)
|
|
|
|
}
|
|
|
|
|
|
|
|
var (
|
|
|
|
JabberSockets = aid.GenericSyncMap[Socket[JabberData]]{}
|
|
|
|
MatchmakerSockets = aid.GenericSyncMap[Socket[MatchmakerData]]{}
|
|
|
|
)
|