ws peer 를 제네릭으로 변경

This commit is contained in:
2023-12-20 10:02:49 +09:00
parent b2ee40249a
commit 00f4cab992
3 changed files with 89 additions and 144 deletions

View File

@ -18,18 +18,18 @@ import (
"github.com/gorilla/websocket"
)
type WebsocketPeerHandler struct {
WebsocketPeerApiBroker
type WebsocketPeerHandler[T PeerInterface] struct {
WebsocketPeerApiBroker[T]
sessionConsumer session.Consumer
}
func NewWebsocketPeerHandler(consumer session.Consumer) WebsocketPeerHandler {
return WebsocketPeerHandler{
func NewWebsocketPeerHandler[T PeerInterface](consumer session.Consumer) WebsocketPeerHandler[T] {
return WebsocketPeerHandler[T]{
sessionConsumer: consumer,
}
}
func (ws *WebsocketPeerHandler) RegisterHandlers(serveMux *http.ServeMux, prefix string) error {
func (ws *WebsocketPeerHandler[T]) RegisterHandlers(serveMux *http.ServeMux, prefix string) error {
url := gocommon.MakeHttpHandlerPattern(prefix, "ws")
if *noAuthFlag {
serveMux.HandleFunc(url, ws.upgrade_nosession)
@ -40,13 +40,15 @@ func (ws *WebsocketPeerHandler) RegisterHandlers(serveMux *http.ServeMux, prefix
return nil
}
func (ws *WebsocketPeerHandler) upgrade_core(conn *websocket.Conn, accid primitive.ObjectID, nonce uint32) {
func (ws *WebsocketPeerHandler[T]) upgrade_core(conn *websocket.Conn, accid primitive.ObjectID, nonce uint32) {
go func(c *websocket.Conn, accid primitive.ObjectID) {
peer := ws.CreatePeer(accid)
ws.ClientConnected(peer, c)
var closeReason string
defer func() {
peer.ClientDisconnected(closeReason)
}()
response := make([]byte, 255)
for {
response = response[:5]
@ -112,11 +114,10 @@ func (ws *WebsocketPeerHandler) upgrade_core(conn *websocket.Conn, accid primiti
}
}
}
ws.ClientDisconnected(peer, closeReason)
}(conn, accid)
}
func (ws *WebsocketPeerHandler) upgrade_nosession(w http.ResponseWriter, r *http.Request) {
func (ws *WebsocketPeerHandler[T]) upgrade_nosession(w http.ResponseWriter, r *http.Request) {
// 클라이언트 접속
defer func() {
s := recover()
@ -166,7 +167,7 @@ func (ws *WebsocketPeerHandler) upgrade_nosession(w http.ResponseWriter, r *http
ws.upgrade_core(conn, accid, nonce)
}
func (ws *WebsocketPeerHandler) upgrade(w http.ResponseWriter, r *http.Request) {
func (ws *WebsocketPeerHandler[T]) upgrade(w http.ResponseWriter, r *http.Request) {
// 클라이언트 접속
defer func() {
s := recover()