This commit is contained in:
cdle
2023-06-02 14:49:18 +08:00
parent d148f2045b
commit 985e012f01
+52 -39
View File
@@ -245,47 +245,60 @@ func (f *Factory) SetReplyHandler(function func(map[string]string) string) {
func GetReplyMessage(vm *goja.Runtime, plt string, bots_id []string) *goja.Promise { func GetReplyMessage(vm *goja.Runtime, plt string, bots_id []string) *goja.Promise {
promise, resolve, reject := vm.NewPromise() promise, resolve, reject := vm.NewPromise()
go func() { adapters, err := GetAdapters(plt, bots_id...)
adapters, err := GetAdapters(plt, bots_id...) if err != nil {
if err != nil { go func() {
time.Sleep(time.Second)
reject(Error(vm, err)) reject(Error(vm, err))
return }()
} return promise
ctx, cancel := context.WithCancel(context.Background()) }
for i := range adapters { ctx, cancel := context.WithCancel(context.Background())
go func(i int) { for i := range adapters {
select { go func(i int) {
case <-ctx.Done(): select {
logs.Debug("消息获取中断") case <-ctx.Done():
case <-adapters[i].ctx.Done(): logs.Debug("消息获取中断")
cancel() case <-adapters[i].ctx.Done():
logs.Debug("%s adapter %s destroied", adapters[i].botplt, adapters[i].botid) cancel()
reject("adapter destroied") logs.Debug("%s adapter %s destroied", adapters[i].botplt, adapters[i].botid)
case mc := <-adapters[i].msgChan: reject("adapter destroied")
cancel() case mc := <-adapters[i].msgChan:
obj := adapters[i].vm.NewObject() cancel()
for k, v := range mc.Msg { var msg = map[string]interface{}{}
obj.Set(k, v) for k, v := range mc.Msg {
} msg[k] = v
obj.Set("bot_id", adapters[i].botid)
resolve(adapters[i].vm.NewProxy(obj, &goja.ProxyTrapConfig{
Set: func(target *goja.Object, property string, value, receiver goja.Value) (success bool) {
if property == "message_id" {
select {
case <-mc.Chan:
return false
case <-time.After(time.Millisecond):
}
mc.Chan <- fmt.Sprint(value.Export())
}
return true
},
}))
} }
}(i) // obj := adapters[i].vm.NewObject()
} // for k, v := range mc.Msg {
}() // obj.Set(k, v)
// }
// obj.Set("bot_id", adapters[i].botid)
msg["bot_id"] = adapters[i].botid
msg["setMessageId"] = func(id string) {
select {
case <-mc.Chan:
case <-time.After(time.Millisecond):
mc.Chan <- id
}
}
resolve(mc.Msg)
// adapters[i].vm.NewProxy(obj, &goja.ProxyTrapConfig{
// Set: func(target *goja.Object, property string, value, receiver goja.Value) (success bool) {
// if property == "message_id" {
// select {
// case <-mc.Chan:
// return false
// case <-time.After(time.Millisecond):
// }
// mc.Chan <- fmt.Sprint(value.Export())
// }
// return true
// },
// })
}
}(i)
}
return promise return promise
} }