forked from x/icebergs
add mdb.repeat
This commit is contained in:
parent
f9302ca410
commit
a50ef26303
@ -2,12 +2,13 @@ package cli
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"github.com/skip2/go-qrcode"
|
||||
"image/color"
|
||||
"math/rand"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/skip2/go-qrcode"
|
||||
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/aaa"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
@ -125,9 +126,9 @@ func init() {
|
||||
m.Option(SIZE, kit.Select("240", arg, 3))
|
||||
|
||||
if aaa.SessIsCli(m) {
|
||||
_qrcode_cli(m, arg[0])
|
||||
_qrcode_cli(m, kit.Select("hi", arg, 0))
|
||||
} else {
|
||||
_qrcode_web(m, arg[0])
|
||||
_qrcode_web(m, kit.Select("hi", arg, 0))
|
||||
}
|
||||
}},
|
||||
},
|
||||
|
@ -404,12 +404,13 @@ const (
|
||||
SELECT = "select"
|
||||
DELETE = "delete"
|
||||
REMOVE = "remove"
|
||||
REVERT = "revert"
|
||||
|
||||
EXPORT = "export"
|
||||
IMPORT = "import"
|
||||
PRUNES = "prunes"
|
||||
INPUTS = "inputs"
|
||||
REPEAT = "repeat"
|
||||
REVERT = "revert"
|
||||
)
|
||||
const (
|
||||
CACHE_LIMIT = "cache.limit"
|
||||
|
@ -55,7 +55,7 @@ func _ssh_watch(m *ice.Message, meta map[string]string, h string, input io.Reade
|
||||
m.Cmdy(mdb.INSERT, CHANNEL, kit.Keys(kit.MDB_HASH, h), mdb.LIST, kit.MDB_TYPE, CMD, kit.MDB_TEXT, cmd)
|
||||
i = 0
|
||||
default:
|
||||
if i += n; i >= 4096 {
|
||||
if i += n; i >= ice.MOD_BUFS {
|
||||
i = 0
|
||||
}
|
||||
}
|
||||
@ -80,6 +80,9 @@ func init() {
|
||||
m.Cmdy(mdb.PRUNES, SERVICE, "", mdb.HASH, kit.MDB_STATUS, tcp.ERROR)
|
||||
m.Cmdy(mdb.PRUNES, CHANNEL, "", mdb.HASH, kit.MDB_STATUS, tcp.CLOSE)
|
||||
}},
|
||||
mdb.REPEAT: {Name: "repeat", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(CHANNEL, kit.MDB_ACTION, ctx.COMMAND, CMD, m.Option(kit.MDB_TEXT))
|
||||
}},
|
||||
ctx.COMMAND: {Name: "command cmd=pwd", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, CHANNEL, kit.Keys(kit.MDB_HASH, m.Option(kit.MDB_HASH)), mdb.LIST, kit.MDB_TYPE, CMD, kit.MDB_TEXT, m.Option(CMD))
|
||||
m.Richs(CHANNEL, "", m.Option(kit.MDB_HASH), func(key string, value map[string]interface{}) {
|
||||
@ -89,9 +92,6 @@ func init() {
|
||||
})
|
||||
m.ProcessRefresh("300ms")
|
||||
}},
|
||||
"repeat": {Name: "repeat", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(CHANNEL, kit.MDB_ACTION, ctx.COMMAND, CMD, m.Option("text"))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) == 0 { // 通道列表
|
||||
m.Fields(len(arg) == 0, "time,hash,status,username,hostport,tty,count")
|
||||
@ -106,7 +106,7 @@ func init() {
|
||||
// 通道命令
|
||||
m.Fields(len(arg) == 1, "time,id,type,text")
|
||||
m.Cmdy(mdb.SELECT, CHANNEL, kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:])
|
||||
m.PushAction("repeat")
|
||||
m.PushAction(mdb.REPEAT)
|
||||
}},
|
||||
},
|
||||
})
|
||||
|
@ -30,7 +30,7 @@ func _ssh_open(m *ice.Message, arg ...string) {
|
||||
|
||||
// 设置宽高
|
||||
w, h, _ := terminal.GetSize(fd)
|
||||
c.Write([]byte(fmt.Sprintf("height:%d,width:%d\n", h, w)))
|
||||
c.Write([]byte(fmt.Sprintf("#height:%d,width:%d\n", h, w)))
|
||||
|
||||
// 初始命令
|
||||
for _, item := range kit.Simple(m.Optionv(kit.MDB_LIST)) {
|
||||
@ -68,7 +68,7 @@ func _ssh_dial(m *ice.Message, cb func(net.Conn), arg ...string) {
|
||||
w, h, _ := terminal.GetSize(int(os.Stdin.Fd()))
|
||||
buf := make([]byte, ice.MOD_BUFS)
|
||||
if n, e := c.Read(buf); m.Assert(e) {
|
||||
fmt.Sscanf(string(buf[:n]), "height:%d,width:%d", &h, &w)
|
||||
fmt.Sscanf(string(buf[:n]), "#height:%d,width:%d", &h, &w)
|
||||
}
|
||||
|
||||
m.Go(func() {
|
||||
@ -202,7 +202,6 @@ func init() {
|
||||
m.Richs(CONNECT, "", m.Option(kit.MDB_HASH), func(key string, value map[string]interface{}) {
|
||||
client, _ = value[CONNECT].(*ssh.Client)
|
||||
})
|
||||
m.Debug("what %v", client)
|
||||
|
||||
h := m.Rich(SESSION, "", kit.Data(kit.MDB_STATUS, tcp.OPEN, CONNECT, m.Option(kit.MDB_HASH)))
|
||||
if session, e := _ssh_session(m, h, client); m.Assert(e) {
|
||||
|
@ -104,8 +104,6 @@ type Frame struct {
|
||||
last string
|
||||
ps1 []string
|
||||
ps2 []string
|
||||
|
||||
exit bool
|
||||
}
|
||||
|
||||
func (f *Frame) prompt(m *ice.Message, list ...string) *Frame {
|
||||
@ -238,7 +236,7 @@ func (f *Frame) parse(m *ice.Message, line string) string {
|
||||
return ""
|
||||
}
|
||||
func (f *Frame) scan(m *ice.Message, h, line string) *Frame {
|
||||
m.Option(kit.Keycb(RETURN), func() { f.exit = true })
|
||||
m.Option(kit.Keycb(RETURN), func() { f.close() })
|
||||
f.ps1 = kit.Simple(m.Confv(PROMPT, kit.Keym(PS1)))
|
||||
f.ps2 = kit.Simple(m.Confv(PROMPT, kit.Keym(PS2)))
|
||||
ps := f.ps1
|
||||
@ -246,7 +244,7 @@ func (f *Frame) scan(m *ice.Message, h, line string) *Frame {
|
||||
m.Sleep("300ms")
|
||||
m.I, m.O = f.stdin, f.stdout
|
||||
bio := bufio.NewScanner(f.stdin)
|
||||
for f.prompt(m, ps...); bio.Scan() && !f.exit; f.prompt(m, ps...) {
|
||||
for f.prompt(m, ps...); bio.Scan() && f.stdin != nil; f.prompt(m, ps...) {
|
||||
if h == STDIO && len(bio.Text()) == 0 {
|
||||
continue // 空行
|
||||
}
|
||||
@ -255,6 +253,9 @@ func (f *Frame) scan(m *ice.Message, h, line string) *Frame {
|
||||
f.count++
|
||||
|
||||
if len(bio.Text()) == 0 {
|
||||
if strings.Count(line, "`")%2 == 1 {
|
||||
line += "\n"
|
||||
}
|
||||
continue // 空行
|
||||
}
|
||||
|
||||
@ -280,6 +281,14 @@ func (f *Frame) scan(m *ice.Message, h, line string) *Frame {
|
||||
}
|
||||
return f
|
||||
}
|
||||
func (f *Frame) close() {
|
||||
fmt.Printf("what %v\n", 123)
|
||||
if stdin, ok := f.stdin.(io.Closer); ok {
|
||||
stdin.Close()
|
||||
f.stdin = nil
|
||||
fmt.Printf("what %v\n", 123)
|
||||
}
|
||||
}
|
||||
|
||||
func (f *Frame) Begin(m *ice.Message, arg ...string) ice.Server {
|
||||
return f
|
||||
@ -350,9 +359,8 @@ const (
|
||||
TARGET = "target"
|
||||
PROMPT = "prompt"
|
||||
PRINTF = "printf"
|
||||
RETURN = "return"
|
||||
|
||||
SCREEN = "screen"
|
||||
RETURN = "return"
|
||||
)
|
||||
|
||||
func init() {
|
||||
@ -366,8 +374,8 @@ func init() {
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
SOURCE: {Name: "source hash id limit offend auto", Help: "脚本解析", Action: map[string]*ice.Action{
|
||||
"repeat": {Name: "repeat", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(SCREEN, m.Option("text"))
|
||||
mdb.REPEAT: {Name: "repeat", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(SCREEN, m.Option(kit.MDB_TEXT))
|
||||
m.ProcessInner()
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
@ -392,7 +400,7 @@ func init() {
|
||||
// 命令列表
|
||||
m.Fields(len(arg) == 1 || arg[1] == "", "time,id,text")
|
||||
m.Cmdy(mdb.SELECT, SOURCE, kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:])
|
||||
m.PushAction("repeat")
|
||||
m.PushAction(mdb.REPEAT)
|
||||
}},
|
||||
TARGET: {Name: "target name 执行:button", Help: "当前模块", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
f := m.Target().Server().(*Frame)
|
||||
|
@ -80,8 +80,8 @@ func init() {
|
||||
})
|
||||
m.ProcessRefresh("300ms")
|
||||
}},
|
||||
"repeat": {Name: "repeat", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(SESSION, kit.MDB_ACTION, ctx.COMMAND, CMD, m.Option("text"))
|
||||
mdb.REPEAT: {Name: "repeat", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(SESSION, kit.MDB_ACTION, ctx.COMMAND, CMD, m.Option(kit.MDB_TEXT))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) == 0 {
|
||||
@ -97,7 +97,7 @@ func init() {
|
||||
m.Fields(len(arg) == 1, "time,id,type,text")
|
||||
m.Cmdy(mdb.SELECT, SESSION, kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:])
|
||||
m.Table(func(index int, value map[string]string, head []string) {
|
||||
m.PushButton(kit.Select("", "repeat", value["type"] == "cmd"))
|
||||
m.PushButton(kit.Select("", mdb.REPEAT, value[kit.MDB_TYPE] == CMD))
|
||||
})
|
||||
}},
|
||||
},
|
||||
|
@ -19,8 +19,8 @@ var Index = &ice.Context{Name: SSH, Help: "终端模块", Commands: map[string]*
|
||||
})
|
||||
}},
|
||||
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if _, ok := m.Target().Server().(*Frame); ok {
|
||||
m.Done(true)
|
||||
if f, ok := m.Target().Server().(*Frame); ok {
|
||||
f.close()
|
||||
}
|
||||
m.Save()
|
||||
}},
|
||||
|
@ -13,7 +13,7 @@ var Index = &ice.Context{Name: CODE, Help: "编程中心", Commands: map[string]
|
||||
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Load()
|
||||
m.Conf(PUBLISH, kit.Keym(ice.CONTEXTS), _contexts)
|
||||
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, "web.code.publish")
|
||||
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.Prefix(PUBLISH))
|
||||
}},
|
||||
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Save()
|
||||
|
@ -211,6 +211,8 @@ func init() {
|
||||
"msg", FUNCTION,
|
||||
"m", FUNCTION,
|
||||
|
||||
"false", STRING,
|
||||
"true", STRING,
|
||||
"nil", STRING,
|
||||
"-1", STRING,
|
||||
"0", STRING,
|
||||
|
@ -1,14 +1,14 @@
|
||||
package code
|
||||
|
||||
import (
|
||||
"path"
|
||||
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/cli"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/nfs"
|
||||
"github.com/shylinux/icebergs/base/web"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"path"
|
||||
)
|
||||
|
||||
const JS = "js"
|
||||
|
4
go.sum
4
go.sum
@ -1,9 +1,13 @@
|
||||
github.com/AaronO/go-git-http v0.0.0-20161214145340-1d9485b3a98f/go.mod h1:+6Yuq73F9068Na+mSBNXCvyuxvgw4f/g5ii40e3U8Sc=
|
||||
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
|
||||
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
|
||||
github.com/shylinux/toolkits v0.2.3 h1:UdE5dUKtc+iVeco9sFrlj98BxVJADYoLNeywTnLrSMc=
|
||||
github.com/shylinux/toolkits v0.2.3/go.mod h1:oMwi/N00I2cXenmcAkqikEncTzB4u5JhTQ9mO5xj7sY=
|
||||
github.com/shylinux/toolkits v0.2.4 h1:2TaRBYdt15dE9vTUTO++6aF66vOZNd+ruP3be1C4zaY=
|
||||
github.com/shylinux/toolkits v0.2.4/go.mod h1:oMwi/N00I2cXenmcAkqikEncTzB4u5JhTQ9mO5xj7sY=
|
||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
|
||||
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
|
||||
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
|
4
init.go
4
init.go
@ -1,8 +1,6 @@
|
||||
package ice
|
||||
|
||||
import (
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
@ -10,6 +8,8 @@ import (
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
kit "github.com/shylinux/toolkits"
|
||||
)
|
||||
|
||||
var Info = struct {
|
||||
|
Loading…
x
Reference in New Issue
Block a user