add support for modules.

This commit is contained in:
Miroslav Šedivý 2020-12-12 18:37:19 +01:00
parent 5b69413e01
commit b197bb303e
5 changed files with 23 additions and 7 deletions

View File

@ -5,6 +5,7 @@ import (
"github.com/spf13/cobra"
"demodesk/neko"
"demodesk/neko/modules"
"demodesk/neko/internal/config"
)
@ -16,13 +17,13 @@ func init() {
Run: neko.Service.ServeCommand,
}
configs := []config.Config{
configs := append([]config.Config{
neko.Service.Configs.Desktop,
neko.Service.Configs.Capture,
neko.Service.Configs.WebRTC,
neko.Service.Configs.Session,
neko.Service.Configs.Server,
}
}, modules.ConfigsList()...)
cobra.OnInitialize(func() {
for _, cfg := range configs {

View File

@ -6,4 +6,5 @@ import (
type ApiManager interface {
Route(r chi.Router)
AddRouter(path string, router func(chi.Router))
}

View File

@ -2,6 +2,8 @@ package types
import "net/http"
type HandlerFunction func(Session, []byte) bool
type WebSocketPeer interface {
Send(v interface{}) error
Destroy() error
@ -10,5 +12,6 @@ type WebSocketPeer interface {
type WebSocketManager interface {
Start()
Shutdown() error
AddHandler(handler HandlerFunction)
Upgrade(w http.ResponseWriter, r *http.Request) error
}

View File

@ -15,8 +15,6 @@ import (
"demodesk/neko/internal/types"
)
type HandlerFunction func(types.Session, []byte) bool
func New(
sessions types.SessionManager,
desktop types.DesktopManager,
@ -35,7 +33,7 @@ func New(
},
},
handler: handler.New(sessions, desktop, capture, webrtc),
handlers: []HandlerFunction{},
handlers: []types.HandlerFunction{},
}
}
@ -48,7 +46,7 @@ type WebSocketManagerCtx struct {
sessions types.SessionManager
desktop types.DesktopManager
handler *handler.MessageHandlerCtx
handlers []HandlerFunction
handlers []types.HandlerFunction
shutdown chan bool
}
@ -149,7 +147,7 @@ func (ws *WebSocketManagerCtx) Shutdown() error {
return nil
}
func (ws *WebSocketManagerCtx) AddHandler(handler HandlerFunction) {
func (ws *WebSocketManagerCtx) AddHandler(handler types.HandlerFunction) {
ws.handlers = append(ws.handlers, handler)
}

13
neko.go
View File

@ -14,6 +14,7 @@ import (
"demodesk/neko/internal/websocket"
"demodesk/neko/internal/api"
"demodesk/neko/internal/http"
"demodesk/neko/modules"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
@ -169,6 +170,12 @@ func (neko *Neko) Start() {
neko.Configs.Server,
)
modules.Start(
neko.sessionManager,
neko.webSocketManager,
neko.apiManager,
)
neko.httpManager = http.New(
neko.webSocketManager,
neko.apiManager,
@ -208,6 +215,12 @@ func (neko *Neko) Shutdown() {
neko.logger.Debug().Msg("websocket manager shutdown")
}
if err := modules.Shutdown(); err != nil {
neko.logger.Err(err).Msg("modules shutdown with an error")
} else {
neko.logger.Debug().Msg("modules shutdown")
}
if err := neko.httpManager.Shutdown(); err != nil {
neko.logger.Err(err).Msg("http manager shutdown with an error")
} else {