forked from x/ContextOS
mac pro ctx
This commit is contained in:
parent
5ca0bca18b
commit
72aa85d5a2
@ -1,7 +1,8 @@
|
|||||||
~file1
|
|
||||||
history load etc/history.txt
|
|
||||||
~shell1
|
~shell1
|
||||||
alias import nfs
|
alias import nfs
|
||||||
|
return
|
||||||
|
~file1
|
||||||
|
history load etc/history.txt
|
||||||
|
|
||||||
source etc/local.shy
|
source etc/local.shy
|
||||||
config debug on
|
config debug on
|
||||||
|
@ -126,6 +126,8 @@ var Index = &ctx.Context{Name: "aaa", Help: "认证中心",
|
|||||||
Configs: map[string]*ctx.Config{
|
Configs: map[string]*ctx.Config{
|
||||||
"rootname": &ctx.Config{Name: "根用户名", Value: "root", Help: "根用户名"},
|
"rootname": &ctx.Config{Name: "根用户名", Value: "root", Help: "根用户名"},
|
||||||
"expire": &ctx.Config{Name: "会话超时(s)", Value: "7200", Help: "会话超时"},
|
"expire": &ctx.Config{Name: "会话超时(s)", Value: "7200", Help: "会话超时"},
|
||||||
|
"cert": &ctx.Config{Name: "证书文件", Value: "etc/cert.pem", Help: "证书文件"},
|
||||||
|
"key": &ctx.Config{Name: "私钥文件", Value: "etc/key.pem", Help: "私钥文件"},
|
||||||
},
|
},
|
||||||
Commands: map[string]*ctx.Command{
|
Commands: map[string]*ctx.Command{
|
||||||
"login": &ctx.Command{Name: "login [sessid]|[[group] username password]]", Help: "用户登录", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
"login": &ctx.Command{Name: "login [sessid]|[[group] username password]]", Help: "用户登录", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||||
@ -153,7 +155,7 @@ var Index = &ctx.Context{Name: "aaa", Help: "认证中心",
|
|||||||
m.Append("username", m.Cap("username"))
|
m.Append("username", m.Cap("username"))
|
||||||
m.Append("userrole", m.Cap("group"))
|
m.Append("userrole", m.Cap("group"))
|
||||||
m.Appendv("aaa", m)
|
m.Appendv("aaa", m)
|
||||||
m.Sesss("aaa", m)
|
m.Sess("aaa", m)
|
||||||
case 2, 3:
|
case 2, 3:
|
||||||
group, username, password := arg[0], arg[0], arg[1]
|
group, username, password := arg[0], arg[0], arg[1]
|
||||||
if len(arg) == 3 {
|
if len(arg) == 3 {
|
||||||
@ -179,7 +181,7 @@ var Index = &ctx.Context{Name: "aaa", Help: "认证中心",
|
|||||||
m.Append("username", msg.Cap("username"))
|
m.Append("username", msg.Cap("username"))
|
||||||
m.Append("userrole", msg.Cap("group"))
|
m.Append("userrole", msg.Cap("group"))
|
||||||
m.Appendv("aaa", msg)
|
m.Appendv("aaa", msg)
|
||||||
m.Sesss("aaa", msg)
|
m.Sess("aaa", msg)
|
||||||
}
|
}
|
||||||
// }}}
|
// }}}
|
||||||
}},
|
}},
|
||||||
@ -192,7 +194,7 @@ var Index = &ctx.Context{Name: "aaa", Help: "认证中心",
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
group := m.Sesss("aaa").Cap("group")
|
group := m.Sess("aaa").Cap("group")
|
||||||
m.Travel(func(msg *ctx.Message, i int) bool {
|
m.Travel(func(msg *ctx.Message, i int) bool {
|
||||||
aaa := msg.Target().Server.(*AAA)
|
aaa := msg.Target().Server.(*AAA)
|
||||||
if aaa.share == nil {
|
if aaa.share == nil {
|
||||||
|
@ -90,7 +90,7 @@ func (cli *CLI) Begin(m *ctx.Message, arg ...string) ctx.Server { // {{{
|
|||||||
// }}}
|
// }}}
|
||||||
func (cli *CLI) Start(m *ctx.Message, arg ...string) bool { // {{{
|
func (cli *CLI) Start(m *ctx.Message, arg ...string) bool { // {{{
|
||||||
cli.Message = m
|
cli.Message = m
|
||||||
yac := m.Sesss("yac")
|
yac := m.Sess("yac")
|
||||||
if yac.Cap("status") != "start" {
|
if yac.Cap("status") != "start" {
|
||||||
yac.Target().Start(yac)
|
yac.Target().Start(yac)
|
||||||
yac.Cmd("train", "void", "void", "[\t ]+")
|
yac.Cmd("train", "void", "void", "[\t ]+")
|
||||||
@ -190,6 +190,7 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
|
|||||||
"nshell": &ctx.Cache{Name: "nshell", Value: "0", Help: "终端数量"},
|
"nshell": &ctx.Cache{Name: "nshell", Value: "0", Help: "终端数量"},
|
||||||
},
|
},
|
||||||
Configs: map[string]*ctx.Config{
|
Configs: map[string]*ctx.Config{
|
||||||
|
"init.shy": &ctx.Config{Name: "init.shy", Value: "etc/init.shy", Help: "启动脚本"},
|
||||||
"cli_name": &ctx.Config{Name: "cli_name", Value: "shell", Help: "模块命名", Hand: func(m *ctx.Message, x *ctx.Config, arg ...string) string {
|
"cli_name": &ctx.Config{Name: "cli_name", Value: "shell", Help: "模块命名", Hand: func(m *ctx.Message, x *ctx.Config, arg ...string) string {
|
||||||
if len(arg) > 0 { // {{{
|
if len(arg) > 0 { // {{{
|
||||||
return arg[0]
|
return arg[0]
|
||||||
@ -211,7 +212,7 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
|
|||||||
if _, ok := m.Target().Server.(*CLI); m.Assert(ok) { // {{{
|
if _, ok := m.Target().Server.(*CLI); m.Assert(ok) { // {{{
|
||||||
m.Start(m.Confx("cli_name", arg, 2), m.Confx("cli_help", arg, 3), key, arg[0])
|
m.Start(m.Confx("cli_name", arg, 2), m.Confx("cli_help", arg, 3), key, arg[0])
|
||||||
if len(arg) < 2 || arg[1] != "async" {
|
if len(arg) < 2 || arg[1] != "async" {
|
||||||
m.Target().Wait()
|
m.Wait()
|
||||||
}
|
}
|
||||||
} // }}}
|
} // }}}
|
||||||
}},
|
}},
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -4,7 +4,6 @@ import ( // {{{
|
|||||||
"contexts"
|
"contexts"
|
||||||
"fmt"
|
"fmt"
|
||||||
Log "log"
|
Log "log"
|
||||||
"os"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@ -44,16 +43,7 @@ func (log *LOG) Begin(m *ctx.Message, arg ...string) ctx.Server { // {{{
|
|||||||
log.Configs["flag_action"] = &ctx.Config{Name: "输出类型", Value: "true", Help: "模块日志类型"}
|
log.Configs["flag_action"] = &ctx.Config{Name: "输出类型", Value: "true", Help: "模块日志类型"}
|
||||||
log.Configs["flag_name"] = &ctx.Config{Name: "输出名称", Value: "true", Help: "模块日志输出消息源模块与消息目的模块"}
|
log.Configs["flag_name"] = &ctx.Config{Name: "输出名称", Value: "true", Help: "模块日志输出消息源模块与消息目的模块"}
|
||||||
|
|
||||||
log.Configs["bench.log"] = &ctx.Config{Name: "日志文件", Value: "var/bench.log", Help: "模块日志输出的文件", Hand: func(m *ctx.Message, x *ctx.Config, arg ...string) string {
|
log.Configs["bench.log"] = &ctx.Config{Name: "日志文件", Value: "var/bench.log", Help: "模块日志输出的文件"}
|
||||||
if len(arg) > 0 {
|
|
||||||
if nfs := m.Sesss("nfs"); nfs != nil {
|
|
||||||
os.Create(arg[0])
|
|
||||||
log.nfs = nfs.Cmd("open", arg[0], "", "日志文件")
|
|
||||||
}
|
|
||||||
return arg[0]
|
|
||||||
}
|
|
||||||
return x.Value
|
|
||||||
}}
|
|
||||||
|
|
||||||
return log
|
return log
|
||||||
}
|
}
|
||||||
@ -61,6 +51,7 @@ func (log *LOG) Begin(m *ctx.Message, arg ...string) ctx.Server { // {{{
|
|||||||
// }}}
|
// }}}
|
||||||
func (log *LOG) Start(m *ctx.Message, arg ...string) bool { // {{{
|
func (log *LOG) Start(m *ctx.Message, arg ...string) bool { // {{{
|
||||||
log.Message = m
|
log.Message = m
|
||||||
|
log.nfs = m.Sess("nfs").Cmd("append", m.Confx("bench.log", arg, 0), "", "日志文件")
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,10 +158,10 @@ var Index = &ctx.Context{Name: "log", Help: "日志中心",
|
|||||||
cmd := strings.Join(arg[1:], "")
|
cmd := strings.Join(arg[1:], "")
|
||||||
|
|
||||||
if log.nfs != nil {
|
if log.nfs != nil {
|
||||||
if log.nfs.Options("log", false); color > 0 {
|
if color > 0 {
|
||||||
log.nfs.Cmd("write", fmt.Sprintf("%s\033[%dm%s%s %s\033[0m\n", date, color, code, action, cmd))
|
m.Spawn(log.nfs.Target()).Cmd("write", fmt.Sprintf("%s\033[%dm%s%s %s\033[0m\n", date, color, code, action, cmd))
|
||||||
} else {
|
} else {
|
||||||
log.nfs.Cmd("write", fmt.Sprintf("%s%s%s %s\n", date, code, action, cmd))
|
m.Spawn(log.nfs.Target()).Cmd("write", fmt.Sprintf("%s%s%s %s\n", date, code, action, cmd))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // }}}
|
} // }}}
|
||||||
|
@ -529,7 +529,7 @@ func (nfs *NFS) Read(p []byte) (n int, err error) { // {{{
|
|||||||
|
|
||||||
func (nfs *NFS) Spawn(m *ctx.Message, c *ctx.Context, arg ...string) ctx.Server { // {{{
|
func (nfs *NFS) Spawn(m *ctx.Message, c *ctx.Context, arg ...string) ctx.Server { // {{{
|
||||||
nfs.Message = m
|
nfs.Message = m
|
||||||
if len(arg) > 0 && (arg[0] == "scan" || arg[0] == "open") {
|
if len(arg) > 0 && (arg[0] == "scan" || arg[0] == "open" || arg[0] == "append") {
|
||||||
c.Caches = map[string]*ctx.Cache{
|
c.Caches = map[string]*ctx.Cache{
|
||||||
"pos": &ctx.Cache{Name: "pos", Value: "0", Help: "pos"},
|
"pos": &ctx.Cache{Name: "pos", Value: "0", Help: "pos"},
|
||||||
"size": &ctx.Cache{Name: "size", Value: "0", Help: "size"},
|
"size": &ctx.Cache{Name: "size", Value: "0", Help: "size"},
|
||||||
@ -629,22 +629,25 @@ func (nfs *NFS) Start(m *ctx.Message, arg ...string) bool { // {{{
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(arg) > 0 && arg[0] == "open" {
|
if len(arg) > 0 && (arg[0] == "open" || arg[0] == "append") {
|
||||||
nfs.out = m.Optionv("out").(*os.File)
|
nfs.out = m.Optionv("out").(*os.File)
|
||||||
nfs.in = m.Optionv("in").(*os.File)
|
nfs.in = m.Optionv("in").(*os.File)
|
||||||
s, e := nfs.in.Stat()
|
s, e := nfs.in.Stat()
|
||||||
m.Assert(e)
|
m.Assert(e)
|
||||||
m.Capi("size", int(s.Size()))
|
m.Capi("size", int(s.Size()))
|
||||||
m.Cap("stream", arg[1])
|
m.Cap("stream", arg[1])
|
||||||
|
if arg[0] == "append" {
|
||||||
|
m.Capi("pos", int(s.Size()))
|
||||||
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Sesss("nfs", m)
|
m.Sess("nfs", m)
|
||||||
|
|
||||||
nfs.Message = m
|
nfs.Message = m
|
||||||
if socket, ok := m.Data["io"]; ok {
|
if socket, ok := m.Data["io"]; ok {
|
||||||
m.Cap("stream", m.Source().Name)
|
m.Cap("stream", m.Source().Name)
|
||||||
// m.Sesss("aaa", "aaa").Cmd("login", "demo", "demo")
|
// m.Sess("aaa", "aaa").Cmd("login", "demo", "demo")
|
||||||
m.Options("stdio", false)
|
m.Options("stdio", false)
|
||||||
|
|
||||||
nfs.io = socket.(io.ReadWriteCloser)
|
nfs.io = socket.(io.ReadWriteCloser)
|
||||||
@ -666,7 +669,7 @@ func (nfs *NFS) Start(m *ctx.Message, arg ...string) bool { // {{{
|
|||||||
for {
|
for {
|
||||||
line, e := nfs.Reader.ReadString('\n')
|
line, e := nfs.Reader.ReadString('\n')
|
||||||
if msg == nil {
|
if msg == nil {
|
||||||
msg = m.Sesss("ssh")
|
msg = m.Sess("ssh")
|
||||||
m.Cap("target", msg.Target().Name)
|
m.Cap("target", msg.Target().Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -976,6 +979,18 @@ var Index = &ctx.Context{Name: "nfs", Help: "存储中心",
|
|||||||
m.Echo(m.Target().Name)
|
m.Echo(m.Target().Name)
|
||||||
// }}}
|
// }}}
|
||||||
}},
|
}},
|
||||||
|
"append": &ctx.Command{
|
||||||
|
Name: "append filename [nfs_name [nfs_help]]",
|
||||||
|
Help: "打开文件, filename: 文件名, nfs_name: 模块名, nfs_help: 模块帮助",
|
||||||
|
Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||||
|
if m.Has("io") { // {{{
|
||||||
|
} else if f, e := os.OpenFile(arg[0], os.O_RDWR|os.O_CREATE|os.O_APPEND, os.ModePerm); m.Assert(e) {
|
||||||
|
m.Put("option", "in", f).Put("option", "out", f)
|
||||||
|
}
|
||||||
|
m.Start(m.Confx("nfs_name", arg, 1), m.Confx("nfs_help", arg, 2), "append", arg[0])
|
||||||
|
m.Echo(m.Target().Name)
|
||||||
|
// }}}
|
||||||
|
}},
|
||||||
"read": &ctx.Command{Name: "read [buf_size [pos]]", Help: "读取文件, buf_size: 读取大小, pos: 读取位置", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
"read": &ctx.Command{Name: "read [buf_size [pos]]", Help: "读取文件, buf_size: 读取大小, pos: 读取位置", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||||
if nfs, ok := m.Target().Server.(*NFS); m.Assert(ok) && nfs.in != nil { // {{{
|
if nfs, ok := m.Target().Server.(*NFS); m.Assert(ok) && nfs.in != nil { // {{{
|
||||||
n, e := strconv.Atoi(m.Confx("buf_size", arg, 0))
|
n, e := strconv.Atoi(m.Confx("buf_size", arg, 0))
|
||||||
|
@ -53,7 +53,7 @@ func (ssh *SSH) Close(m *ctx.Message, arg ...string) bool { // {{{
|
|||||||
if m.Target() == Index {
|
if m.Target() == Index {
|
||||||
go func() {
|
go func() {
|
||||||
m.Target().Begin(m)
|
m.Target().Begin(m)
|
||||||
m.Sesss("nfs", "nfs")
|
m.Sess("nfs", "nfs")
|
||||||
for !m.Caps("stream") {
|
for !m.Caps("stream") {
|
||||||
time.Sleep(time.Second * time.Duration(m.Confi("interval")))
|
time.Sleep(time.Second * time.Duration(m.Confi("interval")))
|
||||||
go ssh.Message.Spawn(m.Target()).Copy(ssh.Message, "detail").Cmd()
|
go ssh.Message.Spawn(m.Target()).Copy(ssh.Message, "detail").Cmd()
|
||||||
@ -117,7 +117,7 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
|||||||
m.Find("nfs").Call(func(file *ctx.Message) *ctx.Message {
|
m.Find("nfs").Call(func(file *ctx.Message) *ctx.Message {
|
||||||
sub := file.Spawn(m.Target())
|
sub := file.Spawn(m.Target())
|
||||||
sub.Start(fmt.Sprintf("host%d", Pulse.Capi("nhost", 1)), "远程主机")
|
sub.Start(fmt.Sprintf("host%d", Pulse.Capi("nhost", 1)), "远程主机")
|
||||||
m.Sesss("ssh", sub)
|
m.Sess("ssh", sub)
|
||||||
return sub
|
return sub
|
||||||
}, m.Meta["detail"])
|
}, m.Meta["detail"])
|
||||||
m.Spawn(m.Target()).Cmd("save")
|
m.Spawn(m.Target()).Cmd("save")
|
||||||
@ -130,7 +130,7 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
|||||||
sub := file.Spawn(m.Target())
|
sub := file.Spawn(m.Target())
|
||||||
sub.Copy(m, "detail")
|
sub.Copy(m, "detail")
|
||||||
sub.Target().Start(sub)
|
sub.Target().Start(sub)
|
||||||
m.Sesss("ssh", sub)
|
m.Sess("ssh", sub)
|
||||||
|
|
||||||
sub.Spawn(sub.Target()).Cmd("pwd", m.Conf("domain"))
|
sub.Spawn(sub.Target()).Cmd("pwd", m.Conf("domain"))
|
||||||
return sub
|
return sub
|
||||||
@ -169,7 +169,7 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
|||||||
m.Copy(msg, "result").Copy(msg, "append")
|
m.Copy(msg, "result").Copy(msg, "append")
|
||||||
m.Back(m)
|
m.Back(m)
|
||||||
} else { //发送命令
|
} else { //发送命令
|
||||||
ssh.Message.Sesss("nfs").CallBack(m.Options("stdio"), func(host *ctx.Message) *ctx.Message {
|
ssh.Message.Sess("nfs").CallBack(m.Options("stdio"), func(host *ctx.Message) *ctx.Message {
|
||||||
m.Back(m.Copy(host, "result").Copy(host, "append"))
|
m.Back(m.Copy(host, "result").Copy(host, "append"))
|
||||||
return nil
|
return nil
|
||||||
}, "send", "send", arg)
|
}, "send", "send", arg)
|
||||||
@ -261,14 +261,14 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
|||||||
}, c)
|
}, c)
|
||||||
}},
|
}},
|
||||||
"save": &ctx.Command{Name: "save", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
"save": &ctx.Command{Name: "save", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||||
json := m.Sesss("nfs") // {{{
|
json := m.Sess("nfs") // {{{
|
||||||
json.Put("option", "data", map[string]string{"domain": m.Cap("domain")})
|
json.Put("option", "data", map[string]string{"domain": m.Cap("domain")})
|
||||||
json.Cmd("json", m.Conf("domain.json"))
|
json.Cmd("json", m.Conf("domain.json"))
|
||||||
m.Sesss("nfs").Cmd("genqr", m.Conf("domain.png"), json.Result(0))
|
m.Sess("nfs").Cmd("genqr", m.Conf("domain.png"), json.Result(0))
|
||||||
// }}}
|
// }}}
|
||||||
}},
|
}},
|
||||||
"who": &ctx.Command{Name: "who", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
"who": &ctx.Command{Name: "who", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||||
aaa := m.Sesss("aaa") // {{{
|
aaa := m.Sess("aaa") // {{{
|
||||||
if aaa != nil {
|
if aaa != nil {
|
||||||
m.Echo(aaa.Cap("group"))
|
m.Echo(aaa.Cap("group"))
|
||||||
}
|
}
|
||||||
@ -312,7 +312,7 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
|
|||||||
if len(arg) > 2 {
|
if len(arg) > 2 {
|
||||||
cmds = arg[2]
|
cmds = arg[2]
|
||||||
}
|
}
|
||||||
current := m.Sesss(arg[1], arg[1], "search").Target()
|
current := m.Sess(arg[1], arg[1], "search").Target()
|
||||||
if x, ok := current.Index[cmds]; ok {
|
if x, ok := current.Index[cmds]; ok {
|
||||||
current = x
|
current = x
|
||||||
} else if cmds != "" && cmds != "root" {
|
} else if cmds != "" && cmds != "root" {
|
||||||
|
@ -603,7 +603,7 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
|
|||||||
msg.Option("current_module", m.Option("dir"))
|
msg.Option("current_module", m.Option("dir"))
|
||||||
msg.Option("current_domain", m.Option("domain"))
|
msg.Option("current_domain", m.Option("domain"))
|
||||||
m.Add("option", "tmpl", v)
|
m.Add("option", "tmpl", v)
|
||||||
m.Sesss(v, msg)
|
m.Sess(v, msg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m.Append("template", m.Conf("travel_main"), m.Conf("travel_tmpl"))
|
m.Append("template", m.Conf("travel_main"), m.Conf("travel_tmpl"))
|
||||||
@ -632,7 +632,7 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 共享列表
|
// 共享列表
|
||||||
share := m.Sesss("share", m.Target())
|
share := m.Sess("share", m.Target())
|
||||||
index := share.Target().Index
|
index := share.Target().Index
|
||||||
if index != nil && index[aaa.Append("userrole")] != nil {
|
if index != nil && index[aaa.Append("userrole")] != nil {
|
||||||
for k, v := range index[aaa.Append("userrole")].Index {
|
for k, v := range index[aaa.Append("userrole")].Index {
|
||||||
@ -656,7 +656,7 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
|
|||||||
fs, e := ioutil.ReadDir(m.Option("dir"))
|
fs, e := ioutil.ReadDir(m.Option("dir"))
|
||||||
m.Assert(e)
|
m.Assert(e)
|
||||||
fs = append(fs, s)
|
fs = append(fs, s)
|
||||||
list := m.Sesss("list", m.Target())
|
list := m.Sess("list", m.Target())
|
||||||
list.Option("dir", m.Option("dir"))
|
list.Option("dir", m.Option("dir"))
|
||||||
|
|
||||||
for _, v := range fs {
|
for _, v := range fs {
|
||||||
@ -712,7 +712,7 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
|
|||||||
// 执行命令
|
// 执行命令
|
||||||
switch m.Option("cmd") {
|
switch m.Option("cmd") {
|
||||||
case "git":
|
case "git":
|
||||||
git := m.Sesss("git", m.Target())
|
git := m.Sess("git", m.Target())
|
||||||
|
|
||||||
branch := m.Find("nfs").Cmd("git", "-C", m.Option("dir"), "branch")
|
branch := m.Find("nfs").Cmd("git", "-C", m.Option("dir"), "branch")
|
||||||
git.Option("branch", branch.Result(0))
|
git.Option("branch", branch.Result(0))
|
||||||
|
@ -94,8 +94,8 @@ func (yac *YAC) train(m *ctx.Message, page, hash int, word []string) (int, []*Po
|
|||||||
default:
|
default:
|
||||||
x, ok := yac.page[word[i]]
|
x, ok := yac.page[word[i]]
|
||||||
if !ok {
|
if !ok {
|
||||||
if x = m.Sesss("lex").Cmd("parse", word[i], yac.name(s)).Resulti(0); x == 0 {
|
if x = m.Sess("lex").Cmd("parse", word[i], yac.name(s)).Resulti(0); x == 0 {
|
||||||
x = m.Sesss("lex").Cmd("train", word[i], len(yac.mat[s]), yac.name(s)).Resulti(0)
|
x = m.Sess("lex").Cmd("train", word[i], len(yac.mat[s]), yac.name(s)).Resulti(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
c := byte(x)
|
c := byte(x)
|
||||||
@ -193,7 +193,7 @@ func (yac *YAC) parse(m *ctx.Message, out *ctx.Message, page int, void int, line
|
|||||||
hash, word := 0, []string{}
|
hash, word := 0, []string{}
|
||||||
for star, s := 0, page; s != 0 && len(line) > 0; {
|
for star, s := 0, page; s != 0 && len(line) > 0; {
|
||||||
//解析空白
|
//解析空白
|
||||||
lex := m.Sesss("lex")
|
lex := m.Sess("lex")
|
||||||
lex.Cmd("parse", line, yac.name(void))
|
lex.Cmd("parse", line, yac.name(void))
|
||||||
if lex.Result(0) == "-1" {
|
if lex.Result(0) == "-1" {
|
||||||
break
|
break
|
||||||
@ -201,7 +201,7 @@ func (yac *YAC) parse(m *ctx.Message, out *ctx.Message, page int, void int, line
|
|||||||
|
|
||||||
//解析单词
|
//解析单词
|
||||||
line = lex.Result(1)
|
line = lex.Result(1)
|
||||||
lex = m.Sesss("lex")
|
lex = m.Sess("lex")
|
||||||
lex.Cmd("parse", line, yac.name(s))
|
lex.Cmd("parse", line, yac.name(s))
|
||||||
if lex.Result(0) == "-1" {
|
if lex.Result(0) == "-1" {
|
||||||
break
|
break
|
||||||
@ -212,7 +212,7 @@ func (yac *YAC) parse(m *ctx.Message, out *ctx.Message, page int, void int, line
|
|||||||
state := yac.mat[s][c]
|
state := yac.mat[s][c]
|
||||||
|
|
||||||
if state != nil { //全局语法检查
|
if state != nil { //全局语法检查
|
||||||
if key := m.Sesss("lex").Cmd("parse", line, "key"); key.Resulti(0) == 0 || len(key.Result(2)) <= len(lex.Result(2)) {
|
if key := m.Sess("lex").Cmd("parse", line, "key"); key.Resulti(0) == 0 || len(key.Result(2)) <= len(lex.Result(2)) {
|
||||||
line, word = lex.Result(1), append(word, lex.Result(2))
|
line, word = lex.Result(1), append(word, lex.Result(2))
|
||||||
} else {
|
} else {
|
||||||
state = nil
|
state = nil
|
||||||
@ -308,7 +308,7 @@ func (yac *YAC) Start(m *ctx.Message, arg ...string) (close bool) { // {{{
|
|||||||
yac.Message = m
|
yac.Message = m
|
||||||
|
|
||||||
if len(arg) > 0 && arg[0] == "parse" {
|
if len(arg) > 0 && arg[0] == "parse" {
|
||||||
lex := m.Sesss("lex")
|
lex := m.Sess("lex")
|
||||||
if lex.Cap("status") != "start" {
|
if lex.Cap("status") != "start" {
|
||||||
lex.Target().Start(lex)
|
lex.Target().Start(lex)
|
||||||
}
|
}
|
||||||
@ -326,7 +326,7 @@ func (yac *YAC) Start(m *ctx.Message, arg ...string) (close bool) { // {{{
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
//加载文件
|
//加载文件
|
||||||
nfs := m.Sesss("nfs").Call(func(buf *ctx.Message) *ctx.Message {
|
nfs := m.Sess("nfs").Call(func(buf *ctx.Message) *ctx.Message {
|
||||||
out = buf
|
out = buf
|
||||||
data <- buf.Detail(0) + "; "
|
data <- buf.Detail(0) + "; "
|
||||||
<-next
|
<-next
|
||||||
@ -442,7 +442,7 @@ var Index = &ctx.Context{Name: "yac", Help: "语法中心",
|
|||||||
yac.hand[hash] = arg[1]
|
yac.hand[hash] = arg[1]
|
||||||
}
|
}
|
||||||
|
|
||||||
// if m.Sesss("lex") == nil {
|
// if m.Sess("lex") == nil {
|
||||||
// lex := m.Sess("lex", "lex")
|
// lex := m.Sess("lex", "lex")
|
||||||
// if lex.Cap("status") == "start" {
|
// if lex.Cap("status") == "start" {
|
||||||
// lex.Start(yac.Context.Name+"lex", "语法词法")
|
// lex.Start(yac.Context.Name+"lex", "语法词法")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user