mirror of
https://shylinux.com/x/icebergs
synced 2025-04-26 01:24:05 +08:00
Merge branch 'master' of https://shylinux.com/code/git/repos/icebergs
This commit is contained in:
commit
ab25d2d6c4
@ -19,7 +19,7 @@ import (
|
||||
|
||||
func _share_link(m *ice.Message, p string, arg ...interface{}) string {
|
||||
p = kit.Select("", "/share/local/", !strings.HasPrefix(p, "/")) + p
|
||||
return tcp.ReplaceLocalhost(m, kit.MergeURL2(kit.Select(m.Conf(SHARE, kit.Keym("domain")), m.Option(ice.MSG_USERWEB)), p, arg...))
|
||||
return tcp.ReplaceLocalhost(m, kit.MergeURL2(kit.Select(m.Option(ice.MSG_USERWEB), m.Conf(SHARE, kit.Keym(kit.MDB_DOMAIN))), p, arg...))
|
||||
}
|
||||
func _share_cache(m *ice.Message, arg ...string) {
|
||||
if pod := m.Option(cli.POD); m.PodCmd(CACHE, arg[0]) {
|
||||
|
@ -33,9 +33,7 @@ func _space_domain(m *ice.Message) string {
|
||||
return tcp.ReplaceLocalhost(m, link)
|
||||
}
|
||||
func _space_list(m *ice.Message, space string) {
|
||||
if space == "" {
|
||||
m.Fields(0, "time,type,name,text")
|
||||
}
|
||||
m.OptionFields(kit.Select(ice.MSG_DETAIL, "time,type,name,text", space == ""))
|
||||
m.Cmdy(mdb.SELECT, SPACE, "", mdb.HASH, kit.MDB_NAME, space)
|
||||
|
||||
if space == "" {
|
||||
@ -55,7 +53,7 @@ func _space_dial(m *ice.Message, dev, name string, arg ...string) {
|
||||
host := kit.Format(client[tcp.HOSTNAME])
|
||||
proto := strings.Replace(kit.Format(client[tcp.PROTOCOL]), "http", "ws", 1)
|
||||
uri := kit.MergeURL(proto+"://"+host+"/space/", kit.MDB_TYPE, ice.Info.NodeType,
|
||||
kit.MDB_NAME, name, "share", ice.Info.CtxShare, "river", ice.Info.CtxRiver, arg)
|
||||
kit.MDB_NAME, name, SHARE, ice.Info.CtxShare, RIVER, ice.Info.CtxRiver, arg)
|
||||
|
||||
if u, e := url.Parse(uri); m.Assert(e) {
|
||||
m.Go(func() {
|
||||
@ -244,72 +242,60 @@ const (
|
||||
const SPACE = "space"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
SPACE: {Name: SPACE, Help: "空间站", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME,
|
||||
"redial", kit.Dict("a", 3000, "b", 1000, "c", 1000, "r", ice.MOD_BUFS, "w", ice.MOD_BUFS),
|
||||
"timeout", kit.Dict("c", "180s"),
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
SPACE: {Name: "space name cmd auto", Help: "空间站", Action: map[string]*ice.Action{
|
||||
tcp.DIAL: {Name: "dial dev name", Help: "连接", Hand: func(m *ice.Message, arg ...string) {
|
||||
_space_dial(m, m.Option(SPIDE_DEV), kit.Select(ice.Info.NodeName, m.Option(kit.MDB_NAME)))
|
||||
}},
|
||||
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
|
||||
_space_search(m, arg[0], arg[1], kit.Select("", arg, 2))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) < 2 {
|
||||
_space_list(m, kit.Select("", arg, 0))
|
||||
return
|
||||
}
|
||||
_space_send(m, arg[0], arg[1:]...)
|
||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||
SPACE: {Name: SPACE, Help: "空间站", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME,
|
||||
"redial", kit.Dict("a", 3000, "b", 1000, "c", 1000, "r", ice.MOD_BUFS, "w", ice.MOD_BUFS),
|
||||
"timeout", kit.Dict("c", "180s"),
|
||||
)},
|
||||
}, Commands: map[string]*ice.Command{
|
||||
SPACE: {Name: "space name cmd auto", Help: "空间站", Action: map[string]*ice.Action{
|
||||
tcp.DIAL: {Name: "dial dev name", Help: "连接", Hand: func(m *ice.Message, arg ...string) {
|
||||
_space_dial(m, m.Option(SPIDE_DEV), kit.Select(ice.Info.NodeName, m.Option(kit.MDB_NAME)))
|
||||
}},
|
||||
|
||||
"/space/": {Name: "/space/ type name share river", Help: "空间站", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if s, e := websocket.Upgrade(m.W, m.R, nil, kit.Int(m.Conf(SPACE, "meta.buffer.r")), kit.Int(m.Conf(SPACE, "meta.buffer.w"))); m.Assert(e) {
|
||||
name := kit.Select(s.RemoteAddr().String(), m.Option(kit.MDB_NAME))
|
||||
name = m.Option(kit.MDB_NAME, strings.Replace(name, ".", "_", -1))
|
||||
name = m.Option(kit.MDB_NAME, strings.Replace(name, ":", "-", -1))
|
||||
kind := kit.Select(WORKER, m.Option(kit.MDB_TYPE))
|
||||
share := m.Option("share")
|
||||
river := m.Option("river")
|
||||
|
||||
// 添加节点
|
||||
h := m.Rich(SPACE, nil, kit.Dict(SOCKET, s, "share", share, "river", river,
|
||||
kit.MDB_TYPE, kind, kit.MDB_NAME, name, kit.MDB_TEXT, s.RemoteAddr().String(),
|
||||
))
|
||||
|
||||
m.Go(func() {
|
||||
defer m.Confv(SPACE, kit.Keys(kit.MDB_HASH, h), "")
|
||||
|
||||
// 监听消息
|
||||
switch args := []string{kit.MDB_TYPE, kind, kit.MDB_NAME, name, "share", share, "river", river}; kind {
|
||||
case WORKER:
|
||||
m.Event(DREAM_START, args...)
|
||||
defer m.Event(DREAM_STOP, args...)
|
||||
default:
|
||||
m.Event(SPACE_START, args...)
|
||||
defer m.Event(SPACE_STOP, args...)
|
||||
}
|
||||
|
||||
switch kind {
|
||||
case CHROME:
|
||||
if m.Option(ice.MSG_USERNAME) != "" {
|
||||
// break
|
||||
}
|
||||
|
||||
m.Go(func(msg *ice.Message) {
|
||||
link := kit.MergeURL(_space_domain(msg), "grant", name)
|
||||
msg.Sleep("100ms").Cmd(SPACE, name, "pwd", name, link, msg.Cmdx(cli.QRCODE, link))
|
||||
})
|
||||
}
|
||||
|
||||
frame := m.Target().Server().(*Frame)
|
||||
_space_handle(m, false, frame.send, s, name)
|
||||
})
|
||||
}
|
||||
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
|
||||
_space_search(m, arg[0], arg[1], kit.Select("", arg, 2))
|
||||
}},
|
||||
}})
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) < 2 { // 节点列表
|
||||
_space_list(m, kit.Select("", arg, 0))
|
||||
return
|
||||
}
|
||||
// 下发命令
|
||||
_space_send(m, arg[0], arg[1:]...)
|
||||
}},
|
||||
|
||||
"/space/": {Name: "/space/ type name share river", Help: "空间站", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if s, e := websocket.Upgrade(m.W, m.R, nil, kit.Int(m.Conf(SPACE, "meta.buffer.r")), kit.Int(m.Conf(SPACE, "meta.buffer.w"))); m.Assert(e) {
|
||||
name := kit.Select(s.RemoteAddr().String(), m.Option(kit.MDB_NAME))
|
||||
name = m.Option(kit.MDB_NAME, strings.Replace(name, ".", "_", -1))
|
||||
name = m.Option(kit.MDB_NAME, strings.Replace(name, ":", "-", -1))
|
||||
kind := kit.Select(WORKER, m.Option(kit.MDB_TYPE))
|
||||
|
||||
// 添加节点
|
||||
args := append([]string{kit.MDB_TYPE, kind, kit.MDB_NAME, name}, m.OptionSimple(SHARE, RIVER)...)
|
||||
h := m.Rich(SPACE, nil, kit.Dict(SOCKET, s, kit.MDB_TEXT, s.RemoteAddr().String(), args))
|
||||
|
||||
m.Go(func() {
|
||||
defer m.Confv(SPACE, kit.Keys(kit.MDB_HASH, h), "")
|
||||
|
||||
switch kind {
|
||||
case CHROME: // 交互节点
|
||||
m.Go(func(msg *ice.Message) {
|
||||
link := kit.MergeURL(_space_domain(msg), "grant", name)
|
||||
msg.Sleep("100ms").Cmd(SPACE, name, "pwd", name, link, msg.Cmdx(cli.QRCODE, link))
|
||||
})
|
||||
case WORKER: // 工作节点
|
||||
m.Event(DREAM_START, args...)
|
||||
defer m.Event(DREAM_STOP, args...)
|
||||
default: // 服务节点
|
||||
m.Event(SPACE_START, args...)
|
||||
defer m.Event(SPACE_STOP, args...)
|
||||
}
|
||||
|
||||
frame := c.Server().(*Frame)
|
||||
_space_handle(m, false, frame.send, s, name)
|
||||
})
|
||||
}
|
||||
}},
|
||||
}})
|
||||
}
|
||||
|
70
core/chat/room.go
Normal file
70
core/chat/room.go
Normal file
@ -0,0 +1,70 @@
|
||||
package chat
|
||||
|
||||
import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/aaa"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/web"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
)
|
||||
|
||||
const ROOM = "room"
|
||||
const JOIN = "join"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||
ROOM: {Name: "room", Help: "room", Value: kit.Data(
|
||||
kit.MDB_SHORT, "zone",
|
||||
kit.MDB_FIELD, "time,id,type,name,text",
|
||||
)},
|
||||
JOIN: {Name: "join", Help: "join", Value: kit.Data(
|
||||
kit.MDB_SHORT, "zone",
|
||||
kit.MDB_FIELD, "time,hash,username,socket",
|
||||
)},
|
||||
}, Commands: map[string]*ice.Command{
|
||||
ROOM: {Name: "room zone id auto create insert join", Help: "room", Action: ice.MergeAction(map[string]*ice.Action{
|
||||
mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(ROOM), "", mdb.HASH, m.OptionSimple(kit.MDB_ZONE))
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(JOIN), "", mdb.HASH, m.OptionSimple(kit.MDB_ZONE))
|
||||
}},
|
||||
mdb.INSERT: {Name: "insert zone type name text", Help: "发送", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(ROOM), "", mdb.ZONE, m.Option(kit.MDB_ZONE), arg[2:])
|
||||
m.Cmdy(JOIN, m.Option(kit.MDB_ZONE)).Table(func(index int, value map[string]string, head []string) {
|
||||
m.Option(ice.MSG_DAEMON, value[web.SOCKET])
|
||||
m.Toast(m.Option("text"), m.Option("name"))
|
||||
})
|
||||
}},
|
||||
|
||||
"join": {Name: "join", Help: "加入", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd(JOIN, mdb.INSERT, arg)
|
||||
}},
|
||||
"exit": {Name: "exit", Help: "退出"},
|
||||
}, mdb.ZoneAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg), mdb.ZONE_FIELD, m.Conf(ROOM, kit.META_FIELD))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(ROOM), "", mdb.ZONE, arg)
|
||||
}},
|
||||
JOIN: {Name: "join zone hash auto", Help: "join", Action: ice.MergeAction(map[string]*ice.Action{
|
||||
mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(ROOM), "", mdb.HASH, m.OptionSimple(kit.MDB_ZONE))
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(JOIN), "", mdb.HASH, m.OptionSimple(kit.MDB_ZONE))
|
||||
}},
|
||||
mdb.INSERT: {Name: "insert zone username daemon", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Conf(m.Prefix(JOIN), kit.Keys(kit.KeyHash(m.Option(kit.MDB_ZONE)), kit.Keym(kit.MDB_SHORT)), web.SOCKET)
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(JOIN), kit.KeyHash(m.Option(kit.MDB_ZONE)), mdb.HASH,
|
||||
aaa.USERNAME, m.Option(ice.MSG_USERNAME), web.SOCKET, m.Option(ice.MSG_DAEMON),
|
||||
)
|
||||
}},
|
||||
mdb.DELETE: {Name: "delete zone socket", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(JOIN), kit.KeyHash(m.Option(kit.MDB_ZONE)), mdb.HASH, m.OptionSimple(web.SOCKET))
|
||||
}},
|
||||
}), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg), mdb.ZONE_FIELD, m.Conf(JOIN, kit.META_FIELD))
|
||||
if len(arg) == 0 {
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(JOIN), "", mdb.HASH)
|
||||
} else {
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(JOIN), kit.KeyHash(arg[0]), mdb.HASH, arg[1:])
|
||||
m.PushAction(mdb.REMOVE)
|
||||
}
|
||||
}},
|
||||
}})
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user