mirror of
https://shylinux.com/x/icebergs
synced 2025-04-25 17:18:05 +08:00
opt some
This commit is contained in:
parent
569e2791d7
commit
c83549f7e5
@ -21,7 +21,7 @@ func _runtime_init(m *ice.Message) {
|
||||
})
|
||||
|
||||
// 环境变量
|
||||
for _, k := range []string{CTX_SHY, CTX_DEV, CTX_OPS, CTX_PID, CTX_USER, CTX_SHARE, CTX_RIVER} {
|
||||
for _, k := range []string{CTX_SHY, CTX_DEV, CTX_OPS, CTX_ARG, CTX_PID, CTX_USER, CTX_SHARE, CTX_RIVER} {
|
||||
m.Conf(RUNTIME, kit.Keys(CONF, k), os.Getenv(k))
|
||||
}
|
||||
|
||||
@ -118,6 +118,7 @@ const (
|
||||
CTX_SHY = "ctx_shy"
|
||||
CTX_DEV = "ctx_dev"
|
||||
CTX_OPS = "ctx_ops"
|
||||
CTX_ARG = "ctx_arg"
|
||||
|
||||
CTX_PID = "ctx_pid"
|
||||
CTX_LOG = "ctx_log"
|
||||
|
@ -14,7 +14,6 @@ func _hash_fields(m *ice.Message) []string {
|
||||
}
|
||||
func _hash_inputs(m *ice.Message, prefix, chain string, field, value string) {
|
||||
list := map[string]int{}
|
||||
m.Debug("what %v %v", prefix, chain)
|
||||
m.Richs(prefix, chain, kit.MDB_FOREACH, func(key string, val map[string]interface{}) {
|
||||
if val = kit.GetMeta(val); kit.Format(val[kit.MDB_COUNT]) != "" {
|
||||
list[kit.Format(val[field])] = kit.Int(val[kit.MDB_COUNT])
|
||||
@ -143,6 +142,9 @@ func HashAction(fields ...string) map[string]*ice.Action {
|
||||
if m.Config(kit.MDB_HASH) == "uniq" {
|
||||
return kit.MDB_HASH
|
||||
}
|
||||
if m.Config(kit.MDB_SHORT) == "uniq" {
|
||||
return kit.MDB_HASH
|
||||
}
|
||||
return kit.Select(kit.MDB_HASH, m.Config(kit.MDB_SHORT))
|
||||
}
|
||||
return ice.SelectAction(map[string]*ice.Action{
|
||||
|
@ -115,7 +115,6 @@ var Index = &ice.Context{Name: MDB, Help: "数据模块", Commands: map[string]*
|
||||
MODIFY: {Name: "modify key sub type field value arg...", Help: "编辑", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
switch arg[2] {
|
||||
case ZONE: // modify key sub type zone id field value
|
||||
m.Debug("what %v %v", arg[3], kit.KeyHash(arg[3]))
|
||||
_list_modify(m, arg[0], _domain_chain(m, kit.Keys(arg[1], kit.KeyHash(arg[3]))), kit.MDB_ID, arg[4], arg[5:]...)
|
||||
case HASH:
|
||||
_hash_modify(m, arg[0], _domain_chain(m, arg[1]), arg[3], arg[4], arg[5:]...)
|
||||
|
@ -102,9 +102,6 @@ func _cache_download(m *ice.Message, r *http.Response) (file, size string) {
|
||||
})
|
||||
default:
|
||||
if s != step && s%10 == 0 {
|
||||
m.Debug("what %v", m.OptionCB(SPIDE))
|
||||
m.Debug("what %v", m.OptionCB(SPIDE))
|
||||
m.Debug("what %v", kit.FileLine(m.OptionCB(SPIDE), 3))
|
||||
m.Log_IMPORT(kit.MDB_FILE, p, kit.MDB_STEP, s,
|
||||
kit.MDB_SIZE, kit.FmtSize(int64(size)), kit.MDB_TOTAL, kit.FmtSize(int64(total)))
|
||||
}
|
||||
|
@ -43,7 +43,7 @@ func _dream_show(m *ice.Message, name string) {
|
||||
os.MkdirAll(p, ice.MOD_DIR)
|
||||
}
|
||||
|
||||
m.ProcessOpen(m.MergeURL2("/chat/pod/" + name))
|
||||
defer m.ProcessOpen(m.MergeURL2("/chat/pod/" + name))
|
||||
|
||||
// 任务模板
|
||||
if m.Option(kit.MDB_TEMPLATE) != "" {
|
||||
|
@ -125,6 +125,11 @@ func _serve_handle(key string, cmd *ice.Command, msg *ice.Message, w http.Respon
|
||||
msg.Option(ice.MSG_USERADDR, msg.Option(ice.MSG_USERIP))
|
||||
}
|
||||
|
||||
cookie := ice.MSG_SESSID + "_" + strings.ReplaceAll(strings.ReplaceAll(kit.ParseURLMap(msg.Option(ice.MSG_USERWEB))["host"], ".", "_"), ":", "_")
|
||||
if sessid := msg.Option(cookie); sessid != "" {
|
||||
msg.Option(ice.MSG_SESSID, sessid)
|
||||
}
|
||||
|
||||
// 请求数据
|
||||
switch r.Header.Get(ContentType) {
|
||||
case ContentJSON:
|
||||
@ -286,8 +291,8 @@ func init() {
|
||||
m.Config(kit.Keys(aaa.WHITE, k), ice.TRUE)
|
||||
}
|
||||
}},
|
||||
cli.START: {Name: "start dev name=ops proto=http host port=9020", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
|
||||
if cli.NodeInfo(m, SERVER, ice.Info.HostName); m.Option(tcp.PORT) == tcp.RANDOM {
|
||||
cli.START: {Name: "start dev name=ops proto=http host port=9020 nodename", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
|
||||
if cli.NodeInfo(m, SERVER, kit.Select(ice.Info.HostName, m.Option("nodename"))); m.Option(tcp.PORT) == tcp.RANDOM {
|
||||
m.Option(tcp.PORT, m.Cmdx(tcp.PORT, aaa.RIGHT))
|
||||
}
|
||||
|
||||
|
@ -35,49 +35,50 @@ func _space_domain(m *ice.Message) (link string) {
|
||||
return tcp.ReplaceLocalhost(m, link)
|
||||
}
|
||||
func _space_dial(m *ice.Message, dev, name string, arg ...string) {
|
||||
m.Richs(SPIDE, nil, dev, func(key string, value map[string]interface{}) {
|
||||
client := kit.Value(value, tcp.CLIENT).(map[string]interface{})
|
||||
redial := m.Confm(SPACE, kit.Keym("redial"))
|
||||
if strings.HasPrefix(dev, "http") {
|
||||
m.Cmd(SPIDE, mdb.CREATE, ice.DEV, dev)
|
||||
dev = ice.DEV
|
||||
}
|
||||
|
||||
value := m.Richs(SPIDE, nil, dev, nil)
|
||||
client := kit.Value(value, tcp.CLIENT).(map[string]interface{})
|
||||
|
||||
host := kit.Format(client[tcp.HOSTNAME])
|
||||
proto := strings.Replace(kit.Format(client[tcp.PROTOCOL]), "http", "ws", 1)
|
||||
uri := kit.MergeURL(proto+"://"+host+"/space/", kit.MDB_TYPE, ice.Info.NodeType, kit.MDB_NAME, name,
|
||||
SHARE, m.Conf(cli.RUNTIME, kit.Keys("conf.ctx_share")), RIVER, m.Conf(cli.RUNTIME, kit.Keys("conf.ctx_river")), arg)
|
||||
|
||||
m.Go(func() {
|
||||
u := kit.ParseURL(uri)
|
||||
redial := m.Configm("redial")
|
||||
frame := m.Target().Server().(*Frame)
|
||||
|
||||
host := kit.Format(client[tcp.HOSTNAME])
|
||||
proto := strings.Replace(kit.Format(client[tcp.PROTOCOL]), "http", "ws", 1)
|
||||
uri := kit.MergeURL(proto+"://"+host+"/space/", kit.MDB_TYPE, ice.Info.NodeType, kit.MDB_NAME, name,
|
||||
SHARE, m.Conf(cli.RUNTIME, kit.Keys("conf.ctx_share")), RIVER, m.Conf(cli.RUNTIME, kit.Keys("conf.ctx_river")), arg)
|
||||
u := kit.ParseURL(uri)
|
||||
for i := 0; i >= 0 && i < kit.Int(redial["c"]); i++ {
|
||||
msg := m.Spawn()
|
||||
msg.Option(kit.Keycb(tcp.DIAL), func(s net.Conn) {
|
||||
if s, _, e := websocket.NewClient(s, u, nil, kit.Int(redial["r"]), kit.Int(redial["w"])); !msg.Warn(e) {
|
||||
msg.Rich(SPACE, nil, kit.Dict(SOCKET, s, kit.MDB_TYPE, MASTER, kit.MDB_NAME, dev, kit.MDB_TEXT, host))
|
||||
msg.Log_CREATE(SPACE, dev, "retry", i, "uri", uri)
|
||||
|
||||
m.Go(func() {
|
||||
for i := 0; i >= 0 && i < kit.Int(redial["c"]); i++ {
|
||||
msg := m.Spawn()
|
||||
msg.Option(kit.Keycb(tcp.DIAL), func(s net.Conn, e error) {
|
||||
if msg.Warn(e) {
|
||||
return
|
||||
// 连接成功
|
||||
if i = 0; _space_handle(msg, true, frame.send, s, dev) {
|
||||
i = -2 // 连接关闭
|
||||
}
|
||||
}
|
||||
})
|
||||
ls := strings.Split(host, ":")
|
||||
msg.Cmd(tcp.CLIENT, tcp.DIAL, kit.SimpleKV("type,name,host,port", proto, dev, ls[0], kit.Select("443", ls, 1)))
|
||||
|
||||
if s, _, e := websocket.NewClient(s, u, nil, kit.Int(redial["r"]), kit.Int(redial["w"])); !msg.Warn(e) {
|
||||
msg.Rich(SPACE, nil, kit.Dict(SOCKET, s, kit.MDB_TYPE, MASTER, kit.MDB_NAME, dev, kit.MDB_TEXT, host))
|
||||
msg.Log_CREATE(SPACE, dev, "retry", i, "uri", uri)
|
||||
|
||||
// 连接成功
|
||||
if i = 0; _space_handle(msg, true, frame.send, s, dev) {
|
||||
i = -2 // 连接关闭
|
||||
}
|
||||
}
|
||||
})
|
||||
ls := strings.Split(host, ":")
|
||||
msg.Cmd(tcp.CLIENT, tcp.DIAL, kit.MDB_TYPE, "wss", kit.MDB_NAME, dev, tcp.HOST, ls[0], tcp.PORT, kit.Select("443", ls, 1))
|
||||
|
||||
// 断线重连
|
||||
sleep := time.Duration(rand.Intn(kit.Int(redial["a"])*i+2)+kit.Int(redial["b"])) * time.Millisecond
|
||||
msg.Cost("order", i, "sleep", sleep, "reconnect", dev)
|
||||
time.Sleep(sleep)
|
||||
}
|
||||
})
|
||||
// 断线重连
|
||||
sleep := time.Duration(rand.Intn(kit.Int(redial["a"])*i+2)+kit.Int(redial["b"])) * time.Millisecond
|
||||
msg.Cost("order", i, "sleep", sleep, "reconnect", dev)
|
||||
time.Sleep(sleep)
|
||||
}
|
||||
})
|
||||
}
|
||||
func _space_handle(m *ice.Message, safe bool, send map[string]*ice.Message, c *websocket.Conn, name string) bool {
|
||||
for running := true; running; {
|
||||
if _, b, e := c.ReadMessage(); m.Warn(e, "space", name) {
|
||||
if _, b, e := c.ReadMessage(); m.Warn(e, SPACE, name) {
|
||||
break
|
||||
} else {
|
||||
socket, msg := c, m.Spawn(b)
|
||||
@ -90,7 +91,12 @@ func _space_handle(m *ice.Message, safe bool, send map[string]*ice.Message, c *w
|
||||
if msg.Optionv(ice.MSG_HANDLE, ice.TRUE); safe {
|
||||
msg.Go(func() { _space_exec(msg, source, target, c, name) })
|
||||
} else {
|
||||
msg.Push(kit.MDB_LINK, kit.MergePOD(_space_domain(msg), name))
|
||||
url := kit.ParseURL(_space_domain(msg))
|
||||
pod := url.Query().Get(ice.POD)
|
||||
if strings.HasPrefix(url.Path, "/chat/pod") {
|
||||
pod = strings.Split(url.Path, ice.PS)[3]
|
||||
}
|
||||
msg.Push(kit.MDB_LINK, kit.MergeURL2(url.String(), "/chat/pod/"+kit.Keys(pod, name), ice.POD, ""))
|
||||
_space_echo(msg, []string{}, kit.Revert(source)[1:], c, name)
|
||||
}
|
||||
|
||||
@ -120,7 +126,7 @@ func _space_handle(m *ice.Message, safe bool, send map[string]*ice.Message, c *w
|
||||
}
|
||||
|
||||
} else { // 接收响应
|
||||
m.Sleep("30ms")
|
||||
m.Sleep30ms()
|
||||
res.Back(msg)
|
||||
}
|
||||
}
|
||||
@ -243,7 +249,7 @@ func init() {
|
||||
m.Cmd(mdb.SEARCH, mdb.CREATE, SPACE, m.Prefix(SPACE))
|
||||
}},
|
||||
SPACE: {Name: "space name cmd auto", Help: "空间站", Action: ice.MergeAction(map[string]*ice.Action{
|
||||
tcp.DIAL: {Name: "dial dev name river", Help: "连接", Hand: func(m *ice.Message, arg ...string) {
|
||||
tcp.DIAL: {Name: "dial dev=ops name river", Help: "连接", Hand: func(m *ice.Message, arg ...string) {
|
||||
_space_dial(m, m.Option(ice.DEV), kit.Select(ice.Info.NodeName, m.Option(kit.MDB_NAME)))
|
||||
}},
|
||||
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
|
||||
@ -282,11 +288,11 @@ func init() {
|
||||
case CHROME: // 交互节点
|
||||
m.Go(func(msg *ice.Message) {
|
||||
switch m.Option("cmd") {
|
||||
case "pwd":
|
||||
case cli.PWD:
|
||||
link := kit.MergeURL(_space_domain(msg), "grant", name)
|
||||
msg.Sleep("100ms").Cmd(SPACE, name, "pwd", name, link, msg.Cmdx(cli.QRCODE, link))
|
||||
msg.Sleep("100ms").Cmd(SPACE, name, cli.PWD, name, link, msg.Cmdx(cli.QRCODE, link))
|
||||
default:
|
||||
msg.Sleep("100ms").Cmd(SPACE, name, "pwd", name)
|
||||
msg.Sleep("100ms").Cmd(SPACE, name, cli.PWD, name)
|
||||
}
|
||||
})
|
||||
case WORKER: // 工作节点
|
||||
|
@ -346,6 +346,7 @@ func init() {
|
||||
}, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) < 2 || arg[0] == "" || (len(arg) > 3 && arg[3] == "") {
|
||||
mdb.HashSelect(m, kit.Slice(arg, 0, 1)...)
|
||||
m.Sort("client.name")
|
||||
return
|
||||
}
|
||||
_spide_list(m, arg...)
|
||||
|
@ -68,6 +68,9 @@ func (web *Frame) Start(m *ice.Message, arg ...string) bool {
|
||||
}
|
||||
})
|
||||
|
||||
m.Event(SERVE_START)
|
||||
defer m.Event(SERVE_STOP)
|
||||
|
||||
web.m, web.Server = m, &http.Server{Handler: web}
|
||||
switch cb := m.Optionv(kit.Keycb(SERVE)).(type) {
|
||||
case func(http.Handler):
|
||||
@ -93,6 +96,10 @@ func (web *Frame) Close(m *ice.Message, arg ...string) bool {
|
||||
}
|
||||
|
||||
const WEB = "web"
|
||||
const (
|
||||
SERVE_START = "serve.start"
|
||||
SERVE_STOP = "serve.stop"
|
||||
)
|
||||
|
||||
var Index = &ice.Context{Name: WEB, Help: "网络模块"}
|
||||
|
||||
|
1
conf.go
1
conf.go
@ -35,6 +35,7 @@ const (
|
||||
OPS = "ops"
|
||||
ICE = "ice"
|
||||
|
||||
ENV = "env"
|
||||
RUN = "run"
|
||||
RES = "res"
|
||||
ERR = "err"
|
||||
|
@ -13,5 +13,6 @@ func init() {
|
||||
web.Index.Register(Index, &web.Frame{},
|
||||
HEADER, RIVER, STORM, ACTION, FOOTER,
|
||||
SCAN, PASTE, FILES, LOCATION,
|
||||
WEBSITE,
|
||||
)
|
||||
}
|
||||
|
@ -30,7 +30,6 @@ func init() {
|
||||
mdb.INSERT: {Name: "insert zone type=hi name=hello text=world", Help: "发送", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(ROOM), "", mdb.ZONE, m.Option(kit.MDB_ZONE), arg[2:])
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(ROOM), kit.KeyHash(m.Option(kit.MDB_ZONE)), mdb.HASH, ice.Option{mdb.FIELDS, "time,space"}).Table(func(index int, value map[string]string, head []string) {
|
||||
m.Debug("what %v", value)
|
||||
m.Cmdy(web.SPACE, value[web.SPACE], "toast", m.Option("text"), m.Option("name"))
|
||||
})
|
||||
}},
|
||||
|
@ -35,7 +35,6 @@ func _bench_http(m *ice.Message, target string, arg ...string) {
|
||||
m.Assert(err)
|
||||
list = append(list, req)
|
||||
}
|
||||
m.Debug("what %v", v)
|
||||
}
|
||||
|
||||
var body int64
|
||||
|
@ -141,7 +141,7 @@ func init() {
|
||||
))},
|
||||
GO: {Name: GO, Help: "后端", Value: kit.Data(PLUG, kit.Dict(
|
||||
SPLIT, kit.Dict("space", "\t ", "operator", "{[(&.,:;!|<>)]}"),
|
||||
PREFIX, kit.Dict("//", COMMENT, "/*", COMMENT, "* ", COMMENT),
|
||||
PREFIX, kit.Dict("// ", COMMENT, "/*", COMMENT, "* ", COMMENT),
|
||||
PREPARE, kit.Dict(
|
||||
KEYWORD, kit.Simple(
|
||||
"package", "import", "type", "struct", "interface", "const", "var", "func",
|
||||
|
@ -32,7 +32,7 @@ func init() {
|
||||
}, PlugAction())},
|
||||
}, Configs: map[string]*ice.Config{
|
||||
SHY: {Name: SHY, Help: "脚本", Value: kit.Data(PLUG, kit.Dict(
|
||||
PREFIX, kit.Dict("#", COMMENT),
|
||||
PREFIX, kit.Dict("# ", COMMENT),
|
||||
PREPARE, kit.Dict(
|
||||
KEYWORD, kit.Simple(
|
||||
"title",
|
||||
|
@ -50,9 +50,7 @@ func _plan_list(m *ice.Message, begin_time, end_time time.Time) *ice.Message {
|
||||
m.Push(key, value, fields, val)
|
||||
m.PushButton(_task_action(m, value[STATUS], mdb.PLUGIN))
|
||||
})
|
||||
m.Debug("what %v", 123)
|
||||
m.Cmd(mdb.SELECT, m.Prefix(TASK), "", mdb.ZONE, kit.MDB_FOREACH)
|
||||
m.Debug("what %v", 123)
|
||||
return m
|
||||
}
|
||||
|
||||
|
5
data.go
5
data.go
@ -22,6 +22,7 @@ func (m *Message) Config(key string, arg ...interface{}) string {
|
||||
m.Conf(m.PrefixKey(), kit.Keym(key), arg[0])
|
||||
}
|
||||
return m.Conf(m.PrefixKey(), kit.Keym(key))
|
||||
// return kit.Format(m.Configv(key, arg...))
|
||||
}
|
||||
func (m *Message) Configv(key string, arg ...interface{}) interface{} {
|
||||
if len(arg) > 0 {
|
||||
@ -29,6 +30,10 @@ func (m *Message) Configv(key string, arg ...interface{}) interface{} {
|
||||
}
|
||||
return m.Confv(m.PrefixKey(), kit.Keym(key))
|
||||
}
|
||||
func (m *Message) Configm(key string, arg ...interface{}) map[string]interface{} {
|
||||
v, _ := m.Configv(key, arg...).(map[string]interface{})
|
||||
return v
|
||||
}
|
||||
func (m *Message) ConfigSimple(key ...string) (list []string) {
|
||||
for _, k := range kit.Split(kit.Join(key)) {
|
||||
list = append(list, k, m.Config(k))
|
||||
|
3
init.go
3
init.go
@ -104,6 +104,9 @@ func Run(arg ...string) string {
|
||||
if len(arg) == 0 {
|
||||
arg = append(arg, HELP)
|
||||
}
|
||||
if os.Getenv("ctx_arg") != "" {
|
||||
arg = append(arg, kit.Split(os.Getenv("ctx_arg"))...)
|
||||
}
|
||||
|
||||
Index.root, Pulse.root = Index, Pulse
|
||||
Pulse.Option(CACHE_LIMIT, "10")
|
||||
|
16
misc.go
16
misc.go
@ -37,7 +37,14 @@ func (m *Message) CSV(text string, head ...string) *Message {
|
||||
}
|
||||
return m
|
||||
}
|
||||
func (m *Message) Split(str string, field string, sp string, nl string) *Message {
|
||||
func (m *Message) SplitIndex(str string, arg ...string) *Message {
|
||||
return m.Split(str, kit.Simple("index", arg)...)
|
||||
}
|
||||
func (m *Message) Split(str string, arg ...string) *Message {
|
||||
m.Set(MSG_APPEND).Set(MSG_RESULT)
|
||||
field := kit.Select("", arg, 0)
|
||||
sp := kit.Select(SP, arg, 1)
|
||||
nl := kit.Select(NL, arg, 2)
|
||||
fields, indexs := kit.Split(field, sp, sp, sp), []int{}
|
||||
for i, l := range kit.Split(str, nl, nl, nl) {
|
||||
if strings.HasPrefix(l, "Binary") {
|
||||
@ -58,9 +65,9 @@ func (m *Message) Split(str string, field string, sp string, nl string) *Message
|
||||
if len(indexs) > 0 { // 按位切分
|
||||
for i, v := range indexs {
|
||||
if i == len(indexs)-1 {
|
||||
m.Push(kit.Select(SP, fields, i), l[v:])
|
||||
m.Push(strings.TrimSpace(kit.Select(SP, fields, i)), strings.TrimSpace(l[v:]))
|
||||
} else {
|
||||
m.Push(kit.Select(SP, fields, i), l[v:indexs[i+1]])
|
||||
m.Push(strings.TrimSpace(kit.Select(SP, fields, i)), strings.TrimSpace(l[v:indexs[i+1]]))
|
||||
}
|
||||
}
|
||||
continue
|
||||
@ -113,6 +120,9 @@ func (m *Message) OptionUserWeb() *url.URL {
|
||||
func (m *Message) SetAppend(arg ...string) *Message {
|
||||
return m.Set(MSG_APPEND, arg...)
|
||||
}
|
||||
func (m *Message) SetResult(arg ...string) *Message {
|
||||
return m.Set(MSG_RESULT, arg...)
|
||||
}
|
||||
func (m *Message) RenameAppend(from, to string) {
|
||||
for i, v := range m.meta[MSG_APPEND] {
|
||||
if v == from {
|
||||
|
@ -83,7 +83,6 @@ func init() {
|
||||
QRCODE: {Name: "qrcode path scene", Help: "扫码", Hand: func(m *ice.Message, arg ...string) {
|
||||
msg := m.Cmd(web.SPIDE, MP, web.SPIDE_POST, "/wxa/getwxacodeunlimit?access_token="+m.Cmdx(LOGIN, TOKENS),
|
||||
m.OptionSimple("path,scene"))
|
||||
m.Debug("what %v", msg.FormatMeta())
|
||||
m.Echo(kit.Format(`<img src="data:image/png;base64,%s" title='%s'>`, base64.StdEncoding.EncodeToString([]byte(msg.Result())), "some"))
|
||||
m.ProcessInner()
|
||||
}},
|
||||
|
@ -96,7 +96,14 @@ func (m *Message) Upload(dir string) {
|
||||
m.Cmdy("spide", DEV, SAVE, p, "GET", m.MergeURL2(path.Join("/share/cache", up[0])))
|
||||
}
|
||||
}
|
||||
func (m *Message) Action(arg ...string) {
|
||||
func (m *Message) Action(arg ...interface{}) {
|
||||
for i, v := range arg {
|
||||
switch v.(type) {
|
||||
case string:
|
||||
default:
|
||||
arg[i] = kit.Format(v)
|
||||
}
|
||||
}
|
||||
m.Option(MSG_ACTION, kit.Format(arg))
|
||||
}
|
||||
func (m *Message) Status(arg ...interface{}) {
|
||||
|
@ -17,7 +17,10 @@ func Render(m *Message, cmd string, args ...interface{}) string {
|
||||
|
||||
switch arg := kit.Simple(args...); cmd {
|
||||
case RENDER_ANCHOR: // [name] link
|
||||
p := m.MergeURL2(kit.Select(arg[0], arg, 1))
|
||||
p := kit.Select(arg[0], arg, 1)
|
||||
if !strings.HasPrefix(p, "http") {
|
||||
p = m.MergeURL2(p)
|
||||
}
|
||||
return kit.Format(`<a href="%s" target="_blank">%s</a>`, p, arg[0])
|
||||
|
||||
case RENDER_BUTTON: // name...
|
||||
@ -169,7 +172,6 @@ func (m *Message) PushPodCmd(cmd string, arg ...string) {
|
||||
val[POD] = kit.Keys(value[kit.MDB_NAME], val[POD])
|
||||
m.Push("", val, head)
|
||||
})
|
||||
m.Debug(m.FormatMeta())
|
||||
}
|
||||
})
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user