zirconium-go/core/session_manager.go

44 lines
950 B
Go
Raw Normal View History

package core
import (
"github.com/cadmium-im/zirconium-go/core/models"
"github.com/google/logger"
"github.com/google/uuid"
"github.com/gorilla/websocket"
)
2021-04-06 13:55:41 +00:00
type SessionManager struct {
router *Router
connections map[string]*Session
}
2021-04-06 13:55:41 +00:00
func NewSessionManager(r *Router) *SessionManager {
return &SessionManager{
router: r,
connections: make(map[string]*Session),
}
}
2021-04-06 13:55:41 +00:00
func (ch *SessionManager) HandleNewConnection(wsocket *websocket.Conn) {
randomUUID := uuid.New().String()
o := &Session{
wsConn: wsocket,
2021-04-06 13:55:41 +00:00
connID: randomUUID,
}
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
}
ch.router.RouteMessage(o, msg)
}
}()
2020-02-10 10:55:43 +00:00
logger.Infof("Connection %s was created", o.connID)
}