freifunkmanager/websocket/server.go

52 lines
1.2 KiB
Go
Raw Normal View History

2017-05-08 19:13:29 +02:00
package websocket
import (
"net/http"
2018-07-26 14:14:23 +02:00
wsLib "dev.sum7.eu/genofire/golang-lib/websocket"
"github.com/google/uuid"
2018-07-26 14:14:23 +02:00
"github.com/jinzhu/gorm"
2017-05-08 19:13:29 +02:00
2018-07-26 14:14:23 +02:00
"github.com/FreifunkBremen/yanic/runtime"
2017-05-08 19:13:29 +02:00
)
type WebsocketServer struct {
nodes *runtime.Nodes
2018-07-26 14:14:23 +02:00
db *gorm.DB
secret string
loggedIn map[uuid.UUID]bool
2017-05-08 19:13:29 +02:00
inputMSG chan *wsLib.Message
ws *wsLib.Server
handlers map[string]WebsocketHandlerFunc
}
2018-07-26 14:14:23 +02:00
func NewWebsocketServer(secret string, db *gorm.DB, nodes *runtime.Nodes) *WebsocketServer {
ownWS := WebsocketServer{
nodes: nodes,
2018-07-26 14:14:23 +02:00
db: db,
handlers: make(map[string]WebsocketHandlerFunc),
loggedIn: make(map[uuid.UUID]bool),
inputMSG: make(chan *wsLib.Message),
secret: secret,
}
ownWS.ws = wsLib.NewServer(ownWS.inputMSG, wsLib.NewSessionManager())
// Register Handlers
ownWS.handlers[MessageTypeConnect] = ownWS.connectHandler
ownWS.handlers[MessageTypeLogin] = ownWS.loginHandler
ownWS.handlers[MessageTypeAuthStatus] = ownWS.authStatusHandler
ownWS.handlers[MessageTypeLogout] = ownWS.logoutHandler
2017-05-08 19:13:29 +02:00
ownWS.handlers[MessageTypeSystemNode] = ownWS.nodeHandler
2017-05-08 19:13:29 +02:00
http.HandleFunc("/ws", ownWS.ws.Handler)
go ownWS.MessageHandler()
return &ownWS
2017-05-08 19:13:29 +02:00
}
func (ws *WebsocketServer) Close() {
close(ws.inputMSG)
2017-05-08 19:13:29 +02:00
}