1
0
forked from x/icebergs
This commit is contained in:
harveyshao 2022-11-26 21:01:52 +08:00
parent b35ef05a43
commit 12e35976ee
12 changed files with 62 additions and 98 deletions

View File

@ -29,9 +29,7 @@ func (c *Conn) Write(b []byte) (int, error) {
c.s.nw += n
return n, e
}
func (c *Conn) Close() error {
return c.Conn.Close()
}
func (c *Conn) Close() error { return c.Conn.Close() }
func _client_dial(m *ice.Message, arg ...string) {
c, e := net.Dial(TCP, m.Option(HOST)+ice.DF+m.Option(PORT))
@ -39,7 +37,6 @@ func _client_dial(m *ice.Message, arg ...string) {
if e == nil {
defer c.Close()
}
switch cb := m.OptionCB("").(type) {
case func(net.Conn):
if !m.Warn(e) {
@ -54,9 +51,9 @@ const (
PROTO = "proto"
STATUS = "status"
ERROR = "error"
START = "start"
OPEN = "open"
CLOSE = "close"
START = "start"
STOP = "stop"
)
const (
@ -68,7 +65,6 @@ func init() {
Index.MergeCommands(ice.Commands{
CLIENT: {Name: "client hash auto prunes", Help: "客户端", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { m.Conf("", mdb.HASH, "") }},
ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) {}},
DIAL: {Name: "dial type name port=9010 host=", Help: "连接", Hand: func(m *ice.Message, arg ...string) {
_client_dial(m, arg...)
}},

View File

@ -19,14 +19,12 @@ func _host_list(m *ice.Message, name string) {
if len(v.HardwareAddr.String()) == 0 {
continue
}
if ips, e := v.Addrs(); m.Assert(e) {
for _, x := range ips {
ip := strings.Split(x.String(), ice.PS)
if strings.Contains(ip[0], ice.DF) || len(ip) == 0 {
continue
}
m.Push(mdb.INDEX, v.Index)
m.Push(mdb.NAME, v.Name)
m.Push(aaa.IP, ip[0])
@ -36,7 +34,6 @@ func _host_list(m *ice.Message, name string) {
}
}
}
if len(m.Appendv(aaa.IP)) == 0 {
m.Push(mdb.INDEX, -1)
m.Push(mdb.NAME, LOCALHOST)
@ -44,28 +41,14 @@ func _host_list(m *ice.Message, name string) {
m.Push("mask", "255.0.0.0")
m.Push("hard", "")
}
}
func _islocalhost(m *ice.Message, ip string) (ok bool) {
if strings.HasPrefix(ip, "[") {
ip = strings.TrimPrefix(ip, "[")
ip = strings.Split(ip, "]")[0]
}
if ip == "::1" || strings.HasPrefix(ip, "127.") {
return true
}
if mdb.Richs(m, HOST, kit.Keym(aaa.BLACK), ip, nil) != nil {
return false
}
if mdb.Richs(m, HOST, kit.Keym(aaa.WHITE), ip, nil) != nil {
m.Auth(aaa.WHITE, ip)
return true
}
return false
m.StatusTimeCount()
}
const (
LOCALHOST = "localhost"
ISLOCAL = "islocal"
PUBLISH = "publish"
)
const HOST = "host"
@ -73,32 +56,32 @@ func init() {
Index.MergeCommands(ice.Commands{
HOST: {Name: "host name auto", Help: "主机", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
m.Cmd(HOST, func(value ice.Maps) { m.Cmd(HOST, aaa.WHITE, value[aaa.IP]) })
m.Cmd("", func(value ice.Maps) { m.Cmd("", aaa.WHITE, LOCALHOST, value[aaa.IP]) })
}},
aaa.BLACK: {Name: "black", Help: "黑名单", Hand: func(m *ice.Message, arg ...string) {
m.Logs(mdb.CREATE, aaa.BLACK, arg[0])
mdb.Rich(m, HOST, kit.Keym(aaa.BLACK), kit.Dict(mdb.TEXT, arg[0]))
aaa.WHITE: {Name: "white name text", Help: "白名单", Hand: func(m *ice.Message, arg ...string) {
mdb.HashCreate(m, mdb.TYPE, m.ActionKey(), m.OptionSimple(mdb.NAME, mdb.TEXT))
}},
aaa.WHITE: {Name: "white", Help: "白名单", Hand: func(m *ice.Message, arg ...string) {
m.Logs(mdb.CREATE, aaa.WHITE, arg[0])
mdb.Rich(m, HOST, kit.Keym(aaa.WHITE), kit.Dict(mdb.TEXT, arg[0]))
aaa.BLACK: {Name: "black name text", Help: "黑名单", Hand: func(m *ice.Message, arg ...string) {
mdb.HashCreate(m, mdb.TYPE, m.ActionKey(), m.OptionSimple(mdb.NAME, mdb.TEXT))
}},
"replace": {Name: "replace", Hand: func(m *ice.Message, arg ...string) {
ISLOCAL: {Hand: func(m *ice.Message, arg ...string) {
if arg[0] = strings.Split(strings.TrimPrefix(arg[0], "["), "]")[0]; arg[0] == "::1" || strings.HasPrefix(arg[0], "127.") {
m.Echo(ice.OK)
} else if mdb.HashSelectField(m, arg[0], mdb.TYPE) == aaa.WHITE {
m.Echo(ice.OK)
}
}},
PUBLISH: {Hand: func(m *ice.Message, arg ...string) {
if strings.Contains(arg[0], "://"+LOCALHOST) {
arg[0] = strings.Replace(arg[0], "://"+LOCALHOST, "://"+m.Cmd("").Append(aaa.IP), 1)
}
m.Echo(arg[0])
}},
}, mdb.HashAction(aaa.BLACK, kit.Data(mdb.SHORT, mdb.TEXT), aaa.WHITE, kit.Data(mdb.SHORT, mdb.TEXT))), Hand: func(m *ice.Message, arg ...string) {
}, mdb.HashAction(mdb.SHORT, mdb.TEXT)), Hand: func(m *ice.Message, arg ...string) {
_host_list(m, kit.Select("", arg, 0))
}},
})
}
func IsLocalHost(m *ice.Message, ip string) bool { return _islocalhost(m, ip) }
func ReplaceLocalhost(m *ice.Message, url string) string {
if strings.Contains(url, "://"+LOCALHOST) {
url = strings.Replace(url, "://"+LOCALHOST, "://"+m.Cmd(HOST).Append(aaa.IP), 1)
}
return url
}
func IsLocalHost(m *ice.Message, ip string) bool { return m.Cmdx(HOST, ISLOCAL, ip) == ice.OK }
func PublishLocalhost(m *ice.Message, url string) string { return m.Cmdx(HOST, PUBLISH, url) }

View File

@ -13,34 +13,29 @@ import (
)
func _port_right(m *ice.Message, arg ...string) string {
current := kit.Int(kit.Select(m.Config(CURRENT), arg, 0))
end := kit.Int(m.Config(END))
current, end := kit.Int(kit.Select(m.Config(CURRENT), arg, 0)), kit.Int(m.Config(END))
if current >= end {
current = kit.Int(m.Config(BEGIN))
}
for i := current; i < end; i++ {
if c, e := net.Dial(TCP, kit.Format(":%d", i)); e == nil {
if p := path.Join(ice.USR_LOCAL_DAEMON, kit.Format(i)); nfs.ExistsFile(m, p) {
} else if c, e := net.Dial(TCP, kit.Format(":%d", i)); e == nil {
m.Info("port exists %v", i)
c.Close()
continue
}
p := path.Join(ice.USR_LOCAL_DAEMON, kit.Format(i))
if nfs.ExistsFile(m, p) {
continue
}
} else {
nfs.MkdirAll(m, p)
m.Logs(mdb.SELECT, PORT, i)
return m.Config(CURRENT, i)
}
}
return ""
}
const (
RANDOM = "random"
CURRENT = "current"
BEGIN = "begin"
CURRENT = "current"
RANDOM = "random"
END = "end"
)
const PORT = "port"
@ -48,44 +43,32 @@ const PORT = "port"
func init() {
Index.MergeCommands(ice.Commands{
PORT: {Name: "port port path auto", Help: "端口", Actions: ice.MergeActions(ice.Actions{
CURRENT: {Name: "current", Help: "分配", Hand: func(m *ice.Message, arg ...string) {
m.Echo(m.Config(CURRENT))
}},
aaa.RIGHT: {Name: "right", Help: "分配", Hand: func(m *ice.Message, arg ...string) {
m.Echo(_port_right(m, arg...))
}},
nfs.TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
if m.Option(PORT) != "" {
CURRENT: {Hand: func(m *ice.Message, arg ...string) { m.Echo(m.Config(CURRENT)) }},
aaa.RIGHT: {Hand: func(m *ice.Message, arg ...string) { m.Echo(_port_right(m, arg...)) }},
nfs.TRASH: {Hand: func(m *ice.Message, arg ...string) {
m.Assert(m.Option(PORT) != "")
m.Cmd(nfs.TRASH, path.Join(ice.USR_LOCAL_DAEMON, m.Option(PORT)))
}
}},
}, mdb.HashAction(BEGIN, 10000, CURRENT, 10000, END, 20000)), Hand: func(m *ice.Message, arg ...string) {
if len(arg) > 0 {
m.Cmdy(nfs.DIR, arg[1:], kit.Dict(nfs.DIR_ROOT, path.Join(ice.USR_LOCAL_DAEMON, arg[0])))
return
}
current := kit.Int(m.Config(BEGIN))
m.Option(nfs.DIR_ROOT, ice.USR_LOCAL_DAEMON)
m.Cmd(nfs.DIR, nfs.PWD, nfs.DIR_CLI_FIELDS, func(value ice.Maps) {
bin := m.Cmd(nfs.DIR, path.Join(value[nfs.PATH], ice.BIN), nfs.DIR_CLI_FIELDS).Append(nfs.PATH)
m.Cmd(nfs.DIR, nfs.PWD, kit.Dict(nfs.DIR_ROOT, ice.USR_LOCAL_DAEMON), func(value ice.Maps) {
bin := m.CmdAppend(nfs.DIR, path.Join(value[nfs.PATH], ice.BIN), nfs.PATH)
if bin == "" {
bin = m.Cmd(nfs.DIR, path.Join(value[nfs.PATH], "sbin"), nfs.DIR_CLI_FIELDS).Append(nfs.PATH)
bin = m.CmdAppend(nfs.DIR, path.Join(value[nfs.PATH], "sbin"), nfs.PATH)
}
port := kit.Int(path.Base(value[nfs.PATH]))
if port > current {
current = port
}
m.Push(mdb.TIME, value[mdb.TIME])
m.Push(PORT, port)
m.Push(nfs.SIZE, value[nfs.SIZE])
m.Push(ice.BIN, strings.TrimPrefix(bin, value[nfs.PATH]))
current = kit.Max(current, port)
})
m.SortInt(PORT)
m.PushAction(nfs.TRASH)
m.Config(CURRENT, current)
m.StatusTimeCount(m.ConfigSimple(BEGIN, CURRENT, END))
m.PushAction(nfs.TRASH).StatusTimeCount(m.ConfigSimple(BEGIN, CURRENT, END)).SortInt(PORT)
}},
})
}

View File

@ -32,7 +32,6 @@ func _server_listen(m *ice.Message, arg ...string) {
if e == nil {
defer l.Close()
}
switch cb := m.OptionCB("").(type) {
case func(net.Listener):
m.Assert(e)
@ -64,8 +63,7 @@ func init() {
Index.MergeCommands(ice.Commands{
SERVER: {Name: "server hash auto prunes", Help: "服务器", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { m.Conf("", mdb.HASH, "") }},
ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) { mdb.HashSelectClose(m) }},
LISTEN: {Name: "listen type name port=9030 host=", Help: "监听", Hand: func(m *ice.Message, arg ...string) {
LISTEN: {Name: "listen type name port=9030 host=", Hand: func(m *ice.Message, arg ...string) {
_server_listen(m, arg...)
}},
}, mdb.StatusHashAction(mdb.FIELD, "time,hash,status,type,name,host,port,error,nconn"))},

View File

@ -335,10 +335,8 @@ func init() {
}},
SERVE_START: {Name: "source.stdio", Help: "终端", Hand: func(m *ice.Message, arg ...string) {
m.Go(func() {
m.Sleep("2s")
url := m.Cmdx(SPACE, DOMAIN)
url2 := kit.MergePOD(m.Cmd(SPIDE, ice.DEV).Append(CLIENT_URL), ice.Info.NodeName)
m.Cmd(ssh.PRINTF, kit.Dict(nfs.CONTENT, ice.Render(m, ice.RENDER_QRCODE, url)+ice.NL+kit.Select("", url2+ice.NL, url != url2)))
defer m.Cmd(ssh.PROMPT)
m.Sleep("30ms", ssh.PRINTF, kit.Dict(nfs.CONTENT, "\r"+ice.Render(m, ice.RENDER_QRCODE, m.Cmdx(SPACE, DOMAIN))+ice.NL))
})
}},
DOMAIN: {Name: "domain", Help: "域名", Hand: func(m *ice.Message, arg ...string) {

View File

@ -36,7 +36,7 @@ func _share_render(m *ice.Message, arg ...string) {
}
func _share_link(m *ice.Message, p string, arg ...ice.Any) string {
p = kit.Select("", SHARE_LOCAL, !strings.HasPrefix(p, ice.PS)) + p
return tcp.ReplaceLocalhost(m, MergeLink(m, p, arg...))
return tcp.PublishLocalhost(m, MergeLink(m, p, arg...))
}
func _share_cache(m *ice.Message, arg ...string) {
if pod := m.Option(ice.POD); ctx.PodCmd(m, CACHE, arg[0]) {

View File

@ -34,7 +34,7 @@ func _space_domain(m *ice.Message) (link string) {
if link == "" {
link = kit.Format("http://localhost:%s", kit.Select(m.Option(tcp.PORT), m.CmdAppend(SERVE, tcp.PORT)))
}
return tcp.ReplaceLocalhost(m, link)
return tcp.PublishLocalhost(m, link)
}
func _space_dial(m *ice.Message, dev, name string, arg ...string) {
if strings.HasPrefix(dev, ice.HTTP) {

View File

@ -96,7 +96,7 @@ func init() {
m.PushVideos(web.DISPLAY, text)
}
text = web.MergeLink(m, text)
text = tcp.ReplaceLocalhost(m, text)
text = tcp.PublishLocalhost(m, text)
}
m.PushScript(nfs.SCRIPT, text)
m.PushQRCode(cli.QRCODE, text)

View File

@ -22,7 +22,7 @@ func init() {
}
m.Go(func(msg *ice.Message) {
link := web.MergePodCmd(m, "", "", web.SPACE, m.Option(mdb.NAME))
link = tcp.ReplaceLocalhost(m, link)
link = tcp.PublishLocalhost(m, link)
msg.Sleep300ms(web.SPACE, m.Option(mdb.NAME), cli.PWD, m.Option(mdb.NAME), link, msg.Cmdx(cli.QRCODE, link))
})
}},

View File

@ -35,7 +35,7 @@ func _header_share(m *ice.Message, arg ...string) {
if m.Option(mdb.LINK) == "" {
m.Cmdy(web.SHARE, mdb.CREATE, mdb.TYPE, web.LOGIN, arg)
} else {
m.Option(mdb.LINK, tcp.ReplaceLocalhost(m, m.Option(mdb.LINK)))
m.Option(mdb.LINK, tcp.PublishLocalhost(m, m.Option(mdb.LINK)))
}
m.Push(mdb.NAME, m.Option(mdb.LINK)).PushQRCode(mdb.TEXT, m.Option(mdb.LINK))
}

View File

@ -29,7 +29,7 @@ func KeyboardAction() ice.Actions {
return ice.Actions{
KEYBOARD: {Hand: func(m *ice.Message, arg ...string) {
hash := m.Cmdx("web.chat.keyboard", mdb.CREATE, web.SPACE, m.Option(ice.MSG_DAEMON), ctx.INDEX, m.Option(ctx.INDEX), "input", "")
link := tcp.ReplaceLocalhost(m, web.MergePodCmd(m, "", "web.chat.keyboard", mdb.HASH, hash))
link := tcp.PublishLocalhost(m, web.MergePodCmd(m, "", "web.chat.keyboard", mdb.HASH, hash))
m.Push(mdb.NAME, link).PushQRCode(mdb.TEXT, link)
}},
}

16
misc.go
View File

@ -164,14 +164,20 @@ func (m *Message) Design(action Any, help string, input ...Any) {
kit.Value(m._cmd.Meta, kit.Keys("_trans", k), help)
}
}
func (m *Message) _fileline() string {
switch m.target.Name {
case MDB, AAA:
return m._source
default:
return m._target
}
}
func (m *Message) CmdHand(cmd *Command, key string, arg ...string) *Message {
if m._key, m._cmd = key, cmd; cmd == nil {
return m
}
if m._target = logs.FileLine(cmd.Hand); cmd.RawHand != nil {
m._target = kit.Join(kit.Slice(kit.Split(kit.Format(cmd.RawHand), PS), -3), PS)
}
if fileline := kit.Select(m._target, m._source, m.target.Name == MDB); key == SELECT {
m._target = kit.Join(kit.Slice(kit.Split(cmd.GetFileLine(), PS), -3), PS)
if fileline := m._fileline(); key == SELECT {
m.Log(LOG_CMDS, "%s.%s %d %v %v", m.Target().Name, key, len(arg), arg, m.Optionv(MSG_FIELDS), logs.FileLineMeta(fileline))
} else {
m.Log(LOG_CMDS, "%s.%s %d %v", m.Target().Name, key, len(arg), arg, logs.FileLineMeta(fileline))
@ -297,7 +303,7 @@ func (c *Context) _action(m *Message, cmd *Command, key string, sub string, h *A
m._target = kit.Join(kit.Slice(kit.Split(kit.Format(cmd.RawHand), PS), -3), PS)
}
m.Log(LOG_CMDS, "%s.%s %s %d %v", c.Name, key, sub, len(arg), arg,
logs.FileLineMeta(kit.Select(m._target, m._source, m.target.Name == MDB)))
logs.FileLineMeta(m._fileline()))
h.Hand(m, arg...)
return m
}