From 79dcaaf249d111043bab785d0f148ff2c6f2019c Mon Sep 17 00:00:00 2001 From: 兔子 Date: Mon, 21 Dec 2020 17:31:03 +0800 Subject: [PATCH] sync support --- client.go | 25 +++++++++++++++++++++---- server.go | 54 ++++++++++++++++++++++++------------------------------ 2 files changed, 45 insertions(+), 34 deletions(-) diff --git a/client.go b/client.go index cdcd613..506b881 100644 --- a/client.go +++ b/client.go @@ -27,6 +27,7 @@ type StarNotifyC struct { // UseChannel 是否使用channel作为信息传递 UseChannel bool isUDP bool + Sync bool // Queue 是用来处理收发信息的简单消息队列 Queue *starnet.StarQueue // Online 当前链接是否处于活跃状态 @@ -281,10 +282,18 @@ func (star *StarNotifyC) cnotify() { mode, key, value := strs[0], strs[1], strs[2] if mode[0:2] != "cr" { if msg, ok := star.FuncLists[key]; ok { - go msg(CMsg{key, value, mode, nil}) + if star.Sync { + msg(CMsg{key, value, mode, nil}) + } else { + go msg(CMsg{key, value, mode, nil}) + } } else { if star.defaultFunc != nil { - go star.defaultFunc(CMsg{key, value, mode, nil}) + if star.Sync { + star.defaultFunc(CMsg{key, value, mode, nil}) + } else { + go star.defaultFunc(CMsg{key, value, mode, nil}) + } } } } else { @@ -296,10 +305,18 @@ func (star *StarNotifyC) cnotify() { sa.wait <- 1 } else { if msg, ok := star.FuncLists[key]; ok { - go msg(CMsg{key, value, mode, nil}) + if star.Sync { + msg(CMsg{key, value, mode, nil}) + } else { + go msg(CMsg{key, value, mode, nil}) + } } else { if star.defaultFunc != nil { - go star.defaultFunc(CMsg{key, value, mode, nil}) + if star.Sync { + star.defaultFunc(CMsg{key, value, mode, nil}) + } else { + go star.defaultFunc(CMsg{key, value, mode, nil}) + } } } } diff --git a/server.go b/server.go index 12293b9..9da2169 100644 --- a/server.go +++ b/server.go @@ -49,6 +49,7 @@ type StarNotifyS struct { udpPool map[string]*net.UDPAddr listener net.Listener isUDP bool + Sync bool // Stop 停止信 号 Stop chan int // UDPConn UDP监听 @@ -432,47 +433,40 @@ func (star *StarNotifyS) notify() { continue } } - if mode[0:2] != "sr" { - go func() { - if msg, ok := star.FuncLists[key]; ok { - sdata := msg(rmsg) + replyFunc := func(key string, rmsg SMsg) { + if msg, ok := star.FuncLists[key]; ok { + sdata := msg(rmsg) + if sdata == "" { + return + } + rmsg.Reply(sdata) + } else { + if star.defaultFunc != nil { + sdata := star.defaultFunc(rmsg) if sdata == "" { return } rmsg.Reply(sdata) - } else { - if star.defaultFunc != nil { - sdata := star.defaultFunc(rmsg) - if sdata == "" { - return - } - rmsg.Reply(sdata) - } } - }() + } + } + if mode[0:2] != "sr" { + if star.Sync { + go replyFunc(key, rmsg) + } else { + replyFunc(key, rmsg) + } } else { if sa, ok := star.lockPool[mode]; ok { rmsg.wait = sa.wait star.lockPool[mode] = rmsg star.lockPool[mode].wait <- 1 } else { - go func() { - if msg, ok := star.FuncLists[key]; ok { - sdata := msg(rmsg) - if sdata == "" { - return - } - rmsg.Reply(sdata) - } else { - if star.defaultFunc != nil { - sdata := star.defaultFunc(rmsg) - if sdata == "" { - return - } - rmsg.Reply(sdata) - } - } - }() + if star.Sync { + go replyFunc(key, rmsg) + } else { + replyFunc(key, rmsg) + } } } }