137 lines
2.0 KiB
Go
137 lines
2.0 KiB
Go
|
|
package cmpSnipper
|
|
|
|
import (
|
|
"errors"
|
|
"plugin"
|
|
)
|
|
|
|
type cmpPluginStruct struct {
|
|
Name string
|
|
Plug *plugin.Plugin
|
|
}
|
|
|
|
type App struct {
|
|
Conf interface{}
|
|
ErrIsDir error // = errors.New("Is directory")
|
|
|
|
HttpCliDebug uint32
|
|
HttpCliSslVerify bool
|
|
|
|
CliCur *cmpWbsCliStruct
|
|
CliList []cmpWbsCliStruct
|
|
|
|
cmpSnipperHttpServ cmpSnipperHttpServ
|
|
|
|
Rand4d int
|
|
|
|
Ping2List []Ping2Struct
|
|
|
|
PlugList []cmpPluginStruct
|
|
|
|
SshList []cmpSshCliStruct
|
|
}
|
|
|
|
func NewApp() (App) {
|
|
var app App
|
|
|
|
app.ErrIsDir = errors.New("Is directory")
|
|
|
|
app.HttpCliDebug = 1
|
|
app.HttpCliSslVerify = true
|
|
|
|
return app
|
|
}
|
|
|
|
func (app *App) PlugInit(name string, file string) {
|
|
qqq := map[string]interface{}{
|
|
"Aaa": "Bbb",
|
|
}
|
|
|
|
var plug cmpPluginStruct
|
|
|
|
var p *plugin.Plugin
|
|
|
|
p, err := plugin.Open(file)
|
|
|
|
if err != nil {
|
|
app.Log(err)
|
|
return
|
|
}
|
|
|
|
plug.Name = name
|
|
plug.Plug = p
|
|
|
|
plugInitReq, err := plug.Plug.Lookup("CmpPlug1Init")
|
|
|
|
if err != nil {
|
|
app.Log(err)
|
|
return
|
|
}
|
|
|
|
plugInitFnc := plugInitReq.(func(int, func(any, ...interface{}), map[string]interface{}) interface{})
|
|
|
|
plugInitRes := plugInitFnc(33, app.Log, qqq)
|
|
|
|
app.Log("%+v", plugInitRes)
|
|
|
|
app.PlugList = append(app.PlugList, plug)
|
|
}
|
|
|
|
func (app *App) PlugCall(pnam string, fnam string) {
|
|
for _, plug := range app.PlugList {
|
|
if plug.Name != pnam {
|
|
continue
|
|
}
|
|
|
|
plugFuncReq, err := plug.Plug.Lookup(fnam)
|
|
|
|
if err != nil {
|
|
app.Log(err)
|
|
return
|
|
}
|
|
|
|
plugFuncFnc := plugFuncReq.(func() error)
|
|
|
|
plugFuncRes := plugFuncFnc()
|
|
|
|
app.Log("%+v", plugFuncRes)
|
|
}
|
|
}
|
|
|
|
func (app *App) Prep() (error) {
|
|
app.LogSetup()
|
|
|
|
var err = app.ConfLoadFile("secret/zest.json");
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (app *App) Proc() error {
|
|
var err error // = make(chan error, 1)
|
|
|
|
var term = make(chan bool, 1)
|
|
|
|
go app.WaitSignal(term)
|
|
|
|
err = app.HttpServStart()
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
<-term
|
|
|
|
app.HttpServStop()
|
|
|
|
app.Log("Terminating")
|
|
|
|
return nil
|
|
}
|
|
|
|
// end
|