1
0
forked from x/ContextOS

vpn pro ctx 修改了一些语法细节

This commit is contained in:
shaoying 2017-11-10 18:15:17 +08:00
parent 47c81a79fd
commit bdc2fd7102
2 changed files with 59 additions and 58 deletions

View File

@ -184,7 +184,7 @@ func (cli *CLI) Start(m *ctx.Message, arg ...string) bool { // {{{
cli.Messages = make(chan *ctx.Message, cli.Confi("MessageQueueSize"))
}
if len(arg) > 0 {
cli.Configs["init.sh"] = &ctx.Config{Name: "启动脚本", Value: arg[0], Help: "模块启动时自动运行的脚本"}
cli.Conf("init.sh", "启动脚本", arg[0], "模块启动时自动运行的脚本")
}
if stream, ok := m.Data["io"]; ok {
@ -214,7 +214,7 @@ func (cli *CLI) Start(m *ctx.Message, arg ...string) bool { // {{{
cli.history = append(cli.history, map[string]string{
"time": time.Now().Format("15:04:05"),
"index": fmt.Sprintf("%d", len(cli.history)),
"cli": strings.Join(arg, " "),
"cli": strings.Join(msg.Meta["detail"], " "),
})
if len(arg) > 0 {
@ -296,7 +296,7 @@ var Index = &ctx.Context{Name: "cli", Help: "管理终端",
return ""
}
target := m.Target.Root
target := m.Target
method := "search"
action := "switch"
which := ""
@ -350,18 +350,17 @@ var Index = &ctx.Context{Name: "cli", Help: "管理终端",
cli.target = v
case "spawn":
msg := m.Spawn(v)
v.Spawn(msg, args[0], args[1:]...)
v.Begin(msg)
v.Spawn(msg, args[0], args[1:]...).Begin(msg)
case "start":
m.Spawn(v).Start(args...)
m.Message.Spawn(v, args[0]).Start(args...)
case "show":
m.Echo("%s: %s\n", v.Name, v.Help)
m.Echo("引用模块:\n")
for k, v := range v.Session {
for k, v := range v.Sessions {
m.Echo("\t%s(%d): %s %s\n", k, v.Code, v.Target.Name, v.Target.Help)
}
m.Echo("索引模块:\n")
for i, v := range v.Resource {
for i, v := range v.Requests {
m.Echo("\t%d(%d): %s %s\n", i, v.Code, v.Context.Name, v.Context.Help)
}
}
@ -604,7 +603,7 @@ var Index = &ctx.Context{Name: "cli", Help: "管理终端",
}},
"open": &ctx.Command{Name: "open address protocl", Help: "建立远程连接",
Options: map[string]string{"io": "读写流"},
Hand: func(c *ctx.Context, m *ctx.Message, key string, arg ...string) string {
Hand: func(c *ctx.Context, m *ctx.Message, key string, arg ...string) string { // {{{
if m.Has("io") {
m.Start(fmt.Sprintf("PTS%d", c.Capi("nterm")), arg[1])
} else {
@ -612,7 +611,6 @@ var Index = &ctx.Context{Name: "cli", Help: "管理终端",
case "tcp":
}
}
// {{{
return ""
// }}}
}},

View File

@ -67,7 +67,7 @@ func (m *Message) Spawn(c *Context, key ...string) *Message { // {{{
Time: time.Now(),
Target: c,
Message: m,
Root: Pulse,
Root: m.Root,
}
msg.Context = m.Target
@ -81,10 +81,10 @@ func (m *Message) Spawn(c *Context, key ...string) *Message { // {{{
m.Messages = append(m.Messages, msg)
msg.Code = m.Capi("nmessage", 1)
if msg.Session == nil {
msg.Session = make(map[string]*Message)
if msg.Sessions == nil {
msg.Sessions = make(map[string]*Message)
}
msg.Session[key[0]] = msg
msg.Sessions[key[0]] = msg
msg.Name = key[0]
log.Printf("%d spawn %d: %s.%s->%s.%d", m.Code, msg.Code, msg.Context.Name, msg.Name, msg.Target.Name, msg.Index)
@ -221,6 +221,9 @@ func (m *Message) Post(c *Context, arg ...string) bool { // {{{
// }}}
func (m *Message) Start(arg ...string) bool { // {{{
if len(arg) > 0 {
if m.Meta == nil {
m.Meta = make(map[string][]string)
}
m.Meta["detail"] = arg
}
@ -252,11 +255,11 @@ type Context struct {
Message *Message
Server
Resource []*Message
Session map[string]*Message
Requests []*Message
Sessions map[string]*Message
Index map[string]*Context
Shadows map[string]*Context
Index map[string]*Context
Groups map[string]*Context
Contexts map[string]*Context
Context *Context
@ -329,8 +332,7 @@ func (c *Context) Register(s *Context, x Server) *Context { // {{{
func (c *Context) Begin(m *Message) *Context { // {{{
for k, x := range c.Configs {
if x.Hand != nil {
log.Printf("%s conf: %s(%s)", c.Name, k, x.Value)
x.Hand(c, x, x.Value)
c.Conf(k, x.Value)
}
}
@ -341,6 +343,7 @@ func (c *Context) Begin(m *Message) *Context { // {{{
c.Server.Begin(m)
}
}
return c
}
@ -357,9 +360,9 @@ func (c *Context) Start(m *Message) bool { // {{{
log.Printf("%d start(%d): %s %s", m.Code, Index.Capi("nserver", 1), c.Name, c.Help)
defer Index.Capi("nserver", -1)
defer log.Printf("%d stop(%d): %s %s", m.Code, Index.Capi("nserver"), c.Name, c.Help)
defer log.Printf("%d stop(%s): %s %s", m.Code, Index.Cap("nserver"), c.Name, c.Help)
c.Resource = []*Message{m}
c.Requests = []*Message{m}
c.Server.Start(m, m.Meta["detail"]...)
})
}
@ -425,7 +428,7 @@ func (c *Context) Deal(pre func(m *Message, arg ...string) bool, post func(m *Me
// }}}
func (c *Context) Exit(m *Message, arg ...string) { // {{{
if m.Target == c {
for _, v := range c.Session {
for _, v := range c.Sessions {
if v.Name != "" {
v.Name = ""
v.Target.Exit(v, arg...)
@ -438,7 +441,7 @@ func (c *Context) Exit(m *Message, arg ...string) { // {{{
log.Println(c.Name, c.Help, "exit: self", m.Code)
}
for _, v := range c.Resource {
for _, v := range c.Requests {
if v.Index != -1 {
v.Context.Exit(v, arg...)
log.Println(c.Name, c.Help, "exit: resource", v.Code, v.Context.Name, v.Context.Help)
@ -470,18 +473,18 @@ func (c *Context) Add(arg ...string) { // {{{
panic(errors.New(v.Name + "上下文已存在"))
}
if c.Shadows == nil {
c.Shadows = make(map[string]*Context)
if c.Groups == nil {
c.Groups = make(map[string]*Context)
}
c.Shadows[arg[1]] = &Context{Name: arg[2], Help: arg[3], Index: c.Index}
c.Index[arg[1]] = c.Shadows[arg[1]]
c.Groups[arg[1]] = &Context{Name: arg[2], Help: arg[3], Index: c.Index}
c.Index[arg[1]] = c.Groups[arg[1]]
log.Println(c.Name, "add context:", arg[1:])
case "command":
if len(arg) != 3 {
panic(errors.New("参数错误"))
}
if v, ok := c.Shadows[arg[1]]; ok {
if v, ok := c.Groups[arg[1]]; ok {
if v.Commands == nil {
v.Commands = make(map[string]*Command)
}
@ -502,7 +505,7 @@ func (c *Context) Add(arg ...string) { // {{{
panic(errors.New("参数错误"))
}
if v, ok := c.Shadows[arg[1]]; ok {
if v, ok := c.Groups[arg[1]]; ok {
if v.Configs == nil {
v.Configs = make(map[string]*Config)
}
@ -523,7 +526,7 @@ func (c *Context) Add(arg ...string) { // {{{
panic(errors.New("参数错误"))
}
if v, ok := c.Shadows[arg[1]]; ok {
if v, ok := c.Groups[arg[1]]; ok {
if v.Caches == nil {
v.Caches = make(map[string]*Cache)
}
@ -552,14 +555,14 @@ func (c *Context) Del(arg ...string) { // {{{
panic(errors.New("参数错误"))
}
if v, ok := c.Shadows[arg[1]]; ok {
if v, ok := c.Groups[arg[1]]; ok {
cs = append(cs, v)
delete(c.Index, arg[1])
delete(c.Shadows, arg[1])
delete(c.Groups, arg[1])
log.Println(c.Name, "del context:", arg[1])
}
for i := 0; i < len(cs); i++ {
for k, v := range cs[i].Shadows {
for k, v := range cs[i].Groups {
cs = append(cs, v)
delete(c.Index, k)
log.Println(c.Name, "del context:", k)
@ -570,13 +573,13 @@ func (c *Context) Del(arg ...string) { // {{{
panic(errors.New("参数错误"))
}
if v, ok := c.Shadows[arg[1]]; ok {
if v, ok := c.Groups[arg[1]]; ok {
cs = append(cs, v)
delete(v.Commands, arg[2])
log.Println(v.Name, "del command:", arg[2])
}
for i := 0; i < len(cs); i++ {
for _, v := range cs[i].Shadows {
for _, v := range cs[i].Groups {
cs = append(cs, v)
delete(v.Commands, arg[2])
log.Println(v.Name, "del command:", arg[2])
@ -587,13 +590,13 @@ func (c *Context) Del(arg ...string) { // {{{
panic(errors.New("参数错误"))
}
if v, ok := c.Shadows[arg[1]]; ok {
if v, ok := c.Groups[arg[1]]; ok {
cs = append(cs, v)
delete(v.Configs, arg[2])
log.Println(v.Name, "del config:", arg[2])
}
for i := 0; i < len(cs); i++ {
for _, v := range cs[i].Shadows {
for _, v := range cs[i].Groups {
cs = append(cs, v)
delete(v.Configs, arg[2])
log.Println(v.Name, "del config:", arg[2])
@ -604,13 +607,13 @@ func (c *Context) Del(arg ...string) { // {{{
panic(errors.New("参数错误"))
}
if v, ok := c.Shadows[arg[1]]; ok {
if v, ok := c.Groups[arg[1]]; ok {
cs = append(cs, v)
delete(v.Caches, arg[2])
log.Println(v.Name, "del cache:", arg[2])
}
for i := 0; i < len(cs); i++ {
for _, v := range cs[i].Shadows {
for _, v := range cs[i].Groups {
cs = append(cs, v)
delete(v.Caches, arg[2])
log.Println(v.Name, "del cache:", arg[2])
@ -827,9 +830,9 @@ func (c *Context) Capi(key string, arg ...int) int { // {{{
// }}}
var Pulse = &Message{Code: 1, Time: time.Now(), Index: 0, Name: "root"}
var Pulse = &Message{Code: 1, Time: time.Now(), Name: "ctx", Index: 0}
var Index = &Context{Name: "ctx", Help: "所有模块的祖模块",
var Index = &Context{Name: "ctx", Help: "模块",
Caches: map[string]*Cache{
"nserver": &Cache{Name: "服务数量", Value: "0", Help: "显示已经启动运行模块的数量"},
"ncontext": &Cache{Name: "模块数量", Value: "1", Help: "显示功能树已经注册模块的数量"},
@ -871,21 +874,25 @@ var Index = &Context{Name: "ctx", Help: "所有模块的祖模块",
// }}}
}},
"debug": &Config{Name: "调试模式(off/no)", Value: "off", Help: "是否打印错误信息off:不打印on:打印)"},
"ContextRequestSize": &Config{Name: "请求队列长度", Value: "10", Help: "每个模块可以被其它模块引用的的数量"},
"ContextSessionSize": &Config{Name: "会话队列长度", Value: "10", Help: "每个模块可以启动其它模块的数量"},
"MessageQueueSize": &Config{Name: "消息队列长度", Value: "10", Help: "每个模块接收消息的队列长度"},
"cert": &Config{Name: "证书文件", Value: "etc/cert.pem", Help: "证书文件"},
"key": &Config{Name: "私钥文件", Value: "etc/key.pem", Help: "私钥文件"},
"debug": &Config{Name: "调试模式(off/no)", Value: "off", Help: "是否打印错误信息off:不打印on:打印)"},
"cert": &Config{Name: "证书文件", Value: "etc/cert.pem", Help: "证书文件"},
"key": &Config{Name: "私钥文件", Value: "etc/key.pem", Help: "私钥文件"},
},
Commands: map[string]*Command{
"void": &Command{Name: "输出简单的信息", Help: "建立远程连接", Hand: func(c *Context, m *Message, key string, arg ...string) string {
m.Echo("hello void!\n") // {{{
"show": &Command{Name: "输出简单的信息", Help: "建立远程连接", Hand: func(c *Context, m *Message, key string, arg ...string) string {
m.Echo("nserver: %s\n", c.Cap("nserver")) // {{{
m.Echo("ncontext: %s\n", c.Cap("ncontext"))
m.Echo("nmessage: %s\n", c.Cap("nmessage"))
return ""
// }}}
}},
},
Session: map[string]*Message{"root": Pulse},
Resource: []*Message{Pulse},
Requests: []*Message{Pulse},
Sessions: map[string]*Message{"root": Pulse},
}
func init() {
@ -916,15 +923,11 @@ func Start() {
Pulse.Context = Index
Pulse.Wait = make(chan bool, 10)
cs := []*Context{Index}
for i := 0; i < len(cs); i++ {
cs[i].Root = Index
cs[i].Begin(nil)
for _, v := range cs[i].Contexts {
cs = append(cs, v)
}
}
Index.Travel(func(s *Context) bool {
s.Root = Index
s.Begin(nil)
return true
})
n := 0
for _, s := range Index.Contexts {