1
0
forked from x/icebergs
icebergs/base/ctx/process.go
2022-11-17 15:43:25 +08:00

72 lines
1.9 KiB
Go

package ctx
import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/aaa"
kit "shylinux.com/x/toolkits"
)
const PROCESS = "process"
var _process = map[string]ice.Any{}
func AddProcess(key string, val ice.Any) { _process[key] = val }
func Process(m *ice.Message, key string, args []string, arg ...string) {
switch cb := _process[key].(type) {
case func(*ice.Message, []string, ...string):
cb(m, args, arg...)
case string:
if len(arg) == 0 || arg[0] != PROCESS {
m.Cmdy(cb, PROCESS, args)
m.Optionv(ice.FIELD_PREFIX, kit.Simple(m.ActionKey(), m.Optionv(ice.FIELD_PREFIX)))
} else {
m.Cmdy(cb, arg)
}
default:
ProcessField(m, key, args, arg...)
}
}
func ProcessField(m *ice.Message, cmd string, args []string, arg ...string) {
cmd = kit.Select(m.PrefixKey(), cmd)
if len(arg) == 0 || arg[0] != ice.RUN {
m.Option("_index", m.PrefixKey())
if m.Cmdy(COMMAND, cmd).ProcessField(ACTION, m.ActionKey(), ice.RUN); len(args) > 0 {
m.Push(ARGS, kit.Format(args))
}
return
}
if aaa.Right(m, cmd, arg[1:]) {
m.Cmdy(cmd, arg[1:])
}
}
func ProcessFloat(m *ice.Message, arg ...string) {
m.Option(ice.MSG_PROCESS, ice.PROCESS_FLOAT)
m.Option(ice.PROCESS_ARG, arg)
m.Cmdy(COMMAND, arg[0])
}
func ProcessHold(m *ice.Message, text ...ice.Any) {
m.Process(ice.PROCESS_HOLD, text...)
}
func ProcessOpen(m *ice.Message, url string) {
m.Process(ice.PROCESS_OPEN, url)
}
func ProcessRefresh(m *ice.Message, arg ...string) {
m.ProcessRefresh(kit.Select("300ms", arg, 0))
}
func ProcessRewrite(m *ice.Message, arg ...ice.Any) {
m.ProcessRewrite(arg...)
}
func ProcessAction() ice.Actions {
return ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
AddProcess(m.CommandKey(), m.PrefixKey())
}},
PROCESS: {Name: "process", Help: "响应", Hand: func(m *ice.Message, arg ...string) {
ProcessField(m, m.PrefixKey(), arg, arg...)
}},
}
}