diff --git a/src/context/mdb/mdb.go b/src/context/mdb/mdb.go index 58ba75eb..0b50ca8f 100644 --- a/src/context/mdb/mdb.go +++ b/src/context/mdb/mdb.go @@ -23,15 +23,6 @@ func (mdb *MDB) Spawn(m *ctx.Message, c *ctx.Context, arg ...string) ctx.Server } c.Configs = map[string]*ctx.Config{} - if len(arg) > 0 { - m.Cap("source", arg[0]) - } - if len(arg) > 1 { - m.Cap("driver", arg[1]) - } else { - m.Cap("driver", m.Conf("driver")) - } - s := new(MDB) s.Context = c return s @@ -57,18 +48,19 @@ func (mdb *MDB) Start(m *ctx.Message, arg ...string) bool { // {{{ return false } + m.Cap("stream", m.Cap("source")) db, e := sql.Open(m.Cap("driver"), m.Cap("source")) m.Assert(e) mdb.DB = db - m.Log("info", "%s: %d open %s %s", mdb.Name, m.Capi("nsource", 1), m.Cap("driver"), m.Cap("source")) + m.Log("info", nil, "%d open %s %s", m.Capi("nsource", 1), m.Cap("driver"), m.Cap("source")) return false } // }}} func (mdb *MDB) Close(m *ctx.Message, arg ...string) bool { // {{{ if mdb.DB != nil && m.Target == mdb.Context { - m.Log("info", "%s: %d close %s %s", mdb.Name, m.Capi("nsource", -1)+1, m.Cap("driver"), m.Cap("source")) + m.Log("info", nil, "%d close %s %s", m.Capi("nsource", -1)+1, m.Cap("driver"), m.Cap("source")) mdb.DB.Close() mdb.DB = nil return true @@ -87,13 +79,15 @@ var Index = &ctx.Context{Name: "mdb", Help: "内存数据库", "driver": &ctx.Config{Name: "数据库驱动(mysql)", Value: "mysql", Help: "数据库驱动"}, }, Commands: map[string]*ctx.Command{ - "open": &ctx.Command{Name: "open name help [source [driver]]", Help: "打开数据库", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) string { - m.Master = m.Target // {{{ + "open": &ctx.Command{Name: "open name help source [driver]", Help: "打开数据库", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) string { + m.Assert(len(arg) > 2, "缺少参数") // {{{ + m.Master, m.Target = c, c + m.Cap("stream", m.Cap("nsource")) m.Start(arg[0], arg[1], arg[2:]...) return "" // }}} }}, - "exec": &ctx.Command{Name: "exec sql [arg]", Help: "执行操作语句", + "exec": &ctx.Command{Name: "exec sql [arg]", Help: "操作数据库", Appends: map[string]string{"LastInsertId": "最后插入元组的标识", "RowsAffected": "修改元组的数量"}, Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) string { mdb, ok := m.Target.Server.(*MDB) // {{{ @@ -113,9 +107,10 @@ var Index = &ctx.Context{Name: "mdb", Help: "内存数据库", n, e := ret.RowsAffected() m.Assert(e) + m.Echo("%d", id).Echo("%d", n) m.Add("append", "LastInsertId", fmt.Sprintf("%d", id)) m.Add("append", "RowsAffected", fmt.Sprintf("%d", n)) - m.Log("info", "%s: last(%d) rows(%d)", m.Target.Name, id, n) + m.Log("info", nil, "last(%d) rows(%d)", id, n) return "" // }}} }}, @@ -158,17 +153,7 @@ var Index = &ctx.Context{Name: "mdb", Help: "内存数据库", } } - m.Log("info", "%s: cols(%d) rows(%d)", m.Target.Name, len(m.Meta["append"]), len(m.Meta[m.Meta["append"][0]])) - return "" - // }}} - }}, - "close": &ctx.Command{Name: "close [name]", Help: "关闭数据库", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) string { - if len(arg) > 0 { // {{{ - msg := m.Find(arg[0], m.Master) - msg.Target.Close(msg) - } else { - m.Target.Close(m) - } + m.Log("info", nil, "rows(%d) cols(%d)", len(m.Meta[m.Meta["append"][0]]), len(m.Meta["append"])) return "" // }}} }}, diff --git a/src/context/tcp/tcp.go b/src/context/tcp/tcp.go index ab74b3e8..3fc6855c 100644 --- a/src/context/tcp/tcp.go +++ b/src/context/tcp/tcp.go @@ -47,7 +47,7 @@ func (tcp *TCP) Start(m *ctx.Message, arg ...string) bool { // {{{ m.Assert(e) tcp.Conn = c - m.Log("info", "%s: dial(%d) %v->%v", tcp.Name, m.Capi("nclient"), c.LocalAddr(), c.RemoteAddr()) + m.Log("info", nil, "dial(%d) %v->%v", m.Capi("nclient"), c.LocalAddr(), c.RemoteAddr()) // m.Reply(c.LocalAddr().String()).Put("option", "io", c).Cmd("open") return false case "accept": @@ -58,15 +58,24 @@ func (tcp *TCP) Start(m *ctx.Message, arg ...string) bool { // {{{ m.Assert(e) tcp.Listener = l - m.Log("info", "%s: listen(%d) %v", tcp.Name, m.Capi("nlisten"), l.Addr()) + m.Log("info", nil, "listen(%d) %v", m.Capi("nlisten"), l.Addr()) for { c, e := l.Accept() m.Assert(e) - msg := m.Spawn(tcp.Context.Context) + s, i := m.Target, 0 + m.BackTrace(func(m *ctx.Message) bool { + s = m.Target + if i++; i == 2 { + return false + } + return true + }) + + msg := m.Spawn(s) msg.Start(fmt.Sprintf("com%d", m.Capi("nclient", 1)), c.RemoteAddr().String(), "accept", c.RemoteAddr().String()) - msg.Log("info", "%s: accept(%d) %v<-%v", tcp.Name, m.Capi("nclient"), c.LocalAddr(), c.RemoteAddr()) + msg.Log("info", nil, "accept(%d) %v<-%v", m.Capi("nclient"), c.LocalAddr(), c.RemoteAddr()) if tcp, ok := msg.Target.Server.(*TCP); ok { tcp.Conn = c @@ -82,7 +91,7 @@ func (tcp *TCP) Start(m *ctx.Message, arg ...string) bool { // {{{ // }}} func (tcp *TCP) Close(m *ctx.Message, arg ...string) bool { // {{{ if tcp.Listener != nil { - m.Log("info", "%s: close(%d) %v", tcp.Name, m.Capi("nlisten", -1)+1, tcp.Listener.Addr()) + m.Log("info", nil, "close(%d) %v", m.Capi("nlisten", -1)+1, tcp.Listener.Addr()) tcp.Listener.Close() return true }