diff --git a/src/contexts/cli/cli.go b/src/contexts/cli/cli.go index 04a30522..35def945 100644 --- a/src/contexts/cli/cli.go +++ b/src/contexts/cli/cli.go @@ -485,8 +485,6 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心", if cmd, ok := m.Confm("daemon", pid)["sub"].(*exec.Cmd); ok { switch arg[0] { case "stop": - kit.Log("error", "kill: %s", cmd.Process.Pid) - m.Log("kill", "kill: %d", cmd.Process.Pid) m.Echo("%s", cmd.Process.Signal(os.Interrupt)) default: m.Echo("%v", cmd) @@ -1034,7 +1032,6 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心", } if m.Confs("ssh.node", arg[0]) { - m.Log("fuck", "waht %v", arg[1]) switch kit.Select("", arg, 1) { case "stop": m.Cmdy("ssh._route", arg[0], "context", "cli", "quit", 0) diff --git a/src/contexts/cli/version.go b/src/contexts/cli/version.go index 128eabcb..27ba63ec 100644 --- a/src/contexts/cli/version.go +++ b/src/contexts/cli/version.go @@ -4,5 +4,5 @@ var version = struct { host string self int }{ - "2019-08-05 15:48:07", "ZYB-20190522USI", 372, + "2019-08-06 21:00:10", "ZYB-20190522USI", 379, } diff --git a/src/contexts/nfs/nfs.go b/src/contexts/nfs/nfs.go index 17d11e00..d0dada15 100644 --- a/src/contexts/nfs/nfs.go +++ b/src/contexts/nfs/nfs.go @@ -752,11 +752,13 @@ var Index = &ctx.Context{Name: "nfs", Help: "存储中心", }}, "temp": &ctx.Command{Name: "temp data", Help: "查找文件路径", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) { - if f, p, e := kit.Create(path.Join(m.Conf("dir", "temp"), kit.Hashs("uniq"))); m.Assert(e) { + if f, p, e := kit.Create(path.Join(m.Conf("dir", "temp"), kit.Hashs(arg[0]))); m.Assert(e) { defer f.Close() for _, v := range arg { - f.WriteString(v) + if n, e := f.WriteString(v); e == nil { + m.Log("info", "save %v %v", n, p) + } } m.Echo(p) } @@ -1044,14 +1046,14 @@ var Index = &ctx.Context{Name: "nfs", Help: "存储中心", "open": &ctx.Command{Name: "open file", Help: "打开文件, file: 文件名", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) { if m.Has("io") { - } else if p, f, e := open(m, arg[0], os.O_RDWR|os.O_CREATE); e == nil { + } else if p, f, e := open(m, arg[0], os.O_RDWR|os.O_CREATE|os.O_TRUNC); e == nil { m.Put("option", "in", f).Put("option", "out", f) arg[0] = p } else { return nil } - m.Start(fmt.Sprintf("file%d", m.Capi("nfile")), fmt.Sprintf("file %s", arg[0]), "open", arg[0]) + m.Start(fmt.Sprintf("file%d", m.Capi("nfile", 1)), fmt.Sprintf("file %s", arg[0]), "open", arg[0]) m.Append("bio.ctx1", m.Cap("module")) m.Echo(m.Cap("module")) return @@ -1075,18 +1077,16 @@ var Index = &ctx.Context{Name: "nfs", Help: "存储中心", }}, "write": &ctx.Command{Name: "write string [pos]", Help: "写入文件, string: 写入内容, pos: 写入位置", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) { if nfs, ok := m.Target().Server.(*NFS); m.Assert(ok) && nfs.out != nil { - if len(arg) > 1 { - m.Cap("pos", arg[1]) - } - if len(arg[0]) == 0 { m.Assert(nfs.out.Truncate(int64(m.Capi("pos")))) m.Cap("size", m.Cap("pos")) m.Cap("pos", "0") } else { - n, e := nfs.out.WriteAt([]byte(arg[0]), int64(m.Capi("pos"))) - if m.Capi("nwrite", n); m.Assert(e) && m.Capi("pos", n) > m.Capi("size") { - m.Cap("size", m.Cap("pos")) + for _, v := range arg { + n, e := nfs.out.WriteAt([]byte(v), int64(m.Capi("pos"))) + if m.Capi("nwrite", n); m.Assert(e) && m.Capi("pos", n) > m.Capi("size") { + m.Cap("size", m.Cap("pos")) + } } nfs.out.Sync() } @@ -1143,7 +1143,7 @@ var Index = &ctx.Context{Name: "nfs", Help: "存储中心", }}, "socket": &ctx.Command{Name: "remote listen|dial args...", Help: "启动文件服务, args: 参考tcp模块, listen命令的参数", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) { - if _, ok := m.Target().Server.(*NFS); m.Assert(ok) { //{{{ + if _, ok := m.Target().Server.(*NFS); m.Assert(ok) { m.Sess("tcp").Call(func(msg *ctx.Message) *ctx.Message { if msg.Has("node.port") { return msg diff --git a/src/contexts/ssh/ssh.go b/src/contexts/ssh/ssh.go index 41d35888..c8c818f4 100644 --- a/src/contexts/ssh/ssh.go +++ b/src/contexts/ssh/ssh.go @@ -471,7 +471,7 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心", } // 注册脚本 - m.Cmd("nfs.source", m.Cmdx("nfs.hash", m.Append("work.script"))) + m.Cmd("nfs.source", m.Cmdx("nfs.temp", m.Append("work.script"))) return nil }, "send", "", "_add", m.Conf("runtime", "node.name"), m.Conf("runtime", "node.type"), m.Conf("runtime", "boot.ctx_type")) return nil @@ -673,7 +673,6 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心", if m.Option("user.cert", m.Cmd("aaa.auth", "username", m.Option("username"), "cert").Append("meta")); !m.Options("user.cert") { m.Option("user.cert", m.Cmd("ssh._route", m.Option("user.route"), "_check", "user").Append("user.cert")) m.Cmd("aaa.auth", "username", m.Option("username"), "cert", m.Option("user.cert")) - m.Cmd("aaa.auth", "username", m.Option("username"), "userrole", "void") } if !m.Options("user.cert") || !m.Cmds("aaa.rsa", "verify", m.Option("user.cert"), m.Option("user.sign"), arg[2]) { diff --git a/src/contexts/web/web.go b/src/contexts/web/web.go index 94ccc0c4..a1940225 100644 --- a/src/contexts/web/web.go +++ b/src/contexts/web/web.go @@ -501,7 +501,7 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心", "get": &ctx.Command{Name: "get [which] name [method GET|POST] url arg...", Help: "访问服务, method: 请求方法, url: 请求地址, arg: 请求参数", Form: map[string]int{ "which": 1, "method": 1, "args": 1, "headers": 2, - "content_type": 1, "body": 1, "file": 2, + "content_type": 1, "content_data": 1, "body": 1, "file": 2, "parse": 1, "temp": -1, "temp_expire": 1, "save": 1, }, Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) { // 查看配置 @@ -687,10 +687,16 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心", switch { // 解析数据 case parse == "json" || strings.HasPrefix(ct, "application/json") || strings.HasPrefix(ct, "application/javascript"): - if json.NewDecoder(res.Body).Decode(&result); !m.Has("temp") { - m.Option("temp", "") + if json.NewDecoder(res.Body).Decode(&result); m.Options("temp_expire") { + if !m.Has("temp") { + m.Option("temp", "") + } + m.Put("option", "data", result).Cmdy("mdb.temp", "url", uri+uri_arg, "data", "data", m.Meta["temp"]) + } else { + if b, e := json.MarshalIndent(result, "", " "); m.Assert(e) { + m.Echo(string(b)) + } } - m.Put("option", "data", result).Cmdy("mdb.temp", "url", uri+uri_arg, "data", "data", m.Meta["temp"]) // 解析网页 case parse == "html": diff --git a/src/contexts/yac/yac.go b/src/contexts/yac/yac.go index ef9e4d69..f3a5ea89 100644 --- a/src/contexts/yac/yac.go +++ b/src/contexts/yac/yac.go @@ -41,9 +41,6 @@ type YAC struct { label map[string]string *ctx.Context } -type Parser interface { - Parse(m *ctx.Message, line []byte, page string) (hash int, rest []byte, word []byte) -} func (yac *YAC) name(page int) string { if name, ok := yac.word[page]; ok { @@ -196,29 +193,30 @@ func (yac *YAC) train(m *ctx.Message, page, hash int, word []string, level int) m.Log("debug", "%s %s/%d word: %d point: %d end: %d", "train", strings.Repeat("#", level), level, len(word), len(points), len(ends)) return len(word), points, ends } -func (yac *YAC) parse(m *ctx.Message, msg *ctx.Message, stack *kit.Stack, page int, void int, line []byte, level int) (rest []byte, word []string, hash int) { - m.Log("debug", "%s %s\\%d %s(%d): %s", "parse", strings.Repeat("#", level), level, yac.name(page), page, string(line)) - - h, r, w := 0, []byte{}, []byte{} - p, _ := yac.lex.Target().Server.(Parser) +func (yac *YAC) parse(m *ctx.Message, msg *ctx.Message, stack *kit.Stack, page int, void int, line string, level int) (string, []string, int) { + m.Log("debug", "%s %s\\%d %s(%d): %s", "parse", strings.Repeat("#", level), level, yac.name(page), page, line) + lex, hash, word := yac.lex, 0, []string{} for star, s := 0, page; s != 0 && len(line) > 0; { //解析空白 - if h, r, _ = p.Parse(m, line, yac.name(void)); h == -1 { + if lex = yac.lex.Spawn().Cmd("parse", line, yac.name(void)); lex.Result(0) == "-1" { break } + line = lex.Result(1) + //解析单词 - if h, r, w = p.Parse(m, r, yac.name(s)); h == -1 { + if lex = yac.lex.Spawn().Cmd("parse", line, yac.name(s)); lex.Result(0) == "-1" { break } + result := append([]string{}, lex.Meta["result"]...) //解析状态 - state := yac.mat[s][byte(h)] + state := yac.mat[s][byte(kit.Int(result[0]))] //全局语法检查 if state != nil { - if hh, _, ww := p.Parse(m, line, "key"); hh == 0 || len(ww) <= len(w) { - line, word = r, append(word, string(w)) + if key := yac.lex.Spawn().Cmd("parse", line, "key"); key.Result(0) == "0" || len(key.Result(2)) <= len(result[2]) { + line, word = result[1], append(word, result[2]) } else { state = nil } @@ -227,7 +225,7 @@ func (yac *YAC) parse(m *ctx.Message, msg *ctx.Message, stack *kit.Stack, page i if state == nil { for i := 0; i < m.Confi("meta", "ncell"); i++ { if x := yac.mat[s][byte(i)]; i < m.Confi("meta", "nlang") && x != nil { - if l, w, _ := yac.parse(m, msg, stack, i, void, line, level+1); len(l) != len(line) { + if l, w, _ := yac.parse(m, msg, stack, i, void, line, level+1); l != line { line, word, state = l, append(word, w...), x break } @@ -340,9 +338,7 @@ var Index = &ctx.Context{Name: "yac", Help: "语法中心", map[string]interface{}{"page": "stm", "hash": "let", "word": []interface{}{"let", "key", "=", "\\[", "rep{", "exp", "}", "\\]"}}, map[string]interface{}{"page": "stm", "hash": "let", "word": []interface{}{"let", "key", "=", "\\{", "rep{", "exp", "}", "\\}"}}, map[string]interface{}{"page": "stm", "hash": "if", "word": []interface{}{"if", "exp"}}, - map[string]interface{}{"page": "stm", "hash": "for", "word": []interface{}{"for", "key", "key", "key", "in", "key"}}, - map[string]interface{}{"page": "stm", "hash": "for", "word": []interface{}{"for", "key", "key", "in", "key"}}, - map[string]interface{}{"page": "stm", "hash": "for", "word": []interface{}{"for", "key", "in", "key"}}, + map[string]interface{}{"page": "stm", "hash": "for", "word": []interface{}{"for", "key", "rep{", "key", "}"}}, map[string]interface{}{"page": "stm", "hash": "for", "word": []interface{}{"for", "rep{", "exp", "}"}}, map[string]interface{}{"page": "stm", "hash": "fun", "word": []interface{}{"fun", "key", "rep{", "exp", "}"}}, map[string]interface{}{"page": "stm", "hash": "kit", "word": []interface{}{"kit", "rep{", "exp", "}"}}, @@ -445,7 +441,7 @@ var Index = &ctx.Context{Name: "yac", Help: "语法中心", m.Optioni("yac.page", yac.page[m.Conf("nline")]) m.Optioni("yac.void", yac.page[m.Conf("nvoid")]) - _, word, _ := yac.parse(m, m, stack, m.Optioni("yac.page"), m.Optioni("yac.void"), []byte(arg[0]), 1) + _, word, _ := yac.parse(m, m, stack, m.Optioni("yac.page"), m.Optioni("yac.void"), arg[0], 1) m.Result(word) } return diff --git a/usr/librarys/example.js b/usr/librarys/example.js index 9781a683..cce980ae 100644 --- a/usr/librarys/example.js +++ b/usr/librarys/example.js @@ -576,7 +576,7 @@ function Plugin(page, pane, field) { var plugin = field.Script || {}; plugin.__proto__ = { __proto__: pane, Append: function(item, name) { - name = item.name || "" + name = item.name || "input" item.onfocus = function(event) { page.pane = pane.Field, page.plugin = field, page.input = event.target