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

View File

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

View File

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

View File

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

13
neko.go
View File

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