diff --git a/base/web/dream.go b/base/web/dream.go index 3ab6b6cd..1d036826 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -81,7 +81,7 @@ func _dream_show(m *ice.Message, name string) { kit.Path(os.Args[0]) m.Optionv(cli.CMD_ERRPUT, path.Join(p, m.Conf(DREAM, kit.Keym(cli.ENV, "ctx_log")))) - m.Cmd(cli.DAEMON, m.Confv(DREAM, kit.Keym(cli.CMD)), SPIDE_DEV, SPIDE_DEV, kit.MDB_NAME, name) + m.Cmd(cli.DAEMON, m.Confv(DREAM, kit.Keym(cli.CMD)), SPIDE_DEV, SPIDE_DEV, kit.MDB_NAME, name, RIVER, m.Option(RIVER)) m.Event(DREAM_CREATE, kit.MDB_TYPE, m.Option(kit.MDB_TYPE), kit.MDB_NAME, name) m.Sleep(ice.MOD_TICK) } @@ -112,7 +112,7 @@ func init() { m.Cmdy(SPACE, m.Option(ROUTE), "web.code.autogen", mdb.CREATE, arg) m.ProcessInner() }}, - cli.START: {Name: "start name repos", Help: "启动", Hand: func(m *ice.Message, arg ...string) { + cli.START: {Name: "start name repos river", Help: "启动", Hand: func(m *ice.Message, arg ...string) { if m.Option(kit.MDB_NAME) == SPIDE_SELF { m.Option(kit.MDB_NAME, "") } diff --git a/base/web/share.go b/base/web/share.go index a40fe91c..558cb6d7 100644 --- a/base/web/share.go +++ b/base/web/share.go @@ -127,7 +127,8 @@ func init() { m.Cmdy(mdb.INSERT, m.PrefixKey(), "", mdb.HASH, kit.MDB_TIME, m.Time(m.Conf(SHARE, kit.Keym(kit.MDB_EXPIRE))), aaa.USERROLE, m.Option(ice.MSG_USERROLE), aaa.USERNAME, m.Option(ice.MSG_USERNAME), RIVER, m.Option(ice.MSG_RIVER), STORM, m.Option(ice.MSG_STORM), arg) - m.Option(kit.MDB_LINK, _share_link(m, "/share/"+m.Result())) + // m.Option(kit.MDB_LINK, _share_link(m, "/share/"+m.Result())) + m.Option(kit.MDB_LINK, kit.MergeURL2(m.Option(ice.MSG_USERWEB), "/share/"+m.Result())) }}, LOGIN: {Name: "login userrole=void,tech username", Help: "登录", Hand: func(m *ice.Message, arg ...string) { msg := m.Cmd(SHARE, mdb.CREATE, kit.MDB_TYPE, LOGIN, m.OptionSimple(aaa.USERROLE, aaa.USERNAME)) diff --git a/base/web/space.go b/base/web/space.go index 2bcdc0e9..a91070fc 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -52,7 +52,7 @@ func _space_dial(m *ice.Message, dev, name string, arg ...string) { 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, ice.Info.CtxShare, RIVER, ice.Info.CtxRiver, arg) + kit.MDB_NAME, name, SHARE, ice.Info.CtxShare, RIVER, kit.Select(ice.Info.CtxRiver, m.Option(RIVER)), arg) if u, e := url.Parse(uri); m.Assert(e) { m.Go(func() { @@ -250,7 +250,7 @@ func init() { )}, }, Commands: map[string]*ice.Command{ SPACE: {Name: "space name cmd auto", Help: "空间站", Action: map[string]*ice.Action{ - tcp.DIAL: {Name: "dial dev name", Help: "连接", Hand: func(m *ice.Message, arg ...string) { + tcp.DIAL: {Name: "dial dev name river", Help: "连接", Hand: func(m *ice.Message, arg ...string) { _space_dial(m, m.Option(SPIDE_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) { diff --git a/core/chat/node.go b/core/chat/node.go index 969400e1..272869a9 100644 --- a/core/chat/node.go +++ b/core/chat/node.go @@ -16,9 +16,16 @@ func init() { Index.Merge(&ice.Context{ Commands: map[string]*ice.Command{ ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Watch(web.DREAM_START, m.Prefix(NODE)) m.Watch(web.SPACE_START, m.Prefix(NODE)) }}, - NODE: {Name: "node name ctx cmd auto insert invite", Help: "设备", Action: map[string]*ice.Action{ + NODE: {Name: "node pod ctx cmd auto insert invite", Help: "设备", Action: map[string]*ice.Action{ + web.DREAM_START: {Name: "start type name share river", Help: "启动", Hand: func(m *ice.Message, arg ...string) { + if m.Option(ice.MSG_RIVER, m.Option(RIVER)) == "" { + return + } + m.Cmdy(mdb.INSERT, RIVER, _river_key(m, NODE), mdb.HASH, arg) + }}, web.SPACE_START: {Name: "start type name share river", Help: "启动", Hand: func(m *ice.Message, arg ...string) { if m.Option(ice.MSG_RIVER, m.Option(RIVER)) == "" { return @@ -45,9 +52,10 @@ func init() { m.Option(mdb.FIELDS, "time,type,name,share") m.Cmdy(mdb.SELECT, RIVER, kit.Keys(kit.MDB_HASH, m.Option(ice.MSG_RIVER), NODE), mdb.HASH) m.Table(func(index int, value map[string]string, head []string) { - m.PushAnchor(value[kit.MDB_NAME], kit.MergeURL(m.Option(ice.MSG_USERWEB), - cli.POD, kit.Keys(m.Option(cli.POD), value[kit.MDB_NAME]))) + m.PushAnchor(value[kit.MDB_NAME], kit.MergeURL2(m.Option(ice.MSG_USERWEB), + "/chat/pod/"+kit.Keys(m.Option(cli.POD), value[kit.MDB_NAME]))) }) + m.RenameAppend("name", "pod") m.PushAction(mdb.REMOVE) return } diff --git a/core/chat/river.go b/core/chat/river.go index 8035b194..107fbdc4 100644 --- a/core/chat/river.go +++ b/core/chat/river.go @@ -177,6 +177,8 @@ func init() { aaa.INVITE: {Name: "invite", Help: "脚本", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(code.PUBLISH, ice.CONTEXTS) + m.Cmd(code.PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.BIN_ICE_SH) + m.Cmd(code.PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.BIN_ICE_BIN) }}, cli.START: {Name: "start name repos template", Help: "启动", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(m.Space(m.Option(cli.POD)), web.DREAM, cli.START, arg) diff --git a/core/code/publish.go b/core/code/publish.go index a3a3ff11..d8f965a8 100644 --- a/core/code/publish.go +++ b/core/code/publish.go @@ -43,123 +43,120 @@ func _publish_file(m *ice.Message, file string, arg ...string) string { const PUBLISH = "publish" func init() { - Index.Merge(&ice.Context{ - Commands: map[string]*ice.Command{ - ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.Prefix(PUBLISH)) - m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, ice.USR_PUBLISH) - m.Conf(PUBLISH, kit.Keym(ice.CONTEXTS), _contexts) + Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ + ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.Prefix(PUBLISH)) + m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, ice.USR_PUBLISH) + m.Conf(PUBLISH, kit.Keym(ice.CONTEXTS), _contexts) + }}, + PUBLISH: {Name: "publish path auto create volcanos icebergs intshell package dream", Help: "发布", Action: map[string]*ice.Action{ + mdb.CREATE: {Name: "create file", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + _publish_file(m, m.Option(kit.MDB_FILE)) }}, - PUBLISH: {Name: "publish path auto create volcanos icebergs intshell package dream", Help: "发布", Action: map[string]*ice.Action{ - mdb.CREATE: {Name: "create file", Help: "添加", Hand: func(m *ice.Message, arg ...string) { - _publish_file(m, m.Option(kit.MDB_FILE)) - }}, - ice.VOLCANOS: {Name: "volcanos", Help: "火山架", Hand: func(m *ice.Message, arg ...string) { - defer func() { m.EchoQRCode(m.Option(ice.MSG_USERWEB)) }() - defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, "miss") }() - m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.ETC_MISS) - m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.GO_MOD) + ice.VOLCANOS: {Name: "volcanos", Help: "火山架", Hand: func(m *ice.Message, arg ...string) { + defer func() { m.EchoQRCode(m.Option(ice.MSG_USERWEB)) }() + defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, "miss") }() + m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.ETC_MISS) + m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.GO_MOD) - m.Cmd(nfs.DEFS, path.Join(m.Conf(PUBLISH, kit.META_PATH), ice.ORDER_JS), m.Conf(PUBLISH, kit.Keym(JS))) - m.Cmd(nfs.DEFS, path.Join(ice.USR_VOLCANOS, "page/cache.css"), "") - m.Cmd(nfs.DEFS, path.Join(ice.USR_VOLCANOS, "page/cache.js"), "") + m.Cmd(nfs.DEFS, path.Join(m.Conf(PUBLISH, kit.META_PATH), ice.ORDER_JS), m.Conf(PUBLISH, kit.Keym(JS))) + m.Cmd(nfs.DEFS, path.Join(ice.USR_VOLCANOS, "page/cache.css"), "") + m.Cmd(nfs.DEFS, path.Join(ice.USR_VOLCANOS, "page/cache.js"), "") - m.Option(nfs.DIR_DEEP, ice.TRUE) - m.Option(nfs.DIR_REG, `.*\.(html|css|js)$`) - m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH)) - m.Cmdy(nfs.DIR, "./", "time,size,line,path,link") - }}, - ice.ICEBERGS: {Name: "icebergs", Help: "冰山架", Hand: func(m *ice.Message, arg ...string) { - defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, "base") }() - m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.BIN_ICE_SH) - m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.BIN_ICE_BIN) - - p := m.Option(cli.CMD_DIR, m.Conf(PUBLISH, kit.META_PATH)) - ls := strings.Split(strings.TrimSpace(m.Cmd(cli.SYSTEM, "bash", "-c", "ls |xargs file |grep executable").Append(cli.CMD_OUT)), ice.NL) - for _, ls := range ls { - if file := strings.TrimSpace(strings.Split(ls, ":")[0]); file != "" { - if s, e := os.Stat(path.Join(p, file)); e == nil { - m.Push(kit.MDB_TIME, s.ModTime()) - m.Push(kit.MDB_SIZE, kit.FmtSize(s.Size())) - m.Push(kit.MDB_FILE, file) - m.PushDownload(kit.MDB_LINK, file, path.Join(p, file)) - } - } - } - m.SortTimeR(kit.MDB_TIME) - }}, - ice.INTSHELL: {Name: "intshell", Help: "神农架", Hand: func(m *ice.Message, arg ...string) { - defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, "tmux") }() - m.Cmd(nfs.DEFS, path.Join(m.Conf(PUBLISH, kit.META_PATH), ice.ORDER_SH), m.Conf(PUBLISH, kit.Keym(SH))) - - m.Option(nfs.DIR_DEEP, ice.TRUE) - m.Option(nfs.DIR_REG, ".*\\.(sh|vim|conf)$") - m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH)) - m.Cmdy(nfs.DIR, "./", "time,size,line,path,link") - }}, - ice.CONTEXTS: {Name: "contexts", Help: "环境", Hand: func(m *ice.Message, arg ...string) { - u := kit.ParseURL(tcp.ReplaceLocalhost(m, m.Option(ice.MSG_USERWEB))) - host := u.Host - - m.Option("httphost", fmt.Sprintf("%s://%s:%s", u.Scheme, strings.Split(host, ":")[0], kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(host, ":"), 1))) - m.Option("hostport", fmt.Sprintf("%s:%s", strings.Split(host, ":")[0], kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(host, ":"), 1))) - m.Option("hostname", strings.Split(host, ":")[0]) - - m.Option("userhost", fmt.Sprintf("%s@%s", m.Option(ice.MSG_USERNAME), strings.Split(host, ":")[0])) - m.Option("hostpath", kit.Path("./.ish/pluged")) - - if len(arg) == 0 { - arg = append(arg, "tmux", "base", "miss", "binary", "source", "project") - } - for _, k := range arg { - if buf, err := kit.Render(m.Conf(PUBLISH, kit.Keym(ice.CONTEXTS, k)), m); m.Assert(err) { - m.EchoScript(strings.TrimSpace(string(buf))) - } - } - }}, - "package": {Name: "package", Help: "依赖", Hand: func(m *ice.Message, arg ...string) { - web.PushStream(m) - p := kit.Path(ice.USR_PUBLISH) - m.Option(cli.CMD_DIR, kit.Path(os.Getenv("HOME"))) - // m.Cmdy(cli.SYSTEM, "tar", "-zcvf", "go.tar.gz", "go/pkg") - // m.Cmdy(cli.SYSTEM, "mv", "go.tar.gz", p) - m.Cmdy(cli.SYSTEM, "tar", "-zcvf", "vim.tar.gz", ".vim/plugged") - m.Cmdy(cli.SYSTEM, "mv", "vim.tar.gz", p) - m.Toast("打包成功") - m.ProcessHold() - }}, - mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - p := m.Option(cli.CMD_DIR, m.Conf(PUBLISH, kit.META_PATH)) - os.Remove(path.Join(p, m.Option(kit.MDB_PATH))) - }}, - mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(web.DREAM, mdb.INPUTS, arg) - }}, - web.DREAM: {Name: "dream name=hi repos", Help: "启动", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(web.DREAM, tcp.START, arg) - m.Process(ice.PROCESS_OPEN, kit.MergeURL(m.Option(ice.MSG_USERWEB), - cli.POD, kit.Keys(m.Option(ice.MSG_USERPOD), m.Option(kit.MDB_NAME)))) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Option(nfs.DIR_DEEP, ice.TRUE) + m.Option(nfs.DIR_REG, `.*\.(html|css|js)$`) m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH)) - m.Cmdy(nfs.DIR, kit.Select("", arg, 0), "time,size,path,action,link") + m.Cmdy(nfs.DIR, "./", "time,size,line,path,link") }}, - }, - Configs: map[string]*ice.Config{ - PUBLISH: {Name: PUBLISH, Help: "发布", Value: kit.Data( - kit.MDB_PATH, "usr/publish", ice.CONTEXTS, _contexts, - SH, `#!/bin/bash + ice.ICEBERGS: {Name: "icebergs", Help: "冰山架", Hand: func(m *ice.Message, arg ...string) { + defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, "base") }() + m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.BIN_ICE_SH) + m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.BIN_ICE_BIN) + + p := m.Option(cli.CMD_DIR, m.Conf(PUBLISH, kit.META_PATH)) + ls := strings.Split(strings.TrimSpace(m.Cmd(cli.SYSTEM, "bash", "-c", "ls |xargs file |grep executable").Append(cli.CMD_OUT)), ice.NL) + for _, ls := range ls { + if file := strings.TrimSpace(strings.Split(ls, ":")[0]); file != "" { + if s, e := os.Stat(path.Join(p, file)); e == nil { + m.Push(kit.MDB_TIME, s.ModTime()) + m.Push(kit.MDB_SIZE, kit.FmtSize(s.Size())) + m.Push(kit.MDB_FILE, file) + m.PushDownload(kit.MDB_LINK, file, path.Join(p, file)) + } + } + } + m.SortTimeR(kit.MDB_TIME) + }}, + ice.INTSHELL: {Name: "intshell", Help: "神农架", Hand: func(m *ice.Message, arg ...string) { + defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, "tmux") }() + m.Cmd(nfs.DEFS, path.Join(m.Conf(PUBLISH, kit.META_PATH), ice.ORDER_SH), m.Conf(PUBLISH, kit.Keym(SH))) + + m.Option(nfs.DIR_DEEP, ice.TRUE) + m.Option(nfs.DIR_REG, ".*\\.(sh|vim|conf)$") + m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH)) + m.Cmdy(nfs.DIR, "./", "time,size,line,path,link") + }}, + ice.CONTEXTS: {Name: "contexts", Help: "环境", Hand: func(m *ice.Message, arg ...string) { + u := kit.ParseURL(tcp.ReplaceLocalhost(m, m.Option(ice.MSG_USERWEB))) + host := u.Host + + m.Option("httphost", fmt.Sprintf("%s://%s:%s", u.Scheme, strings.Split(host, ":")[0], kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(host, ":"), 1))) + m.Option("hostport", fmt.Sprintf("%s:%s", strings.Split(host, ":")[0], kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(host, ":"), 1))) + m.Option("hostname", strings.Split(host, ":")[0]) + + m.Option("userhost", fmt.Sprintf("%s@%s", m.Option(ice.MSG_USERNAME), strings.Split(host, ":")[0])) + m.Option("hostpath", kit.Path("./.ish/pluged")) + + if len(arg) == 0 { + arg = append(arg, "tmux", "base", "miss", "binary", "source", "project") + } + for _, k := range arg { + if buf, err := kit.Render(m.Conf(PUBLISH, kit.Keym(ice.CONTEXTS, k)), m); m.Assert(err) { + m.EchoScript(strings.TrimSpace(string(buf))) + } + } + }}, + "package": {Name: "package", Help: "依赖", Hand: func(m *ice.Message, arg ...string) { + web.PushStream(m) + p := kit.Path(ice.USR_PUBLISH) + m.Option(cli.CMD_DIR, kit.Path(os.Getenv("HOME"))) + // m.Cmdy(cli.SYSTEM, "tar", "-zcvf", "go.tar.gz", "go/pkg") + // m.Cmdy(cli.SYSTEM, "mv", "go.tar.gz", p) + m.Cmdy(cli.SYSTEM, "tar", "-zcvf", "vim.tar.gz", ".vim/plugged") + m.Cmdy(cli.SYSTEM, "mv", "vim.tar.gz", p) + m.Toast("打包成功") + m.ProcessHold() + }}, + mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + p := m.Option(cli.CMD_DIR, m.Conf(PUBLISH, kit.META_PATH)) + os.Remove(path.Join(p, m.Option(kit.MDB_PATH))) + }}, + mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(web.DREAM, mdb.INPUTS, arg) + }}, + web.DREAM: {Name: "dream name=hi repos", Help: "启动", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(web.DREAM, tcp.START, arg) + m.Process(ice.PROCESS_OPEN, kit.MergeURL(m.Option(ice.MSG_USERWEB), + cli.POD, kit.Keys(m.Option(ice.MSG_USERPOD), m.Option(kit.MDB_NAME)))) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH)) + m.Cmdy(nfs.DIR, kit.Select("", arg, 0), "time,size,path,action,link") + }}, + }, Configs: map[string]*ice.Config{ + PUBLISH: {Name: PUBLISH, Help: "发布", Value: kit.Data( + kit.MDB_PATH, "usr/publish", ice.CONTEXTS, _contexts, + SH, `#!/bin/bash echo "hello world" `, - JS, `Volcanos("onengine", {_init: function(can, sub) { + JS, `Volcanos("onengine", {_init: function(can, sub) { can.base.Log("hello volcanos world") }, river: { }}) `, - )}, - }, - }) + )}, + }}) } var _contexts = kit.Dict(