Files
cmp-go-snippet/cmpSnipper/cmpSnipper.go
2024-05-08 09:05:36 +03:00

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