mirror of
https://github.com/m1k1o/neko.git
synced 2024-07-24 14:40:50 +12:00
add connect / disconnect to adapters.
This commit is contained in:
parent
6ca1e27f01
commit
35cd0f5270
@ -10,6 +10,14 @@ func New() types.MembersDatabase {
|
|||||||
|
|
||||||
type MembersDatabaseCtx struct {}
|
type MembersDatabaseCtx struct {}
|
||||||
|
|
||||||
|
func (manager *MembersDatabaseCtx) Connect() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (manager *MembersDatabaseCtx) Disconnect() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (manager *MembersDatabaseCtx) Insert(id string, profile types.MemberProfile) error {
|
func (manager *MembersDatabaseCtx) Insert(id string, profile types.MemberProfile) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -22,6 +30,6 @@ func (manager *MembersDatabaseCtx) Delete(id string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (manager *MembersDatabaseCtx) Select() map[string]types.MemberProfile {
|
func (manager *MembersDatabaseCtx) Select() (map[string]types.MemberProfile, error) {
|
||||||
return map[string]types.MemberProfile{}
|
return map[string]types.MemberProfile{}, nil
|
||||||
}
|
}
|
||||||
|
@ -7,8 +7,6 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/rs/zerolog/log"
|
|
||||||
|
|
||||||
"demodesk/neko/internal/types"
|
"demodesk/neko/internal/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -24,6 +22,14 @@ type MembersDatabaseCtx struct {
|
|||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (manager *MembersDatabaseCtx) Connect() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (manager *MembersDatabaseCtx) Disconnect() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (manager *MembersDatabaseCtx) Insert(id string, profile types.MemberProfile) error {
|
func (manager *MembersDatabaseCtx) Insert(id string, profile types.MemberProfile) error {
|
||||||
manager.mu.Lock()
|
manager.mu.Lock()
|
||||||
defer manager.mu.Unlock()
|
defer manager.mu.Unlock()
|
||||||
@ -81,17 +87,12 @@ func (manager *MembersDatabaseCtx) Delete(id string) error {
|
|||||||
return manager.serialize(profiles)
|
return manager.serialize(profiles)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (manager *MembersDatabaseCtx) Select() map[string]types.MemberProfile {
|
func (manager *MembersDatabaseCtx) Select() (map[string]types.MemberProfile, error) {
|
||||||
manager.mu.Lock()
|
manager.mu.Lock()
|
||||||
defer manager.mu.Unlock()
|
defer manager.mu.Unlock()
|
||||||
|
|
||||||
profiles, err := manager.deserialize()
|
profiles, err := manager.deserialize()
|
||||||
if err != nil {
|
return profiles, err
|
||||||
// TODO: Refactor.
|
|
||||||
log.Panic().Err(err).Msg("could not read members file")
|
|
||||||
}
|
|
||||||
|
|
||||||
return profiles
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (manager *MembersDatabaseCtx) deserialize() (map[string]types.MemberProfile, error) {
|
func (manager *MembersDatabaseCtx) deserialize() (map[string]types.MemberProfile, error) {
|
||||||
|
@ -19,6 +19,14 @@ type MembersDatabaseCtx struct {
|
|||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (manager *MembersDatabaseCtx) Connect() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (manager *MembersDatabaseCtx) Disconnect() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (manager *MembersDatabaseCtx) Insert(id string, profile types.MemberProfile) error {
|
func (manager *MembersDatabaseCtx) Insert(id string, profile types.MemberProfile) error {
|
||||||
manager.mu.Lock()
|
manager.mu.Lock()
|
||||||
defer manager.mu.Unlock()
|
defer manager.mu.Unlock()
|
||||||
@ -58,9 +66,9 @@ func (manager *MembersDatabaseCtx) Delete(id string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (manager *MembersDatabaseCtx) Select() map[string]types.MemberProfile {
|
func (manager *MembersDatabaseCtx) Select() (map[string]types.MemberProfile, error) {
|
||||||
manager.mu.Lock()
|
manager.mu.Lock()
|
||||||
defer manager.mu.Unlock()
|
defer manager.mu.Unlock()
|
||||||
|
|
||||||
return manager.profiles
|
return manager.profiles, nil
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func New(config *config.Session) *SessionManagerCtx {
|
func New(config *config.Session) *SessionManagerCtx {
|
||||||
manager := &SessionManagerCtx{
|
return &SessionManagerCtx{
|
||||||
logger: log.With().Str("module", "session").Logger(),
|
logger: log.With().Str("module", "session").Logger(),
|
||||||
host: nil,
|
host: nil,
|
||||||
hostMu: sync.Mutex{},
|
hostMu: sync.Mutex{},
|
||||||
@ -25,29 +25,6 @@ func New(config *config.Session) *SessionManagerCtx {
|
|||||||
membersMu: sync.Mutex{},
|
membersMu: sync.Mutex{},
|
||||||
emmiter: events.New(),
|
emmiter: events.New(),
|
||||||
}
|
}
|
||||||
|
|
||||||
// import database users
|
|
||||||
for id, profile := range manager.database.Select() {
|
|
||||||
_ = manager.add(id, profile)
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Move to Database, or make `admin` as reserved user.
|
|
||||||
|
|
||||||
// create default admin account at startup
|
|
||||||
_ = manager.add("admin", types.MemberProfile{
|
|
||||||
Secret: config.AdminPassword,
|
|
||||||
Name: "Administrator",
|
|
||||||
IsAdmin: true,
|
|
||||||
})
|
|
||||||
|
|
||||||
// create default user account at startup
|
|
||||||
_ = manager.add("user", types.MemberProfile{
|
|
||||||
Secret: config.Password,
|
|
||||||
Name: "User",
|
|
||||||
IsAdmin: false,
|
|
||||||
})
|
|
||||||
|
|
||||||
return manager
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type SessionManagerCtx struct {
|
type SessionManagerCtx struct {
|
||||||
@ -77,6 +54,42 @@ func (manager *SessionManagerCtx) add(id string, profile types.MemberProfile) ty
|
|||||||
// ---
|
// ---
|
||||||
// members
|
// members
|
||||||
// ---
|
// ---
|
||||||
|
func (manager *SessionManagerCtx) Connect() error {
|
||||||
|
if err := manager.database.Connect(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
profiles, err := manager.database.Select()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for id, profile := range profiles {
|
||||||
|
_ = manager.add(id, profile)
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Move to Database, or make `admin` as reserved user.
|
||||||
|
|
||||||
|
// create default admin account at startup
|
||||||
|
_ = manager.add("admin", types.MemberProfile{
|
||||||
|
Secret: manager.config.AdminPassword,
|
||||||
|
Name: "Administrator",
|
||||||
|
IsAdmin: true,
|
||||||
|
})
|
||||||
|
|
||||||
|
// create default user account at startup
|
||||||
|
_ = manager.add("user", types.MemberProfile{
|
||||||
|
Secret: manager.config.Password,
|
||||||
|
Name: "User",
|
||||||
|
IsAdmin: false,
|
||||||
|
})
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (manager *SessionManagerCtx) Disconnect() error {
|
||||||
|
return manager.database.Disconnect()
|
||||||
|
}
|
||||||
|
|
||||||
func (manager *SessionManagerCtx) Create(id string, profile types.MemberProfile) (types.Session, error) {
|
func (manager *SessionManagerCtx) Create(id string, profile types.MemberProfile) (types.Session, error) {
|
||||||
manager.membersMu.Lock()
|
manager.membersMu.Lock()
|
||||||
|
@ -15,10 +15,13 @@ type MemberProfile struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type MembersDatabase interface {
|
type MembersDatabase interface {
|
||||||
|
Connect() error
|
||||||
|
Disconnect() error
|
||||||
|
|
||||||
Insert(id string, profile MemberProfile) error
|
Insert(id string, profile MemberProfile) error
|
||||||
Update(id string, profile MemberProfile) error
|
Update(id string, profile MemberProfile) error
|
||||||
Delete(id string) error
|
Delete(id string) error
|
||||||
Select() map[string]MemberProfile
|
Select() (map[string]MemberProfile, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type Session interface {
|
type Session interface {
|
||||||
@ -48,6 +51,9 @@ type Session interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type SessionManager interface {
|
type SessionManager interface {
|
||||||
|
Connect() error
|
||||||
|
Disconnect() error
|
||||||
|
|
||||||
Create(id string, profile MemberProfile) (Session, error)
|
Create(id string, profile MemberProfile) (Session, error)
|
||||||
Update(id string, profile MemberProfile) error
|
Update(id string, profile MemberProfile) error
|
||||||
Get(id string) (Session, bool)
|
Get(id string) (Session, bool)
|
||||||
|
17
neko.go
17
neko.go
@ -128,6 +128,13 @@ func (neko *Neko) Preflight() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (neko *Neko) Start() {
|
func (neko *Neko) Start() {
|
||||||
|
neko.sessionManager = session.New(
|
||||||
|
neko.Configs.Session,
|
||||||
|
)
|
||||||
|
if err := neko.sessionManager.Connect(); err != nil {
|
||||||
|
neko.logger.Panic().Err(err).Msg("unable to connect to session manager")
|
||||||
|
}
|
||||||
|
|
||||||
neko.desktopManager = desktop.New(
|
neko.desktopManager = desktop.New(
|
||||||
neko.Configs.Capture.Display,
|
neko.Configs.Capture.Display,
|
||||||
neko.Configs.Desktop,
|
neko.Configs.Desktop,
|
||||||
@ -147,10 +154,6 @@ func (neko *Neko) Start() {
|
|||||||
)
|
)
|
||||||
neko.webRTCManager.Start()
|
neko.webRTCManager.Start()
|
||||||
|
|
||||||
neko.sessionManager = session.New(
|
|
||||||
neko.Configs.Session,
|
|
||||||
)
|
|
||||||
|
|
||||||
neko.webSocketManager = websocket.New(
|
neko.webSocketManager = websocket.New(
|
||||||
neko.sessionManager,
|
neko.sessionManager,
|
||||||
neko.desktopManager,
|
neko.desktopManager,
|
||||||
@ -175,6 +178,12 @@ func (neko *Neko) Start() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (neko *Neko) Shutdown() {
|
func (neko *Neko) Shutdown() {
|
||||||
|
if err := neko.sessionManager.Disconnect(); err != nil {
|
||||||
|
neko.logger.Err(err).Msg("session manager disconnect with an error")
|
||||||
|
} else {
|
||||||
|
neko.logger.Debug().Msg("session manager disconnect")
|
||||||
|
}
|
||||||
|
|
||||||
if err := neko.desktopManager.Shutdown(); err != nil {
|
if err := neko.desktopManager.Shutdown(); err != nil {
|
||||||
neko.logger.Err(err).Msg("desktop manager shutdown with an error")
|
neko.logger.Err(err).Msg("desktop manager shutdown with an error")
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user