1
0
mirror of https://shylinux.com/x/icebergs synced 2025-05-04 04:17:01 +08:00
This commit is contained in:
harveyshao 2022-01-22 23:37:19 +08:00
parent 439d60c124
commit d5c117738f
22 changed files with 122 additions and 102 deletions

View File

@ -44,7 +44,7 @@ func _user_search(m *ice.Message, name, text string) {
} }
func UserRoot(m *ice.Message, arg ...string) { // password username userrole func UserRoot(m *ice.Message, arg ...string) { // password username userrole
userrole := kit.Select(ice.Info.UserName, arg, 2) userrole := kit.Select(ROOT, arg, 2)
username := kit.Select(ice.Info.UserName, arg, 1) username := kit.Select(ice.Info.UserName, arg, 1)
m.Option(ice.MSG_USERROLE, userrole) m.Option(ice.MSG_USERROLE, userrole)
m.Option(ice.MSG_USERNAME, username) m.Option(ice.MSG_USERNAME, username)

View File

@ -63,8 +63,6 @@ func _runtime_init(m *ice.Message) {
NodeInfo(m, "worker", m.Conf(RUNTIME, kit.Keys(BOOT, PATHNAME))) NodeInfo(m, "worker", m.Conf(RUNTIME, kit.Keys(BOOT, PATHNAME)))
runtime.GOMAXPROCS(kit.Int(kit.Select("1", m.Conf(RUNTIME, kit.Keys(HOST, "GOMAXPROCS"))))) runtime.GOMAXPROCS(kit.Int(kit.Select("1", m.Conf(RUNTIME, kit.Keys(HOST, "GOMAXPROCS")))))
m.Debug("what home %v", os.Getenv(HOME))
m.Debug("what path %v", os.Getenv(PATH))
} }
func _runtime_hostinfo(m *ice.Message) { func _runtime_hostinfo(m *ice.Message) {
if f, e := os.Open("/proc/cpuinfo"); e == nil { if f, e := os.Open("/proc/cpuinfo"); e == nil {

View File

@ -3,6 +3,7 @@ package cli
import ( import (
"bytes" "bytes"
"io" "io"
"io/ioutil"
"os" "os"
"os/exec" "os/exec"
"path" "path"
@ -33,12 +34,23 @@ func _system_cmd(m *ice.Message, arg ...string) *exec.Cmd {
for _, p := range strings.Split(env[i+1], ice.DF) { for _, p := range strings.Split(env[i+1], ice.DF) {
if _, err := os.Stat(path.Join(p, arg[0])); err == nil { if _, err := os.Stat(path.Join(p, arg[0])); err == nil {
cmd.Path = path.Join(p, arg[0]) cmd.Path = path.Join(p, arg[0])
m.Debug("what %v", cmd.Path)
break break
} }
} }
} }
} }
// 定制目录
if buf, err := ioutil.ReadFile(ice.ETC_PATH); err == nil && len(buf) > 0 {
for _, p := range strings.Split(string(buf), ice.NL) {
if _, e := os.Stat(path.Join(p, arg[0])); e == nil {
cmd.Path = kit.Path(path.Join(p, arg[0]))
break
}
}
}
m.Debug("cmd: %v", cmd.Path)
if len(cmd.Env) > 0 { if len(cmd.Env) > 0 {
m.Log_EXPORT(CMD_ENV, cmd.Env) m.Log_EXPORT(CMD_ENV, cmd.Env)
} }

View File

@ -83,9 +83,7 @@ func init() {
m.Cmd(mdb.SEARCH, mdb.CREATE, m.CommandKey(), m.PrefixKey()) m.Cmd(mdb.SEARCH, mdb.CREATE, m.CommandKey(), m.PrefixKey())
}}, }},
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
if arg[0] == COMMAND {
_command_search(m, arg[0], kit.Select("", arg, 1), kit.Select("", arg, 2)) _command_search(m, arg[0], kit.Select("", arg, 1), kit.Select("", arg, 2))
}
}}, }},
INDEX: {Name: "index", Help: "索引", Hand: func(m *ice.Message, arg ...string) { INDEX: {Name: "index", Help: "索引", Hand: func(m *ice.Message, arg ...string) {
}}, }},

View File

@ -359,11 +359,11 @@ func (mat *Matrix) show(m *ice.Message) {
m.Status(NLANG, mat.nlang, NCELL, mat.ncell, NPAGE, len(mat.page), NHASH, len(mat.hash)) m.Status(NLANG, mat.nlang, NCELL, mat.ncell, NPAGE, len(mat.page), NHASH, len(mat.hash))
} }
func _lex_load(m *ice.Message) { func _lex_load(m *ice.Message) {
m.Richs(m.Prefix(MATRIX), "", mdb.FOREACH, func(key string, value map[string]interface{}) { m.Richs(m.PrefixKey(), "", mdb.FOREACH, func(key string, value map[string]interface{}) {
value = kit.GetMeta(value) value = kit.GetMeta(value)
mat := NewMatrix(m, kit.Int(kit.Select("32", value[NLANG])), kit.Int(kit.Select("256", value[NCELL]))) mat := NewMatrix(m, kit.Int(kit.Select("32", value[NLANG])), kit.Int(kit.Select("256", value[NCELL])))
m.Grows(m.Prefix(MATRIX), kit.Keys(mdb.HASH, key), "", "", func(index int, value map[string]interface{}) { m.Grows(m.PrefixKey(), kit.Keys(mdb.HASH, key), "", "", func(index int, value map[string]interface{}) {
mat.Train(m, kit.Format(value[NPAGE]), kit.Format(value[NHASH]), kit.Format(value[mdb.TEXT])) mat.Train(m, kit.Format(value[NPAGE]), kit.Format(value[NHASH]), kit.Format(value[mdb.TEXT]))
}) })
value[MATRIX] = mat value[MATRIX] = mat
@ -394,7 +394,7 @@ func init() {
}}, }},
mdb.CREATE: {Name: "create nlang=32 ncell=128", Help: "创建", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create nlang=32 ncell=128", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
mat := NewMatrix(m, kit.Int(kit.Select("32", m.Option(NLANG))), kit.Int(kit.Select("128", m.Option(NCELL)))) mat := NewMatrix(m, kit.Int(kit.Select("32", m.Option(NLANG))), kit.Int(kit.Select("128", m.Option(NCELL))))
h := m.Rich(m.Prefix(MATRIX), "", kit.Data(mdb.TIME, m.Time(), MATRIX, mat, NLANG, mat.nlang, NCELL, mat.ncell)) h := m.Rich(m.PrefixKey(), "", kit.Data(mdb.TIME, m.Time(), MATRIX, mat, NLANG, mat.nlang, NCELL, mat.ncell))
switch cb := m.OptionCB(MATRIX).(type) { switch cb := m.OptionCB(MATRIX).(type) {
case func(string, *Matrix): case func(string, *Matrix):
cb(h, mat) cb(h, mat)
@ -402,12 +402,12 @@ func init() {
m.Echo(h) m.Echo(h)
}}, }},
mdb.INSERT: {Name: "insert hash npage=num nhash=num text=123", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.INSERT: {Name: "insert hash npage=num nhash=num text=123", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Richs(m.Prefix(MATRIX), "", m.Option(mdb.HASH), func(key string, value map[string]interface{}) { m.Richs(m.PrefixKey(), "", m.Option(mdb.HASH), func(key string, value map[string]interface{}) {
value = kit.GetMeta(value) value = kit.GetMeta(value)
mat, _ := value[MATRIX].(*Matrix) mat, _ := value[MATRIX].(*Matrix)
m.Echo("%d", mat.Train(m, m.Option(NPAGE), m.Option(NHASH), m.Option(mdb.TEXT))) m.Echo("%d", mat.Train(m, m.Option(NPAGE), m.Option(NHASH), m.Option(mdb.TEXT)))
m.Grow(m.Prefix(MATRIX), kit.Keys(mdb.HASH, key), kit.Dict( m.Grow(m.PrefixKey(), kit.Keys(mdb.HASH, key), kit.Dict(
mdb.TIME, m.Time(), NPAGE, m.Option(NPAGE), NHASH, m.Option(NHASH), mdb.TEXT, m.Option(mdb.TEXT), mdb.TIME, m.Time(), NPAGE, m.Option(NPAGE), NHASH, m.Option(NHASH), mdb.TEXT, m.Option(mdb.TEXT),
)) ))
@ -416,10 +416,10 @@ func init() {
}) })
}}, }},
mdb.REMOVE: {Name: "create", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.REMOVE: {Name: "create", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.DELETE, m.Prefix(MATRIX), "", mdb.HASH, mdb.HASH, m.Option(mdb.HASH)) m.Cmdy(mdb.DELETE, m.PrefixKey(), "", mdb.HASH, mdb.HASH, m.Option(mdb.HASH))
}}, }},
PARSE: {Name: "parse hash npage text=123", Help: "解析", Hand: func(m *ice.Message, arg ...string) { PARSE: {Name: "parse hash npage text=123", Help: "解析", Hand: func(m *ice.Message, arg ...string) {
m.Richs(m.Prefix(MATRIX), "", m.Option(mdb.HASH), func(key string, value map[string]interface{}) { m.Richs(m.PrefixKey(), "", m.Option(mdb.HASH), func(key string, value map[string]interface{}) {
value = kit.GetMeta(value) value = kit.GetMeta(value)
mat, _ := value[MATRIX].(*Matrix) mat, _ := value[MATRIX].(*Matrix)
@ -432,7 +432,7 @@ func init() {
m.ProcessInner() m.ProcessInner()
}}, }},
"show": {Name: "show", Help: "矩阵", Hand: func(m *ice.Message, arg ...string) { "show": {Name: "show", Help: "矩阵", Hand: func(m *ice.Message, arg ...string) {
m.Richs(m.Prefix(MATRIX), "", kit.Select(m.Option(mdb.HASH), arg, 0), func(key string, value map[string]interface{}) { m.Richs(m.PrefixKey(), "", kit.Select(m.Option(mdb.HASH), arg, 0), func(key string, value map[string]interface{}) {
value = kit.GetMeta(value) value = kit.GetMeta(value)
value[MATRIX].(*Matrix).show(m) value[MATRIX].(*Matrix).show(m)
}) })
@ -441,19 +441,19 @@ func init() {
}, Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
if m.Action(mdb.CREATE); len(arg) == 0 { // 矩阵列表 if m.Action(mdb.CREATE); len(arg) == 0 { // 矩阵列表
m.Fields(len(arg), "time,hash,npage,nhash") m.Fields(len(arg), "time,hash,npage,nhash")
m.Cmdy(mdb.SELECT, m.Prefix(MATRIX), "", mdb.HASH) m.Cmdy(mdb.SELECT, m.PrefixKey(), "", mdb.HASH)
m.PushAction(mdb.INSERT, "show", mdb.REMOVE) m.PushAction(mdb.INSERT, "show", mdb.REMOVE)
return return
} }
if m.Action(mdb.INSERT, "show"); len(arg) == 1 { // 词法列表 if m.Action(mdb.INSERT, "show"); len(arg) == 1 { // 词法列表
m.Fields(len(arg[1:]), "time,npage,nhash,text") m.Fields(len(arg[1:]), "time,npage,nhash,text")
m.Cmdy(mdb.SELECT, m.Prefix(MATRIX), kit.Keys(mdb.HASH, arg[0]), mdb.LIST) m.Cmdy(mdb.SELECT, m.PrefixKey(), kit.Keys(mdb.HASH, arg[0]), mdb.LIST)
m.PushAction(PARSE) m.PushAction(PARSE)
return return
} }
m.Richs(m.Prefix(MATRIX), "", arg[0], func(key string, value map[string]interface{}) { m.Richs(m.PrefixKey(), "", arg[0], func(key string, value map[string]interface{}) {
value = kit.GetMeta(value) value = kit.GetMeta(value)
mat, _ := value[MATRIX].(*Matrix) mat, _ := value[MATRIX].(*Matrix)

View File

@ -241,7 +241,7 @@ func init() {
LOGIN, ice.TRUE, SHARE, ice.TRUE, SPACE, ice.TRUE, LOGIN, ice.TRUE, SHARE, ice.TRUE, SPACE, ice.TRUE,
ice.VOLCANOS, ice.TRUE, ice.PUBLISH, ice.TRUE, ice.VOLCANOS, ice.TRUE, ice.PUBLISH, ice.TRUE,
ice.INTSHELL, ice.TRUE, ice.REQUIRE, ice.TRUE, ice.INTSHELL, ice.TRUE, ice.REQUIRE, ice.TRUE,
ice.HELP, ice.TRUE, "cmd", ice.TRUE, ice.HELP, ice.TRUE,
), LOGHEADERS, ice.FALSE, ), LOGHEADERS, ice.FALSE,
DOMAIN, "", nfs.PATH, kit.Dict(ice.PS, ice.USR_VOLCANOS), DOMAIN, "", nfs.PATH, kit.Dict(ice.PS, ice.USR_VOLCANOS),

View File

@ -310,11 +310,11 @@ func (mat *Matrix) show(m *ice.Message) {
} }
func _yac_load(m *ice.Message) { func _yac_load(m *ice.Message) {
m.Richs(m.Prefix(MATRIX), "", mdb.FOREACH, func(key string, value map[string]interface{}) { m.Richs(m.PrefixKey(), "", mdb.FOREACH, func(key string, value map[string]interface{}) {
value = kit.GetMeta(value) value = kit.GetMeta(value)
mat := NewMatrix(m, kit.Int(kit.Select("32", value[NLANG])), kit.Int(kit.Select("32", value[NCELL]))) mat := NewMatrix(m, kit.Int(kit.Select("32", value[NLANG])), kit.Int(kit.Select("32", value[NCELL])))
m.Grows(m.Prefix(MATRIX), kit.Keys(mdb.HASH, key), "", "", func(index int, value map[string]interface{}) { m.Grows(m.PrefixKey(), kit.Keys(mdb.HASH, key), "", "", func(index int, value map[string]interface{}) {
page := mat.index(m, NPAGE, kit.Format(value[NPAGE])) page := mat.index(m, NPAGE, kit.Format(value[NPAGE]))
hash := mat.index(m, NHASH, kit.Format(value[NHASH])) hash := mat.index(m, NHASH, kit.Format(value[NHASH]))
if mat.mat[page] == nil { if mat.mat[page] == nil {
@ -351,7 +351,7 @@ func init() {
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { _yac_load(m) }}, ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { _yac_load(m) }},
mdb.CREATE: {Name: "create name=shy nlang=32 ncell=32", Help: "创建", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create name=shy nlang=32 ncell=32", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
mat := NewMatrix(m, kit.Int(kit.Select("32", m.Option(NLANG))), kit.Int(kit.Select("32", m.Option(NCELL)))) mat := NewMatrix(m, kit.Int(kit.Select("32", m.Option(NLANG))), kit.Int(kit.Select("32", m.Option(NCELL))))
h := m.Rich(m.Prefix(MATRIX), "", kit.Data( h := m.Rich(m.PrefixKey(), "", kit.Data(
mdb.TIME, m.Time(), mdb.NAME, m.Option(mdb.NAME), mdb.TIME, m.Time(), mdb.NAME, m.Option(mdb.NAME),
MATRIX, mat, NLANG, mat.nlang, NCELL, mat.ncell, MATRIX, mat, NLANG, mat.nlang, NCELL, mat.ncell,
)) ))
@ -362,7 +362,7 @@ func init() {
m.Echo(h) m.Echo(h)
}}, }},
mdb.INSERT: {Name: "insert name=shy npage=num nhash=num text=123", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.INSERT: {Name: "insert name=shy npage=num nhash=num text=123", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Richs(m.Prefix(MATRIX), "", m.Option(mdb.NAME), func(key string, value map[string]interface{}) { m.Richs(m.PrefixKey(), "", m.Option(mdb.NAME), func(key string, value map[string]interface{}) {
value = kit.GetMeta(value) value = kit.GetMeta(value)
mat, _ := value[MATRIX].(*Matrix) mat, _ := value[MATRIX].(*Matrix)
@ -376,7 +376,7 @@ func init() {
m.Option(mdb.TEXT, strings.ReplaceAll(m.Option(mdb.TEXT), "\\", "\\\\")) m.Option(mdb.TEXT, strings.ReplaceAll(m.Option(mdb.TEXT), "\\", "\\\\"))
text := kit.Split(m.Option(mdb.TEXT), " ", " ", " ") text := kit.Split(m.Option(mdb.TEXT), " ", " ", " ")
mat.train(m, page, hash, text, 1) mat.train(m, page, hash, text, 1)
m.Grow(m.Prefix(MATRIX), kit.Keys(mdb.HASH, key), kit.Dict( m.Grow(m.PrefixKey(), kit.Keys(mdb.HASH, key), kit.Dict(
mdb.TIME, m.Time(), NPAGE, m.Option(NPAGE), NHASH, m.Option(NHASH), mdb.TEXT, text, mdb.TIME, m.Time(), NPAGE, m.Option(NPAGE), NHASH, m.Option(NHASH), mdb.TEXT, text,
)) ))
@ -385,10 +385,10 @@ func init() {
}) })
}}, }},
mdb.REMOVE: {Name: "create", Help: "删除", Hand: func(m *ice.Message, arg ...string) { mdb.REMOVE: {Name: "create", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.DELETE, m.Prefix(MATRIX), "", mdb.HASH, mdb.NAME, m.Option(mdb.NAME)) m.Cmdy(mdb.DELETE, m.PrefixKey(), "", mdb.HASH, mdb.NAME, m.Option(mdb.NAME))
}}, }},
PARSE: {Name: "parse name npage text=123", Help: "解析", Hand: func(m *ice.Message, arg ...string) { PARSE: {Name: "parse name npage text=123", Help: "解析", Hand: func(m *ice.Message, arg ...string) {
m.Richs(m.Prefix(MATRIX), "", m.Option(mdb.NAME), func(key string, value map[string]interface{}) { m.Richs(m.PrefixKey(), "", m.Option(mdb.NAME), func(key string, value map[string]interface{}) {
value = kit.GetMeta(value) value = kit.GetMeta(value)
mat, _ := value[MATRIX].(*Matrix) mat, _ := value[MATRIX].(*Matrix)
@ -409,7 +409,7 @@ func init() {
m.ProcessInner() m.ProcessInner()
}}, }},
"show": {Name: "show", Help: "矩阵", Hand: func(m *ice.Message, arg ...string) { "show": {Name: "show", Help: "矩阵", Hand: func(m *ice.Message, arg ...string) {
m.Richs(m.Prefix(MATRIX), "", kit.Select(m.Option(mdb.NAME), arg, 0), func(key string, value map[string]interface{}) { m.Richs(m.PrefixKey(), "", kit.Select(m.Option(mdb.NAME), arg, 0), func(key string, value map[string]interface{}) {
value = kit.GetMeta(value) value = kit.GetMeta(value)
value[MATRIX].(*Matrix).show(m) value[MATRIX].(*Matrix).show(m)
}) })
@ -419,20 +419,20 @@ func init() {
m.Option(ice.CACHE_LIMIT, -1) m.Option(ice.CACHE_LIMIT, -1)
if m.Action(mdb.CREATE); len(arg) == 0 { // 矩阵列表 if m.Action(mdb.CREATE); len(arg) == 0 { // 矩阵列表
m.Fields(len(arg), "time,name,npage,nhash") m.Fields(len(arg), "time,name,npage,nhash")
m.Cmdy(mdb.SELECT, m.Prefix(MATRIX), "", mdb.HASH) m.Cmdy(mdb.SELECT, m.PrefixKey(), "", mdb.HASH)
m.PushAction(mdb.INSERT, "show", mdb.REMOVE) m.PushAction(mdb.INSERT, "show", mdb.REMOVE)
return return
} }
if m.Action(mdb.INSERT, "show"); len(arg) == 1 { // 词法列表 if m.Action(mdb.INSERT, "show"); len(arg) == 1 { // 词法列表
m.Fields(len(arg[1:]), "time,npage,nhash,text") m.Fields(len(arg[1:]), "time,npage,nhash,text")
m.Cmdy(mdb.SELECT, m.Prefix(MATRIX), kit.Keys(mdb.HASH, kit.Hashs(arg[0])), mdb.LIST) m.Cmdy(mdb.SELECT, m.PrefixKey(), kit.Keys(mdb.HASH, kit.Hashs(arg[0])), mdb.LIST)
m.PushAction(PARSE) m.PushAction(PARSE)
return return
} }
// 词法矩阵 // 词法矩阵
m.Richs(m.Prefix(MATRIX), "", arg[0], func(key string, value map[string]interface{}) { m.Richs(m.PrefixKey(), "", arg[0], func(key string, value map[string]interface{}) {
value = kit.GetMeta(value) value = kit.GetMeta(value)
value[MATRIX].(*Matrix).show(m) value[MATRIX].(*Matrix).show(m)
}) })

View File

@ -23,7 +23,7 @@ func init() {
msg := m.Cmdy(web.CACHE, web.UPLOAD) msg := m.Cmdy(web.CACHE, web.UPLOAD)
up = kit.Simple(msg.Append(mdb.HASH), msg.Append(mdb.NAME), msg.Append(nfs.SIZE)) up = kit.Simple(msg.Append(mdb.HASH), msg.Append(mdb.NAME), msg.Append(nfs.SIZE))
} }
m.Cmdy(mdb.INSERT, m.Prefix(FILES), "", mdb.HASH, mdb.TYPE, kit.Ext(up[1]), mdb.NAME, up[1], nfs.SIZE, up[2], mdb.DATA, up[0]) m.Cmdy(mdb.INSERT, m.PrefixKey(), "", mdb.HASH, mdb.TYPE, kit.Ext(up[1]), mdb.NAME, up[1], nfs.SIZE, up[2], mdb.DATA, up[0])
}}, }},
}, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
mdb.HashSelect(m, arg...) mdb.HashSelect(m, arg...)

View File

@ -25,11 +25,11 @@ func init() {
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
ROOM: {Name: "room zone id auto", Help: "room", Action: ice.MergeAction(map[string]*ice.Action{ ROOM: {Name: "room zone id auto", Help: "room", Action: ice.MergeAction(map[string]*ice.Action{
mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INSERT, m.Prefix(ROOM), "", mdb.HASH, m.OptionSimple(mdb.ZONE)) m.Cmdy(mdb.INSERT, m.PrefixKey(), "", mdb.HASH, m.OptionSimple(mdb.ZONE))
}}, }},
mdb.INSERT: {Name: "insert zone type=hi name=hello text=world", Help: "发送", Hand: func(m *ice.Message, arg ...string) { 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(mdb.ZONE), arg[2:]) m.Cmdy(mdb.INSERT, m.PrefixKey(), "", mdb.ZONE, m.Option(mdb.ZONE), arg[2:])
m.Cmdy(mdb.SELECT, m.Prefix(ROOM), kit.KeyHash(m.Option(mdb.ZONE)), mdb.HASH, ice.Option{"fields", "time,space"}).Table(func(index int, value map[string]string, head []string) { m.Cmdy(mdb.SELECT, m.PrefixKey(), kit.KeyHash(m.Option(mdb.ZONE)), mdb.HASH, ice.Option{"fields", "time,space"}).Table(func(index int, value map[string]string, head []string) {
m.Cmdy(web.SPACE, value[web.SPACE], "toast", m.Option("text"), m.Option("name")) m.Cmdy(web.SPACE, value[web.SPACE], "toast", m.Option("text"), m.Option("name"))
}) })
}}, }},

View File

@ -50,20 +50,15 @@ const C = "c"
func init() { func init() {
Index.Register(&ice.Context{Name: C, Help: "系统", Commands: map[string]*ice.Command{ Index.Register(&ice.Context{Name: C, Help: "系统", Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { C: {Name: C, Help: "系统", Action: ice.MergeAction(map[string]*ice.Action{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
for _, cmd := range []string{mdb.SEARCH, mdb.ENGINE, mdb.RENDER, mdb.PLUGIN} { for _, cmd := range []string{mdb.SEARCH, mdb.ENGINE, mdb.RENDER, mdb.PLUGIN} {
for _, k := range []string{H, C, CC} { for _, k := range []string{H, C, CC} {
m.Cmd(cmd, mdb.CREATE, k, m.Prefix(C)) m.Cmd(cmd, mdb.CREATE, k, m.PrefixKey())
} }
} }
for _, cmd := range []string{mdb.SEARCH, mdb.RENDER, mdb.PLUGIN} { LoadPlug(m, C)
for _, k := range []string{MAN1, MAN2, MAN3, MAN8} {
m.Cmd(cmd, mdb.CREATE, k, m.Prefix(MAN))
}
}
LoadPlug(m, C, MAN)
}}, }},
C: {Name: C, Help: "系统", Action: ice.MergeAction(map[string]*ice.Action{
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
if arg[0] == mdb.FOREACH { if arg[0] == mdb.FOREACH {
return return
@ -86,6 +81,14 @@ func init() {
}}, }},
}, PlugAction())}, }, PlugAction())},
MAN: {Name: MAN, Help: "手册", Action: ice.MergeAction(map[string]*ice.Action{ MAN: {Name: MAN, Help: "手册", Action: ice.MergeAction(map[string]*ice.Action{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
for _, cmd := range []string{mdb.SEARCH, mdb.RENDER, mdb.PLUGIN} {
for _, k := range []string{MAN1, MAN2, MAN3, MAN8} {
m.Cmd(cmd, mdb.CREATE, k, m.PrefixKey())
}
}
LoadPlug(m, MAN)
}},
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
if arg[0] == mdb.FOREACH { if arg[0] == mdb.FOREACH {
return return

View File

@ -57,9 +57,6 @@ func init() {
kit.Keys(kit.Select(ice.ICE, kit.TrimExt(main), main != ice.SRC_MAIN_GO), goos, arch)) kit.Keys(kit.Select(ice.ICE, kit.TrimExt(main), main != ice.SRC_MAIN_GO), goos, arch))
} }
m.Debug("what home %v", os.Getenv(cli.HOME))
m.Debug("what path %v", os.Getenv(cli.PATH))
// 执行编译 // 执行编译
_autogen_version(m.Spawn()) _autogen_version(m.Spawn())
m.Optionv(cli.CMD_ENV, kit.Simple(m.Configv(cli.ENV), cli.HOME, os.Getenv(cli.HOME), cli.PATH, os.Getenv(cli.PATH), cli.GOOS, goos, cli.GOARCH, arch)) m.Optionv(cli.CMD_ENV, kit.Simple(m.Configv(cli.ENV), cli.HOME, os.Getenv(cli.HOME), cli.PATH, os.Getenv(cli.PATH), cli.GOOS, goos, cli.GOARCH, arch))

View File

@ -21,16 +21,16 @@ const VUE = "vue"
func init() { func init() {
Index.Register(&ice.Context{Name: JS, Help: "前端", Commands: map[string]*ice.Command{ Index.Register(&ice.Context{Name: JS, Help: "前端", Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { JS: {Name: "js", Help: "前端", Action: ice.MergeAction(map[string]*ice.Action{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
for _, cmd := range []string{mdb.SEARCH, mdb.ENGINE, mdb.RENDER, mdb.PLUGIN} { for _, cmd := range []string{mdb.SEARCH, mdb.ENGINE, mdb.RENDER, mdb.PLUGIN} {
m.Cmd(cmd, mdb.CREATE, JSON, m.Prefix(JS)) m.Cmd(cmd, mdb.CREATE, JSON, m.PrefixKey())
m.Cmd(cmd, mdb.CREATE, VUE, m.Prefix(JS)) m.Cmd(cmd, mdb.CREATE, VUE, m.PrefixKey())
m.Cmd(cmd, mdb.CREATE, JS, m.Prefix(JS)) m.Cmd(cmd, mdb.CREATE, JS, m.PrefixKey())
m.Cmd(cmd, mdb.CREATE, TS, m.Prefix(JS)) m.Cmd(cmd, mdb.CREATE, TS, m.PrefixKey())
} }
LoadPlug(m, JS) LoadPlug(m, JS)
}}, }},
JS: {Name: "js", Help: "前端", Action: ice.MergeAction(map[string]*ice.Action{
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
if arg[0] == mdb.FOREACH { if arg[0] == mdb.FOREACH {
return return

View File

@ -17,10 +17,10 @@ func init() {
PYTHON, "python", "pip", "pip", PYTHON, "python", "pip", "pip",
)}, )},
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmd(mdb.ENGINE, mdb.CREATE, mdb.TYPE, "py", mdb.NAME, m.Prefix(PYTHON))
}},
PYTHON: {Name: "python path auto order build download", Help: "脚本命令", Action: ice.MergeAction(map[string]*ice.Action{ PYTHON: {Name: "python path auto order build download", Help: "脚本命令", Action: ice.MergeAction(map[string]*ice.Action{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
m.Cmd(mdb.ENGINE, mdb.CREATE, mdb.TYPE, "py", mdb.NAME, m.PrefixKey())
}},
ice.RUN: {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) { ice.RUN: {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(cli.SYSTEM, m.Config(PYTHON), arg) m.Cmdy(cli.SYSTEM, m.Config(PYTHON), arg)
}}, }},

View File

@ -11,13 +11,13 @@ const SH = "sh"
func init() { func init() {
Index.Register(&ice.Context{Name: SH, Help: "命令", Commands: map[string]*ice.Command{ Index.Register(&ice.Context{Name: SH, Help: "命令", Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { SH: {Name: SH, Help: "命令", Action: ice.MergeAction(map[string]*ice.Action{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
for _, cmd := range []string{mdb.SEARCH, mdb.ENGINE, mdb.RENDER, mdb.PLUGIN} { for _, cmd := range []string{mdb.SEARCH, mdb.ENGINE, mdb.RENDER, mdb.PLUGIN} {
m.Cmd(cmd, mdb.CREATE, SH, m.Prefix(SH)) m.Cmd(cmd, mdb.CREATE, SH, m.PrefixKey())
} }
LoadPlug(m, SH) LoadPlug(m, SH)
}}, }},
SH: {Name: SH, Help: "命令", Action: ice.MergeAction(map[string]*ice.Action{
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
if arg[0] == mdb.FOREACH { if arg[0] == mdb.FOREACH {
return return

View File

@ -13,13 +13,13 @@ const SHY = "shy"
func init() { func init() {
Index.Register(&ice.Context{Name: SHY, Help: "脚本", Commands: map[string]*ice.Command{ Index.Register(&ice.Context{Name: SHY, Help: "脚本", Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { SHY: {Name: SHY, Help: "脚本", Action: ice.MergeAction(map[string]*ice.Action{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
for _, cmd := range []string{mdb.SEARCH, mdb.ENGINE, mdb.RENDER, mdb.PLUGIN} { for _, cmd := range []string{mdb.SEARCH, mdb.ENGINE, mdb.RENDER, mdb.PLUGIN} {
m.Cmd(cmd, mdb.CREATE, SHY, m.Prefix(SHY)) m.Cmd(cmd, mdb.CREATE, SHY, m.PrefixKey())
} }
LoadPlug(m, SHY) LoadPlug(m, SHY)
}}, }},
SHY: {Name: SHY, Help: "脚本", Action: ice.MergeAction(map[string]*ice.Action{
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
if arg[0] == SHY { if arg[0] == SHY {
_go_find(m, kit.Select(MAIN, arg, 1), arg[2]) _go_find(m, kit.Select(MAIN, arg, 1), arg[2])

View File

@ -30,17 +30,17 @@ func _asset_check(m *ice.Message, account string) {
m.OptionCB(mdb.SELECT, func(key string, value map[string]interface{}) { m.OptionCB(mdb.SELECT, func(key string, value map[string]interface{}) {
amount += kit.Int(kit.Value(value, AMOUNT)) amount += kit.Int(kit.Value(value, AMOUNT))
}) })
m.Cmd(mdb.SELECT, m.Prefix(ASSET), "", mdb.ZONE, account, ice.OptionFields(m.Config(mdb.FIELD))) m.Cmd(mdb.SELECT, m.PrefixKey(), "", mdb.ZONE, account, ice.OptionFields(m.Config(mdb.FIELD)))
m.Cmdy(mdb.MODIFY, m.Prefix(ASSET), "", mdb.HASH, ACCOUNT, account, AMOUNT, amount) m.Cmdy(mdb.MODIFY, m.PrefixKey(), "", mdb.HASH, ACCOUNT, account, AMOUNT, amount)
} }
func _asset_insert(m *ice.Message, account string, arg ...string) { func _asset_insert(m *ice.Message, account string, arg ...string) {
m.Cmdy(mdb.INSERT, m.Prefix(ASSET), "", mdb.HASH, ACCOUNT, account) m.Cmdy(mdb.INSERT, m.PrefixKey(), "", mdb.HASH, ACCOUNT, account)
m.Cmdy(mdb.INSERT, m.Prefix(ASSET), "", mdb.ZONE, account, arg) m.Cmdy(mdb.INSERT, m.PrefixKey(), "", mdb.ZONE, account, arg)
m.OptionFields("time,account,amount,count") m.OptionFields("time,account,amount,count")
amount := kit.Int(m.Cmd(mdb.SELECT, m.Prefix(ASSET), "", mdb.HASH, ACCOUNT, account).Append(AMOUNT)) amount := kit.Int(m.Cmd(mdb.SELECT, m.PrefixKey(), "", mdb.HASH, ACCOUNT, account).Append(AMOUNT))
amount += kit.Int(_sub_value(m, AMOUNT, arg...)) amount += kit.Int(_sub_value(m, AMOUNT, arg...))
m.Cmdy(mdb.MODIFY, m.Prefix(ASSET), "", mdb.HASH, ACCOUNT, account, AMOUNT, amount) m.Cmdy(mdb.MODIFY, m.PrefixKey(), "", mdb.HASH, ACCOUNT, account, AMOUNT, amount)
} }
const ( const (

View File

@ -63,8 +63,8 @@ func init() {
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
TASK: {Name: "task zone id auto insert export import", Help: "任务", Action: ice.MergeAction(map[string]*ice.Action{ TASK: {Name: "task zone id auto insert export import", Help: "任务", Action: ice.MergeAction(map[string]*ice.Action{
mdb.INSERT: {Name: "insert zone type=once,step,week name text begin_time@date close_time@date", Help: "添加", Hand: func(m *ice.Message, arg ...string) { mdb.INSERT: {Name: "insert zone type=once,step,week name text begin_time@date close_time@date", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INSERT, m.Prefix(TASK), "", mdb.HASH, m.OptionSimple(mdb.ZONE)) m.Cmdy(mdb.INSERT, m.PrefixKey(), "", mdb.HASH, m.OptionSimple(mdb.ZONE))
m.Cmdy(mdb.INSERT, m.Prefix(TASK), "", mdb.ZONE, m.Option(mdb.ZONE), m.Cmdy(mdb.INSERT, m.PrefixKey(), "", mdb.ZONE, m.Option(mdb.ZONE),
BEGIN_TIME, m.Time(), CLOSE_TIME, m.Time("30m"), BEGIN_TIME, m.Time(), CLOSE_TIME, m.Time("30m"),
STATUS, PREPARE, LEVEL, 3, SCORE, 3, arg) STATUS, PREPARE, LEVEL, 3, SCORE, 3, arg)
m.ProcessRefresh30ms() m.ProcessRefresh30ms()
@ -78,12 +78,12 @@ func init() {
}}, }},
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
m.OptionFields(mdb.ZONE, "time,id,type,name,text,level,status,score,begin_time,close_time") m.OptionFields(mdb.ZONE, "time,id,type,name,text,level,status,score,begin_time,close_time")
m.Cmdy(mdb.EXPORT, m.Prefix(TASK), "", mdb.ZONE) m.Cmdy(mdb.EXPORT, m.PrefixKey(), "", mdb.ZONE)
m.ProcessRefresh30ms() m.ProcessRefresh30ms()
}}, }},
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
m.OptionFields(mdb.ZONE) m.OptionFields(mdb.ZONE)
m.Cmdy(mdb.IMPORT, m.Prefix(TASK), "", mdb.ZONE) m.Cmdy(mdb.IMPORT, m.PrefixKey(), "", mdb.ZONE)
m.ProcessRefresh30ms() m.ProcessRefresh30ms()
}}, }},

View File

@ -19,7 +19,7 @@ func init() {
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
DRAW: {Name: "draw path=src/main.svg pid refresh:button=auto edit save actions", Help: "思维导图", Meta: kit.Dict(ice.DisplayLocal("")), Action: ice.MergeAction(map[string]*ice.Action{ DRAW: {Name: "draw path=src/main.svg pid refresh:button=auto edit save actions", Help: "思维导图", Meta: kit.Dict(ice.DisplayLocal("")), Action: ice.MergeAction(map[string]*ice.Action{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
m.Cmd(mdb.RENDER, mdb.CREATE, mdb.TYPE, "svg", mdb.NAME, m.Prefix(DRAW)) m.Cmd(mdb.RENDER, mdb.CREATE, mdb.TYPE, "svg", mdb.NAME, m.PrefixKey())
}}, }},
mdb.RENDER: {Name: "render", Help: "渲染", Hand: func(m *ice.Message, arg ...string) { mdb.RENDER: {Name: "render", Help: "渲染", Hand: func(m *ice.Message, arg ...string) {
m.Echo("<html><body>") m.Echo("<html><body>")

24
init.go
View File

@ -2,6 +2,7 @@ package ice
import ( import (
"os" "os"
"path"
"strings" "strings"
"sync" "sync"
"time" "time"
@ -97,22 +98,29 @@ var Pulse = &Message{
source: Index, target: Index, Hand: true, source: Index, target: Index, Hand: true,
} }
func init() { Index.root, Pulse.root = Index, Pulse }
func Run(arg ...string) string { func Run(arg ...string) string {
if len(arg) == 0 { // 进程参数
if arg = append(arg, os.Args[1:]...); os.Getenv("ctx_arg") != "" { if arg = append(arg, os.Args[1:]...); os.Getenv("ctx_arg") != "" {
arg = append(arg, kit.Split(os.Getenv("ctx_arg"))...) arg = append(arg, kit.Split(os.Getenv("ctx_arg"))...)
} }
}
switch Index.Merge(Index).Begin(Pulse.Spawn(), arg...); kit.Select("", arg, 0) {
case SERVE, SPACE: // 启动服务
if log.LogDisable = false; Index.Start(Pulse, arg...) {
Pulse.TryCatch(Pulse, true, func(Pulse *Message) { Index.wg.Wait() })
os.Exit(kit.Int(Pulse.Option(EXIT)))
}
default: // 执行命令
if _, ok := Info.names[path.Base(os.Args[0])]; ok {
arg = kit.Simple(path.Base(os.Args[0]), arg)
}
if len(arg) == 0 { if len(arg) == 0 {
arg = append(arg, HELP) arg = append(arg, HELP)
} }
Index.root, Pulse.root = Index, Pulse
switch Index.Merge(Index).Begin(Pulse.Spawn(), arg...); kit.Select("", arg, 0) {
case SERVE, SPACE:
if log.LogDisable = false; Index.Start(Pulse, arg...) {
Pulse.TryCatch(Pulse, true, func(Pulse *Message) { Index.wg.Wait() })
os.Exit(kit.Int(Pulse.Option(EXIT)))
}
default:
Pulse.Cmd(INIT) Pulse.Cmd(INIT)
defer Pulse.Cmd(EXIT) defer Pulse.Cmd(EXIT)
if Pulse.Cmdy(arg); strings.TrimSpace(Pulse.Result()) == "" { if Pulse.Cmdy(arg); strings.TrimSpace(Pulse.Result()) == "" {

View File

@ -23,7 +23,8 @@ var Index = &ice.Context{Name: GIT, Help: "代码库", Configs: map[string]*ice.
}}, }},
}, code.InstallAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, code.InstallAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmdy(code.INSTALL, nfs.SOURCE, m.Config(nfs.SOURCE), arg) m.Cmdy(code.INSTALL, nfs.SOURCE, m.Config(nfs.SOURCE), arg)
m.Echo("hello world %v", arg)
}}, }},
}} }}
func init() { code.Index.Register(Index, &web.Frame{}, REPOS) } func init() { code.Index.Register(Index, &web.Frame{}, REPOS, GIT) }

View File

@ -13,10 +13,10 @@ func init() {
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
VIMRC: {Name: "vimrc", Help: "收藏夹", Action: ice.MergeAction(map[string]*ice.Action{ VIMRC: {Name: "vimrc", Help: "收藏夹", Action: ice.MergeAction(map[string]*ice.Action{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
m.Cmd(mdb.PLUGIN, mdb.CREATE, VIMRC, m.Prefix(VIMRC)) m.Cmd(mdb.PLUGIN, mdb.CREATE, VIMRC, m.PrefixKey())
m.Cmd(mdb.RENDER, mdb.CREATE, VIMRC, m.Prefix(VIMRC)) m.Cmd(mdb.RENDER, mdb.CREATE, VIMRC, m.PrefixKey())
m.Cmd(mdb.PLUGIN, mdb.CREATE, VIM, m.Prefix(VIMRC)) m.Cmd(mdb.PLUGIN, mdb.CREATE, VIM, m.PrefixKey())
m.Cmd(mdb.RENDER, mdb.CREATE, VIM, m.Prefix(VIMRC)) m.Cmd(mdb.RENDER, mdb.CREATE, VIM, m.PrefixKey())
code.LoadPlug(m, VIMRC) code.LoadPlug(m, VIMRC)
}}, }},
}, code.PlugAction())}, }, code.PlugAction())},
@ -24,8 +24,7 @@ func init() {
VIMRC: {Name: VIMRC, Help: "收藏夹", Value: kit.Data( VIMRC: {Name: VIMRC, Help: "收藏夹", Value: kit.Data(
code.PLUG, kit.Dict( code.PLUG, kit.Dict(
code.SPLIT, kit.Dict("space", " \t", "operator", "{[(&.,;!|<>)]}"), code.SPLIT, kit.Dict("space", " \t", "operator", "{[(&.,;!|<>)]}"),
code.PREFIX, kit.Dict("\"", "comment"), code.PREFIX, kit.Dict("\"", "comment"), code.PREPARE, kit.Dict(
code.PREPARE, kit.Dict(
code.KEYWORD, kit.Simple( code.KEYWORD, kit.Simple(
"source", "finish", "source", "finish",
"set", "let", "end", "set", "let", "end",

View File

@ -85,7 +85,7 @@ func (c *Context) Register(s *Context, x Server, n ...string) *Context {
name(n, s) name(n, s)
} }
if c.Contexts == nil { if s.Merge(s); c.Contexts == nil {
c.Contexts = map[string]*Context{} c.Contexts = map[string]*Context{}
} }
c.Contexts[s.Name] = s c.Contexts[s.Name] = s
@ -130,9 +130,11 @@ func (c *Context) Merge(s *Context) *Context {
} }
for k, a := range cmd.Action { for k, a := range cmd.Action {
if p, ok := c.Commands[k]; ok && s != c { // if p, ok := c.Commands[k]; ok && s != c {
if p, ok := c.Commands[k]; ok {
switch last, next := p.Hand, a.Hand; k { switch last, next := p.Hand, a.Hand; k {
case CTX_INIT: case CTX_INIT:
fmt.Printf("what %v %v last: %v next: %v\n", s.Name, c.Name, kit.FileLine(last, 3), kit.FileLine(next, 3))
p.Hand = func(m *Message, c *Context, _key string, arg ...string) { p.Hand = func(m *Message, c *Context, _key string, arg ...string) {
last(m, c, _key, arg...) last(m, c, _key, arg...)
m._key, m._cmd = key, cmd m._key, m._cmd = key, cmd
@ -166,6 +168,8 @@ func (c *Context) Merge(s *Context) *Context {
cmd.Meta[k] = a.List cmd.Meta[k] = a.List
} }
} }
delete(cmd.Action, CTX_INIT)
delete(cmd.Action, CTX_EXIT)
} }
if c.Configs == nil { if c.Configs == nil {