websocket.Conn 을 래핑하는 구조체 추가 - 동시 write 오류 제거용
This commit is contained in:
@ -23,7 +23,7 @@ type WebsocketPeerHandler interface {
|
||||
|
||||
type peerCtorChannelValue struct {
|
||||
accid primitive.ObjectID
|
||||
conn *websocket.Conn
|
||||
conn *Conn
|
||||
}
|
||||
|
||||
type peerDtorChannelValue struct {
|
||||
@ -42,7 +42,7 @@ type websocketPeerHandler[T PeerInterface] struct {
|
||||
|
||||
type PeerInterface interface {
|
||||
ClientDisconnected(string)
|
||||
ClientConnected(*websocket.Conn)
|
||||
ClientConnected(*Conn)
|
||||
}
|
||||
type peerApiFuncType[T PeerInterface] func(T, io.Reader) (any, error)
|
||||
|
||||
@ -182,7 +182,7 @@ func (ws *websocketPeerHandler[T]) onSessionInvalidated(accid primitive.ObjectID
|
||||
}
|
||||
|
||||
func (ws *websocketPeerHandler[T]) sessionMonitoring() {
|
||||
all := make(map[primitive.ObjectID]*websocket.Conn)
|
||||
all := make(map[primitive.ObjectID]*Conn)
|
||||
unauthdata := []byte{0x03, 0xec}
|
||||
unauthdata = append(unauthdata, []byte("unauthorized")...)
|
||||
for {
|
||||
@ -191,7 +191,7 @@ func (ws *websocketPeerHandler[T]) sessionMonitoring() {
|
||||
all[estVal.accid] = estVal.conn
|
||||
case disVal := <-ws.peerDtorChannel:
|
||||
if c := all[disVal.accid]; c != nil {
|
||||
c.WriteControl(websocket.CloseMessage, unauthdata, time.Time{})
|
||||
c.MakeWriter().WriteControl(websocket.CloseMessage, unauthdata, time.Time{})
|
||||
delete(all, disVal.accid)
|
||||
}
|
||||
|
||||
@ -203,8 +203,8 @@ func (ws *websocketPeerHandler[T]) sessionMonitoring() {
|
||||
}
|
||||
}
|
||||
|
||||
func (ws *websocketPeerHandler[T]) upgrade_core(conn *websocket.Conn, accid primitive.ObjectID, sk string) {
|
||||
go func(c *websocket.Conn, accid primitive.ObjectID, sk string) {
|
||||
func (ws *websocketPeerHandler[T]) upgrade_core(conn *Conn, accid primitive.ObjectID, sk string) {
|
||||
go func(c *Conn, accid primitive.ObjectID, sk string) {
|
||||
peer := ws.createPeer(accid)
|
||||
var closeReason string
|
||||
|
||||
@ -217,6 +217,7 @@ func (ws *websocketPeerHandler[T]) upgrade_core(conn *websocket.Conn, accid prim
|
||||
}()
|
||||
|
||||
response := make([]byte, 255)
|
||||
writer := c.MakeWriter()
|
||||
for {
|
||||
response = response[:5]
|
||||
messageType, r, err := c.NextReader()
|
||||
@ -277,7 +278,7 @@ func (ws *websocketPeerHandler[T]) upgrade_core(conn *websocket.Conn, accid prim
|
||||
if err != nil {
|
||||
logger.Println("websocket.NewPreparedMessage failed :", err)
|
||||
} else {
|
||||
c.WritePreparedMessage(pmsg)
|
||||
writer.WritePreparedMessage(pmsg)
|
||||
}
|
||||
} else {
|
||||
cmd := make([]byte, flag[0])
|
||||
@ -346,7 +347,7 @@ func (ws *websocketPeerHandler[T]) upgrade_noauth(w http.ResponseWriter, r *http
|
||||
// alias = accid.Hex()
|
||||
// }
|
||||
|
||||
ws.upgrade_core(conn, accid, sk)
|
||||
ws.upgrade_core(&Conn{innerConn: conn}, accid, sk)
|
||||
}
|
||||
|
||||
func (ws *websocketPeerHandler[T]) upgrade(w http.ResponseWriter, r *http.Request) {
|
||||
@ -387,5 +388,5 @@ func (ws *websocketPeerHandler[T]) upgrade(w http.ResponseWriter, r *http.Reques
|
||||
// } else {
|
||||
// alias = authinfo.Account.Hex()
|
||||
// }
|
||||
ws.upgrade_core(conn, authinfo.Account, sk)
|
||||
ws.upgrade_core(makeConn(conn), authinfo.Account, sk)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user