mirror of
https://github.com/ehang-io/nps.git
synced 2025-07-03 13:10:42 +00:00
76 lines
1.7 KiB
Go
76 lines
1.7 KiB
Go
package core
|
|
|
|
import (
|
|
"context"
|
|
"github.com/cnlh/nps/bridge"
|
|
"net"
|
|
)
|
|
|
|
// Plugin interface, all plugins must implement those functions.
|
|
type Plugin interface {
|
|
GetConfigName() *NpsConfigs
|
|
GetConfigLevel() ConfigLevel
|
|
GetStage() Stage
|
|
Start(ctx context.Context, config map[string]string) (context.Context, error)
|
|
Run(ctx context.Context, config map[string]string) (context.Context, error)
|
|
End(ctx context.Context, config map[string]string) (context.Context, error)
|
|
}
|
|
|
|
type NpsPlugin struct {
|
|
Version string
|
|
}
|
|
|
|
func (npsPlugin *NpsPlugin) GetConfigName() *NpsConfigs {
|
|
return nil
|
|
}
|
|
|
|
// describe the config level
|
|
func (npsPlugin *NpsPlugin) GetConfigLevel() ConfigLevel {
|
|
return CONFIG_LEVEL_PLUGIN
|
|
}
|
|
|
|
// describe the stage of the plugin
|
|
func (npsPlugin *NpsPlugin) GetStage() Stage {
|
|
return STAGE_RUN
|
|
}
|
|
|
|
func (npsPlugin *NpsPlugin) Start(ctx context.Context, config map[string]string) (context.Context, error) {
|
|
return ctx, nil
|
|
}
|
|
|
|
func (npsPlugin *NpsPlugin) Run(ctx context.Context, config map[string]string) (context.Context, error) {
|
|
return ctx, nil
|
|
}
|
|
|
|
func (npsPlugin *NpsPlugin) End(ctx context.Context, config map[string]string) (context.Context, error) {
|
|
return ctx, nil
|
|
}
|
|
|
|
func (npsPlugin *NpsPlugin) GetClientConn(ctx context.Context) net.Conn {
|
|
return ctx.Value(CLIENT_CONNECTION).(net.Conn)
|
|
}
|
|
|
|
func (npsPlugin *NpsPlugin) GetBridge(ctx context.Context) *bridge.Bridge {
|
|
return ctx.Value(BRIDGE).(*bridge.Bridge)
|
|
}
|
|
|
|
func (npsPlugin *NpsPlugin) GetClientId(ctx context.Context) int {
|
|
return ctx.Value(CLIENT_ID).(int)
|
|
}
|
|
|
|
type Plugins struct {
|
|
pgs []Plugin
|
|
}
|
|
|
|
func NewPlugins() *Plugins {
|
|
p := &Plugins{}
|
|
p.pgs = make([]Plugin, 0)
|
|
return p
|
|
}
|
|
|
|
func (pl *Plugins) Add(plugins ...Plugin) {
|
|
for _, plugin := range plugins {
|
|
pl.pgs = append(pl.pgs, plugin)
|
|
}
|
|
}
|