mirror of
https://github.com/cadmium-im/zirconium-go.git
synced 2024-10-18 17:41:02 +00:00
40 lines
839 B
Go
40 lines
839 B
Go
|
package internal
|
||
|
|
||
|
import (
|
||
|
"github.com/ChronosX88/zirconium/internal/models"
|
||
|
"github.com/google/logger"
|
||
|
"github.com/google/uuid"
|
||
|
"github.com/gorilla/websocket"
|
||
|
)
|
||
|
|
||
|
type ConnectionHandler struct {
|
||
|
connections map[string]*OriginC2S
|
||
|
}
|
||
|
|
||
|
func NewConnectionHandler() *ConnectionHandler {
|
||
|
return &ConnectionHandler{}
|
||
|
}
|
||
|
|
||
|
func (ch *ConnectionHandler) HandleNewConnection(wsocket *websocket.Conn) {
|
||
|
uuid, _ := uuid.NewRandom()
|
||
|
uuidStr := uuid.String()
|
||
|
o := &OriginC2S{
|
||
|
wsConn: wsocket,
|
||
|
connID: uuidStr,
|
||
|
}
|
||
|
ch.connections[o.connID] = o
|
||
|
go func() {
|
||
|
for {
|
||
|
var msg models.BaseMessage
|
||
|
err := o.wsConn.ReadJSON(&msg)
|
||
|
if err != nil {
|
||
|
delete(ch.connections, o.connID)
|
||
|
o.wsConn.Close()
|
||
|
logger.Infof("Connection %s was closed. (Reason: %s)", o.connID, err.Error())
|
||
|
break
|
||
|
}
|
||
|
router.RouteMessage(o, msg)
|
||
|
}
|
||
|
}()
|
||
|
}
|