This commit is contained in:
cdle
2021-10-12 12:12:59 +08:00
parent f23b108551
commit 5d7d18a00f
2 changed files with 18 additions and 15 deletions
+16 -6
View File
@@ -30,7 +30,7 @@ type Sender interface {
Finish()
Continue()
IsContinue() bool
Await(Sender, func(Sender, error) interface{}, ...interface{})
Await(Sender, func(Sender) interface{}, ...interface{})
}
type Edit int
@@ -224,9 +224,10 @@ type Carry struct {
Sender Sender
}
func (_ *BaseSender) Await(sender Sender, callback func(Sender, error) interface{}, params ...interface{}) {
func (_ *BaseSender) Await(sender Sender, callback func(Sender) interface{}, params ...interface{}) {
c := &Carry{}
timeout := time.Second * 20
var handleErr func(error)
for _, param := range params {
switch param.(type) {
case string:
@@ -237,7 +238,10 @@ func (_ *BaseSender) Await(sender Sender, callback func(Sender, error) interface
timeout = du
}
case func() string:
callback = param.(func(Sender, error) interface{})
callback = param.(func(Sender) interface{})
case func(error):
handleErr = param.(func(error))
}
}
if callback == nil {
@@ -257,14 +261,20 @@ func (_ *BaseSender) Await(sender Sender, callback func(Sender, error) interface
switch result.(type) {
case Sender:
waits.Delete(key)
c.Result <- callback(result.(Sender), nil)
c.Result <- callback(result.(Sender)) //, nil
return
case error:
waits.Delete(key)
c.Result <- callback(nil, result.(error))
if handleErr != nil {
handleErr(result.(error))
}
c.Result <- nil //
}
case <-time.After(timeout):
waits.Delete(key)
c.Result <- callback(nil, TimeOutError)
if handleErr != nil {
handleErr(TimeOutError)
}
c.Result <- nil
}
}
+2 -9
View File
@@ -166,10 +166,7 @@ func initSys() {
old := b.Get(s.Get(1))
b.Set(s.Get(1), s.Get(2))
go func() {
s.Await(s, func(_ Sender, e error) interface{} {
if e != nil {
return nil
}
s.Await(s, func(_ Sender) interface{} {
b.Set(s.Get(1), old)
return "已撤回。"
}, "^撤回$", time.Second*60)
@@ -279,11 +276,7 @@ Alias=sillyGirl.service`
s.Reply(data)
stop := false
for {
s.Await(s, func(s2 Sender, err error) interface{} {
if err != nil {
s.Reply(err)
return nil
}
s.Await(s, func(s2 Sender) interface{} {
ct := s2.GetContent()
if ct == "退出接龙" {
stop = true