From c97599602333facc3708fca6500f681044fb0201 Mon Sep 17 00:00:00 2001 From: 1-6 Date: Sun, 30 Jul 2023 17:36:50 +0800 Subject: [PATCH] x --- core/base_sender.go | 12 +- core/common/sender.go | 5 - core/function.go | 27 +-- core/grpc_adapter.go | 15 +- core/grpc_asset.go | 2 +- core/grpc_plugins.go | 144 +++++--------- core/grpc_runtime.go | 102 ++++++++++ core/grpc_sender.go | 89 ++++----- main.go | 4 + proto3/sillygirl.d.ts | 70 +++---- proto3/sillygirl.js | 266 ++++++++++++++------------ proto3/sillygirl.ts | 367 ++++++++++++++++++++---------------- proto3/srpc.d.ts | 8 +- proto3/srpc.js | 2 +- proto3/srpc.proto | 2 +- proto3/srpc.ts | 8 +- proto3/srpc/srpc.pb.go | 38 ++-- proto3/srpc/srpc_grpc.pb.go | 10 +- 18 files changed, 619 insertions(+), 552 deletions(-) create mode 100644 core/grpc_runtime.go diff --git a/core/base_sender.go b/core/base_sender.go index f60f4a9..610fa60 100644 --- a/core/base_sender.go +++ b/core/base_sender.go @@ -332,17 +332,6 @@ func (sender *CustomSender) Stop() { panic("stop") } -func (sender *CustomSender) GetID() string { - return sender.id -} - -func (sender *CustomSender) SetID() string { - sender.id = utils.GenUUID() - sender.CreatedAt = time.Now() - senders.Store(sender.id, sender) - return sender.id -} - func (sender *CustomSender) GetTime() time.Time { return sender.CreatedAt } @@ -487,6 +476,7 @@ func (s *CustomSender) Await(message common.Sender, callback func(common.Sender) if len(c.Function.Rules) == 0 { c.Function.Rules = []string{`raw [\s\S]+`} } + // fmt.Println("carry", c) fmtRule(&c.Function) c.Chan = make(chan interface{}, 1) c.Result = make(chan interface{}, 1) diff --git a/core/common/sender.go b/core/common/sender.go index 24a65bd..274d00c 100644 --- a/core/common/sender.go +++ b/core/common/sender.go @@ -1,13 +1,8 @@ package common -import "time" - type Sender interface { SetPluginID(string) GetPluginID() string - GetID() string - GetTime() time.Time - SetID() string GetUserID() string GetChatID() string GetBotID() string diff --git a/core/function.go b/core/function.go index 1102a2f..84234b2 100644 --- a/core/function.go +++ b/core/function.go @@ -472,9 +472,9 @@ func HandleMessage(sender common.Sender) { u, g, i, a := sender.GetUserID(), sender.GetChatID(), sender.GetImType(), sender.IsAdmin() con := true mtd := false - for _, wait := range waits { wait.Foreach(func(k int64, c *Carry) bool { + // userID := vs.Get("u") // chatID := vs.Get("c") // imType := vs.Get("i") @@ -485,18 +485,26 @@ func HandleMessage(sender common.Sender) { // if userID != u && (forGroup == "" || forGroup == "me") { // return true // } + if c.RequireAdmin && !a { return true } + // fmt.Println(c.Function.Rules, "==", c.AllowPlatforms, len(c.AllowPlatforms)) + if len(c.AllowPlatforms) != 0 && !Contains(c.AllowPlatforms, i) { return true } + + // fmt.Println(c.Function.Rules) + if len(c.ProhibitPlatforms) != 0 && Contains(c.ProhibitPlatforms, i) { return true } + if len(c.AllowUsers) != 0 && !Contains(c.AllowUsers, u) { return true } + if len(c.ProhibitUsers) != 0 && Contains(c.ProhibitUsers, u) { return true } @@ -543,23 +551,6 @@ func HandleMessage(sender common.Sender) { sender.SetMatch(res[1:]) sender.SetParams(c.Function.Params[i]) mtd = true - // if f, ok := c.Message.(*CustomSender); ok && f.Carry != nil { - // if s1, o := sender.(*CustomSender); o && s1.Carry != nil { - // f.Carry = s1.Carry - // c := make(chan string) - // oc := s1.Carry - // s1.Carry = c - // go func() { - // for { - // r, o := <-c - // if !o { - // break - // } - // oc <- r - // } - // }() - // } - // } c.Chan <- sender sender.Reply(<-c.Result) if !sender.IsContinue() { diff --git a/core/grpc_adapter.go b/core/grpc_adapter.go index 0e17032..157babb 100644 --- a/core/grpc_adapter.go +++ b/core/grpc_adapter.go @@ -79,7 +79,7 @@ func (sg *SillyGirlService) AdapterRegist(stream srpc.SillyGirlService_AdapterRe } } -func (sg *SillyGirlService) AdapterReceive(ctx context.Context, req *srpc.AdapterRequest) (*srpc.Default, error) { +func (sg *SillyGirlService) AdapterReceive(ctx context.Context, req *srpc.AdapterRequest) (*srpc.Empty, error) { msgs := map[string]interface{}{} bot_id := req.GetBotId() platform := req.GetPlatform() @@ -87,10 +87,10 @@ func (sg *SillyGirlService) AdapterReceive(ctx context.Context, req *srpc.Adapte json.Unmarshal([]byte(req.Value), &msgs) adapter, err := GetAdapter(platform, bot_id) if err == nil { - s := adapter.Receive(msgs) - return &srpc.Default{Value: s.SetID()}, nil + adapter.Receive(msgs) + return &srpc.Empty{}, nil } - return &srpc.Default{Value: ""}, err + return &srpc.Empty{}, err } func (sg *SillyGirlService) AdapterPush(ctx context.Context, req *srpc.AdapterRequest) (*srpc.Default, error) { @@ -118,8 +118,11 @@ func (sg *SillyGirlService) AdapterSender(ctx context.Context, req *srpc.Adapter json.Unmarshal([]byte(req.Value), &msgs) adapter, err := GetAdapter(platform, bot_id) if err == nil { - s := adapter.Sender2(msgs) - return &srpc.Default{Value: s.SetID()}, nil + _, regist, err := getSenderRegisterByCtx(ctx) + if err == nil { + s := adapter.Sender2(msgs) + return &srpc.Default{Value: regist(s)}, nil + } } return &srpc.Default{Value: ""}, err } diff --git a/core/grpc_asset.go b/core/grpc_asset.go index 42b5e2e..be58c72 100644 --- a/core/grpc_asset.go +++ b/core/grpc_asset.go @@ -24,7 +24,7 @@ type Language struct { } var plugin_dir = utils.ExecPath + "/plugins" -var release = "20230728" +var release = "20230730" var languages = []Language{ { diff --git a/core/grpc_plugins.go b/core/grpc_plugins.go index 782daf2..b50ae37 100644 --- a/core/grpc_plugins.go +++ b/core/grpc_plugins.go @@ -46,30 +46,6 @@ func initNodePlugins() { AddNodePlugin(index, name) } } - - // filepath.Walk(root, func(path string, info os.FileInfo, err error) error { - // fmt.Println("path", path) - // path = strings.ReplaceAll(path, "\\", "/") - // if !strings.HasPrefix(path, root+"/") { - // return nil - // } - // files := strings.Split(strings.Replace(path, root+"/", "", 1), "/") - // fmt.Println("files", files) - // // var plugin_dir = false - // // var plugin_index = false - // switch len(files) { - // case 1: - // // plugin_dir = true - // if info.IsDir() { - // plugins = append(plugins, path) - // } - // case 2: - // if (files[1] == "main.js") && !info.IsDir() { //files[1] == "main.ts" || - // AddNodePlugin(path, files[0]) - // } - // } - // return nil - // }) watcher, err := fsnotify.NewWatcher() if err != nil { fmt.Println("创建监视器失败:", err) @@ -178,37 +154,6 @@ func initNodePlugins() { } } -// func RemNodePlugin2(name string) bool { -// if name == "" { -// return false -// } -// pluginLock.Lock() -// defer pluginLock.Unlock() -// key := nameUuid(name) -// for i := range Functions { -// if Functions[i].UUID == key { -// f := Functions[i] -// DestroyAdapterByUUID(key) -// Functions[i].Running = false -// if len(Functions[i].CronIds) != 0 { -// for _, id := range Functions[i].CronIds { -// CRON.Remove(cron.EntryID(id)) -// } -// } -// Functions = append(Functions[:i], Functions[i+1:]...) -// CancelPluginCrons(key) -// CancelPluginWebs(key) -// CancelPluginlistening(key) -// CancelHttpListen(key) -// remStatic(key) -// storage.DisableHandle(key) -// console.Log("已移除 %s%s", f.Title, f.Suffix) -// return true -// } -// } -// return false -// } - func nameUuid(name string) string { hash := sha1.Sum([]byte(name)) return strings.ReplaceAll(uuid.NewSHA1(uuid.Nil, hash[:]).String(), "-", "_") @@ -218,8 +163,6 @@ func isNameUuid(uuid string) bool { return strings.Contains(uuid, "_") } -// var plugins_id sync.Map - func AddNodePlugin(path, name string) error { if name == "" { return nil @@ -277,10 +220,10 @@ func AddNodePlugin(path, name string) error { f.Handle = func(s common.Sender, f func(vm *goja.Runtime)) interface{} { s.SetPluginID(uuid) plt := s.GetImType() - // , "/Users/a1-6/.nvm/versions/node/v18.16.1/lib/node_modules/ts-node/dist/bin.js", cmd := exec.Command("./node", path) cmd.Dir = utils.ExecPath + "/language/node" - // cmd := exec.Command(utils.ExecPath+"/language/node/node", path) + RUNTIME_ID := utils.GenUUID() + cmd.Env = append(cmd.Env, "RUNTIME_ID="+RUNTIME_ID) cmd.Env = append(cmd.Env, "PLUGIN_ID="+uuid) // 获取标准输出和标准错误输出的管道 stdout, err := cmd.StdoutPipe() @@ -327,15 +270,14 @@ func AddNodePlugin(path, name string) error { } }() processes.Store(cmd, s) + register := createSenderRegister(RUNTIME_ID) if (plt) != "*" { - id := s.SetID() - cmd.Env = append(cmd.Env, "SENDER_ID="+id) + cmd.Env = append(cmd.Env, "SENDER_ID="+register(s)) err = cmd.Start() if err != nil { } - senders.Store(id, s) - defer senders.Delete(id) + defer deleteSenderRegister(RUNTIME_ID) defer processes.Delete(cmd) err = cmd.Wait() if err != nil { @@ -366,6 +308,7 @@ func AddNodePlugin(path, name string) error { return true }) go func() { + defer deleteSenderRegister(RUNTIME_ID) defer processes.Delete(cmd) err = cmd.Wait() }() @@ -387,18 +330,18 @@ func AddNodePlugin(path, name string) error { } var typeat = `declare class Sender { - uuid: string; + private uuid; private destoried; constructor(uuid: string); - destructor(): void; - getUserId(): Promise; - getUserName(): Promise; - getChatId(): Promise; - getChatName(): Promise; - getMessageId(): Promise; - getPlatform(): Promise; - getBotId(): Promise; - getContent(): Promise; + destroy(): void; + getUserId(): Promise; + getUserName(): Promise; + getChatId(): Promise; + getChatName(): Promise; + getMessageId(): Promise; + getPlatform(): Promise; + getBotId(): Promise; + getContent(): Promise; param(key: number | string): Promise; setContent(content: string): Promise; continue(): Promise; @@ -415,15 +358,14 @@ var typeat = `declare class Sender { prohibit_groups?: string[]; allow_users?: string[]; prohibit_users?: string[]; - persistent?: boolean; }): Promise; holdOn(str: string): string; - reply(content: string): Promise; - action(options: any): Promise; - event(): Promise; + reply(content: string): Promise; + doAction(options: Record): Promise; + getEvent(): Promise>; } declare class Bucket { - name: string; + private name; constructor(name: string); transform(v: string | undefined): string | number | boolean | undefined; reverseTransform(value: any): string; @@ -432,19 +374,19 @@ declare class Bucket { message?: string; changed?: boolean; }>; - getAll(): Promise; + getAll(): Promise>; delete(key: string): Promise<{ - message?: string | undefined; - changed?: boolean | undefined; + message?: string; + changed?: boolean; }>; deleteAll(): Promise; - keys(): Promise; - len(): Promise; - buckets(): Promise; - watch(key: string, handle: (old: any, now: any, key: string) => StorageFinal | void | any): void; - _name(): Promise; + keys(): Promise; + len(): Promise; + buckets(): Promise; + watch(key: string, handle: (old: any, now: any, key: string) => StorageModifier | void): void; + getName(): Promise; } -interface StorageFinal { +interface StorageModifier { echo?: string; now?: any; message?: string; @@ -459,28 +401,31 @@ interface Message { chat_name?: string; } declare class Adapter { - platform: string | undefined; - bot_id: string | undefined; + platform: string; + bot_id: string; call: any; constructor(options: { - platform?: string; - bot_id?: string; - replyHandler?: (message: Message) => string | undefined | Promise; - actionHandler?: (message: Message) => string | undefined | Promise; + platform: string; + bot_id: string; + replyHandler?: (message: Message) => Promise; + actionHandler?: (message: Message) => Promise; }); - setActionHandler(func: (action: {}) => any): void; - receive(message: Message): Promise; + receive(message: Message): Promise; push(message: Message): Promise; destroy(): Promise; sender(options: any): Promise; } declare let sender: Sender; -declare function sleep(ms: number | undefined): Promise; +declare function sleep(ms?: number): Promise; interface CQItem { type: string; - params: {}; + params: Record; +} +interface CQParams { + [key: string]: string | number | boolean; } declare let utils: { + buildCQTag: (type: string, params: CQParams, prefix?: string) => string; parseCQText: (text: string, prefix?: string) => (string | CQItem)[]; }; declare let console: { @@ -489,7 +434,8 @@ declare let console: { error(...args: any[]): void; debug(...args: any[]): void; }; -export { Adapter, Bucket, sender, sleep, utils, console };` +export { Adapter, Bucket, sender, sleep, utils, console }; +` func defaultScript(title string) string { create_at := time.Now().Format("2006-01-02 15:04:05") @@ -501,5 +447,5 @@ func defaultScript(title string) string { * @version v1.0.0 */ -const { sender: s, Bucket, Adapter, sleep } = require("sillygirl");` +const { sender: s, Bucket, Adapter, sleep, utils, console } = require("sillygirl");` } diff --git a/core/grpc_runtime.go b/core/grpc_runtime.go new file mode 100644 index 0000000..cfbcbe3 --- /dev/null +++ b/core/grpc_runtime.go @@ -0,0 +1,102 @@ +package core + +import ( + "context" + "errors" + "fmt" + "sync" + + "github.com/cdle/sillyplus/core/common" + "github.com/cdle/sillyplus/utils" + "google.golang.org/grpc/metadata" +) + +var senderRegisters sync.Map + +func getRegisterSenderByCtx(ctx context.Context, uuid string) (common.Sender, error) { + md, ok := metadata.FromIncomingContext(ctx) + if !ok { + return nil, fmt.Errorf("missing metadata") + } + runtimeID := md.Get("RUNTIME_ID") + if runtimeID == nil { + return nil, fmt.Errorf("missing runtime_id") + } + runtime_id := runtimeID[0] + return getRegisterSender(runtime_id, uuid) +} + +func getRegisterSender(runtime_id, uuid string) (common.Sender, error) { + if uuid == "" { + return &CustomSender{ + F: &Factory{ + botid: "default", + botplt: "*", + }, + }, nil + } + var sm *sync.Map + v, ok := senderRegisters.Load(runtime_id) + if ok { + sm = v.(*sync.Map) + v, ok := sm.Load(uuid) + if ok { + return v.(common.Sender), nil + } + } + return nil, errors.New("NOT FOUND SENDER") +} + +func createSenderRegister(runtime_id string) func(common.Sender) string { + var sm = new(sync.Map) + senderRegisters.Store(runtime_id, sm) + return func(s common.Sender) string { + uuid := utils.GenUUID() + sm.Store(uuid, s) + return uuid + } +} + +func getSenderRegister(runtime_id string) (func(common.Sender) string, error) { + var sm *sync.Map + v, ok := senderRegisters.Load(runtime_id) + if !ok { + return nil, errors.New("INVALID RUNTIME") + + } + sm = v.(*sync.Map) + return func(s common.Sender) string { + uuid := utils.GenUUID() + sm.Store(uuid, s) + return uuid + }, nil +} + +func deleteSenderRegister(runtime_id string) { + v, ok := senderRegisters.Load(runtime_id) + if ok { + sm := v.(*sync.Map) + sm.Range(func(key, value any) bool { + fmt.Println(key) + sm.Delete(key) + return true + }) + } + + senderRegisters.Delete(runtime_id) +} + +func getSenderRegisterByCtx(ctx context.Context) (string, func(common.Sender) string, error) { + var senderRegister func(common.Sender) string + md, ok := metadata.FromIncomingContext(ctx) + if !ok { + return "", senderRegister, fmt.Errorf("missing metadata") + } + runtimeID := md.Get("RUNTIME_ID") + if runtimeID == nil { + return "", senderRegister, fmt.Errorf("missing runtime_id") + } + runtime_id := runtimeID[0] + f, err := getSenderRegister(runtime_id) + return runtime_id, f, err +} diff --git a/core/grpc_sender.go b/core/grpc_sender.go index e062853..ce53055 100644 --- a/core/grpc_sender.go +++ b/core/grpc_sender.go @@ -3,7 +3,6 @@ package core import ( "context" "encoding/json" - "errors" "fmt" "io" "strings" @@ -15,41 +14,8 @@ import ( "github.com/cdle/sillyplus/utils" ) -var senders sync.Map - -// func init() { -// //垃圾回收 -// go func() { -// for { -// time.Sleep(time.Minute) -// senders.Range(func(key, value any) bool { -// s := value.(common.Sender) -// if s.GetTime().Add(time.Minute * 20).Before(time.Now()) { -// senders.Delete(s.GetID()) -// } -// return true -// }) -// } -// }() -// } - -func GetSender(uuid string) (common.Sender, error) { - if uuid == "" { - return &CustomSender{ - F: &Factory{ - botid: "*", - }, - }, nil - } - v, ok := senders.Load(uuid) - if !ok { - return nil, errors.New("not found sender") - } - return v.(common.Sender), nil -} - func (sg *SillyGirlService) SenderGetUserId(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) { - s, err := GetSender(req.Uuid) + s, err := getRegisterSenderByCtx(ctx, req.Uuid) if err != nil { return nil, err } @@ -57,7 +23,7 @@ func (sg *SillyGirlService) SenderGetUserId(ctx context.Context, req *srpc.Sende } func (sg *SillyGirlService) SenderGetUserName(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) { - s, err := GetSender(req.Uuid) + s, err := getRegisterSenderByCtx(ctx, req.Uuid) if err != nil { return nil, err } @@ -65,7 +31,7 @@ func (sg *SillyGirlService) SenderGetUserName(ctx context.Context, req *srpc.Sen } func (sg *SillyGirlService) SenderGetChatId(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) { - s, err := GetSender(req.Uuid) + s, err := getRegisterSenderByCtx(ctx, req.Uuid) if err != nil { return nil, err } @@ -73,7 +39,7 @@ func (sg *SillyGirlService) SenderGetChatId(ctx context.Context, req *srpc.Sende } func (sg *SillyGirlService) SenderGetChatName(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) { - s, err := GetSender(req.Uuid) + s, err := getRegisterSenderByCtx(ctx, req.Uuid) if err != nil { return nil, err } @@ -81,7 +47,7 @@ func (sg *SillyGirlService) SenderGetChatName(ctx context.Context, req *srpc.Sen } func (sg *SillyGirlService) SenderGetMessageId(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) { - s, err := GetSender(req.Uuid) + s, err := getRegisterSenderByCtx(ctx, req.Uuid) if err != nil { return nil, err } @@ -89,7 +55,7 @@ func (sg *SillyGirlService) SenderGetMessageId(ctx context.Context, req *srpc.Se } func (sg *SillyGirlService) SenderGetPlatform(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) { - s, err := GetSender(req.Uuid) + s, err := getRegisterSenderByCtx(ctx, req.Uuid) if err != nil { return nil, err } @@ -97,7 +63,7 @@ func (sg *SillyGirlService) SenderGetPlatform(ctx context.Context, req *srpc.Sen } func (sg *SillyGirlService) SenderGetBotId(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) { - s, err := GetSender(req.Uuid) + s, err := getRegisterSenderByCtx(ctx, req.Uuid) if err != nil { return nil, err } @@ -105,7 +71,7 @@ func (sg *SillyGirlService) SenderGetBotId(ctx context.Context, req *srpc.Sender } func (sg *SillyGirlService) SenderGetContent(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) { - s, err := GetSender(req.Uuid) + s, err := getRegisterSenderByCtx(ctx, req.Uuid) if err != nil { return nil, err } @@ -113,7 +79,7 @@ func (sg *SillyGirlService) SenderGetContent(ctx context.Context, req *srpc.Send } func (sg *SillyGirlService) SenderSetContent(ctx context.Context, req *srpc.SenderContentRequest) (*srpc.Empty, error) { - s, err := GetSender(req.Uuid) + s, err := getRegisterSenderByCtx(ctx, req.Uuid) if err != nil { return nil, err } @@ -122,7 +88,7 @@ func (sg *SillyGirlService) SenderSetContent(ctx context.Context, req *srpc.Send } func (sg *SillyGirlService) SenderContinue(ctx context.Context, req *srpc.SenderRequest) (*srpc.Empty, error) { - s, err := GetSender(req.Uuid) + s, err := getRegisterSenderByCtx(ctx, req.Uuid) if err != nil { return nil, err } @@ -132,13 +98,17 @@ func (sg *SillyGirlService) SenderContinue(ctx context.Context, req *srpc.Sender // todo func (sg *SillyGirlService) SenderListen(stream srpc.SillyGirlService_SenderListenServer) error { + runtime_id, register, err := getSenderRegisterByCtx(stream.Context()) + if err != nil { + return err + } + // fmt.Println(runtime_id) var carry *Carry var echos sync.Map var persistent bool // defer fmt.Println("已关闭,", "===") for { req, err := stream.Recv() - // fmt.Println("carry", carry, err) if err == io.EOF { break // 如果流已经关闭,则退出循环 @@ -146,7 +116,9 @@ func (sg *SillyGirlService) SenderListen(stream srpc.SillyGirlService_SenderList if err != nil { return err } + if carry != nil { + // fmt.Println("已监听,", req) // fmt.Println("req.Uuid", req.Uuid) echo := req.GetUuid() value := req.GetValue() @@ -163,7 +135,8 @@ func (sg *SillyGirlService) SenderListen(stream srpc.SillyGirlService_SenderList // } continue } - s, err := GetSender(req.Uuid) + s, err := getRegisterSender(runtime_id, req.Uuid) + if err != nil { return err } @@ -195,6 +168,12 @@ func (sg *SillyGirlService) SenderListen(stream srpc.SillyGirlService_SenderList } } } + if carry.AllowPlatforms == nil { + plt := s.GetImType() + if plt != "*" { + carry.AllowPlatforms = []string{plt} + } + } options = append(options, carry) if req.Persistent { persistent = req.Persistent @@ -204,13 +183,15 @@ func (sg *SillyGirlService) SenderListen(stream srpc.SillyGirlService_SenderList stream.Send(&srpc.SenderListenResponse{Echo: ""}) }) } + level := s.GetLevel() + go s.Await(s, func(s common.Sender) interface{} { - id := s.SetID() + s.SetLevel(level + 1) echo := utils.GenUUID() ch := make(chan string) echos.Store(echo, ch) defer echos.Delete(echo) - stream.Send(&srpc.SenderListenResponse{Echo: echo, Uuid: id}) + stream.Send(&srpc.SenderListenResponse{Echo: echo, Uuid: register(s)}) value := <-ch if !persistent { if strings.HasPrefix(value, "go_again_") { @@ -220,7 +201,6 @@ func (sg *SillyGirlService) SenderListen(stream srpc.SillyGirlService_SenderList stream.Send(&srpc.SenderListenResponse{Echo: "END"}) } } else { - defer senders.Delete(id) value = strings.Replace(value, "go_again_", "", 1) } return value @@ -230,7 +210,7 @@ func (sg *SillyGirlService) SenderListen(stream srpc.SillyGirlService_SenderList } func (sg *SillyGirlService) SenderEvent(ctx context.Context, req *srpc.SenderRequest) (*srpc.Default, error) { - s, err := GetSender(req.Uuid) + s, err := getRegisterSenderByCtx(ctx, req.Uuid) if err != nil { return nil, err } @@ -238,7 +218,7 @@ func (sg *SillyGirlService) SenderEvent(ctx context.Context, req *srpc.SenderReq } func (sg *SillyGirlService) SenderReply(ctx context.Context, req *srpc.ReplyRequest) (*srpc.Default, error) { - s, err := GetSender(req.Uuid) + s, err := getRegisterSenderByCtx(ctx, req.Uuid) if err != nil { return nil, err } @@ -247,7 +227,7 @@ func (sg *SillyGirlService) SenderReply(ctx context.Context, req *srpc.ReplyRequ } func (sg *SillyGirlService) SenderParam(ctx context.Context, req *srpc.ReplyRequest) (*srpc.Default, error) { - s, err := GetSender(req.Uuid) + s, err := getRegisterSenderByCtx(ctx, req.Uuid) if err != nil { return nil, err } @@ -262,10 +242,11 @@ func (sg *SillyGirlService) SenderParam(ctx context.Context, req *srpc.ReplyRequ } func (sg *SillyGirlService) SenderAction(ctx context.Context, req *srpc.ReplyRequest) (*srpc.Default, error) { - s, err := GetSender(req.Uuid) + s, err := getRegisterSenderByCtx(ctx, req.Uuid) if err != nil { return nil, err } + var params = map[string]interface{}{} err = json.Unmarshal([]byte(req.Content), ¶ms) if err != nil { @@ -276,7 +257,5 @@ func (sg *SillyGirlService) SenderAction(ctx context.Context, req *srpc.ReplyReq } func (sg *SillyGirlService) SenderDestroy(ctx context.Context, req *srpc.ReplyRequest) (*srpc.Empty, error) { - // fmt.Println("删除", req.Uuid) - senders.Delete(req.Uuid) return &srpc.Empty{}, nil } diff --git a/main.go b/main.go index 21cbc80..9bf365a 100644 --- a/main.go +++ b/main.go @@ -71,6 +71,10 @@ func main() { fmt.Printf("\x1b[%dm%s \x1b[0m\n", 31, m[core.CONETNT]) return "" }) + // a.SetActionHandler(func(m map[string]interface{}) string { + // fmt.Println("action", m) + // return `{"a":"a"}` + // }) for scanner.Scan() { data := scanner.Text() s := &core.CustomSender{ diff --git a/proto3/sillygirl.d.ts b/proto3/sillygirl.d.ts index 8545fef..829e163 100644 --- a/proto3/sillygirl.d.ts +++ b/proto3/sillygirl.d.ts @@ -1,16 +1,16 @@ declare class Sender { - uuid: string; + private uuid; private destoried; constructor(uuid: string); - destructor(): void; - getUserId(): Promise; - getUserName(): Promise; - getChatId(): Promise; - getChatName(): Promise; - getMessageId(): Promise; - getPlatform(): Promise; - getBotId(): Promise; - getContent(): Promise; + destroy(): void; + getUserId(): Promise; + getUserName(): Promise; + getChatId(): Promise; + getChatName(): Promise; + getMessageId(): Promise; + getPlatform(): Promise; + getBotId(): Promise; + getContent(): Promise; param(key: number | string): Promise; setContent(content: string): Promise; continue(): Promise; @@ -27,15 +27,14 @@ declare class Sender { prohibit_groups?: string[]; allow_users?: string[]; prohibit_users?: string[]; - persistent?: boolean; }): Promise; holdOn(str: string): string; - reply(content: string): Promise; - action(options: any): Promise; - event(): Promise; + reply(content: string): Promise; + doAction(options: Record): Promise; + getEvent(): Promise>; } declare class Bucket { - name: string; + private name; constructor(name: string); transform(v: string | undefined): string | number | boolean | undefined; reverseTransform(value: any): string; @@ -44,19 +43,19 @@ declare class Bucket { message?: string; changed?: boolean; }>; - getAll(): Promise; + getAll(): Promise>; delete(key: string): Promise<{ - message?: string | undefined; - changed?: boolean | undefined; + message?: string; + changed?: boolean; }>; deleteAll(): Promise; - keys(): Promise; - len(): Promise; - buckets(): Promise; - watch(key: string, handle: (old: any, now: any, key: string) => StorageFinal | void | any): void; - _name(): Promise; + keys(): Promise; + len(): Promise; + buckets(): Promise; + watch(key: string, handle: (old: any, now: any, key: string) => StorageModifier | void): void; + getName(): Promise; } -interface StorageFinal { +interface StorageModifier { echo?: string; now?: any; message?: string; @@ -71,28 +70,31 @@ interface Message { chat_name?: string; } declare class Adapter { - platform: string | undefined; - bot_id: string | undefined; + platform: string; + bot_id: string; call: any; constructor(options: { - platform?: string; - bot_id?: string; - replyHandler?: (message: Message) => string | undefined | Promise; - actionHandler?: (message: Message) => string | undefined | Promise; + platform: string; + bot_id: string; + replyHandler?: (message: Message) => Promise; + actionHandler?: (message: Message) => Promise; }); - setActionHandler(func: (action: {}) => any): void; - receive(message: Message): Promise; + receive(message: Message): Promise; push(message: Message): Promise; destroy(): Promise; sender(options: any): Promise; } declare let sender: Sender; -declare function sleep(ms: number | undefined): Promise; +declare function sleep(ms?: number): Promise; interface CQItem { type: string; - params: {}; + params: Record; +} +interface CQParams { + [key: string]: string | number | boolean; } declare let utils: { + buildCQTag: (type: string, params: CQParams, prefix?: string) => string; parseCQText: (text: string, prefix?: string) => (string | CQItem)[]; }; declare let console: { diff --git a/proto3/sillygirl.js b/proto3/sillygirl.js index 7a90cad..d0c804f 100644 --- a/proto3/sillygirl.js +++ b/proto3/sillygirl.js @@ -26,14 +26,13 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.console = exports.utils = exports.sleep = exports.sender = exports.Bucket = exports.Adapter = void 0; const srpc_1 = require("./srpc"); const grpc_1 = __importStar(require("@grpc/grpc-js")); +const util_1 = require("util"); +grpc_1.setLogVerbosity(grpc_1.logVerbosity.NONE); let client = new srpc_1.srpc.SillyGirlServiceClient("localhost:50051", grpc_1.credentials.createInsecure()); let senders = []; let plugin_id = process.env?.PLUGIN_ID ?? ""; -process.on("beforeExit", () => { - for (let sender of senders) { - sender.destructor(); - } -}); +const metadata = new grpc_1.Metadata(); +metadata.add("RUNTIME_ID", process.env?.RUNTIME_ID ?? ""); class Sender { uuid; destoried = false; @@ -41,22 +40,22 @@ class Sender { this.uuid = uuid; senders.push(this); } - destructor() { + destroy() { if (this.destoried) return; this.destoried = true; - client.SenderDestroy(new srpc_1.srpc.ReplyRequest({ uuid: sender.uuid }), (err, resp) => { }); + client.SenderDestroy(new srpc_1.srpc.ReplyRequest({ uuid: sender.uuid }), metadata, (err, resp) => { }); } async getUserId() { return new Promise((resolve, reject) => { client.SenderGetUserId(new srpc_1.srpc.SenderRequest({ uuid: this.uuid, - }), (err, resp) => { + }), metadata, (err, resp) => { if (err) { reject(err); } else { - resolve(resp?.value); + resolve(resp?.value ?? ""); } }); }); @@ -65,12 +64,12 @@ class Sender { return new Promise((resolve, reject) => { client.SenderGetUserName(new srpc_1.srpc.SenderRequest({ uuid: this.uuid, - }), (err, resp) => { + }), metadata, (err, resp) => { if (err) { reject(err); } else { - resolve(resp?.value); + resolve(resp?.value ?? ""); } }); }); @@ -79,12 +78,12 @@ class Sender { return new Promise((resolve, reject) => { client.SenderGetChatId(new srpc_1.srpc.SenderRequest({ uuid: this.uuid, - }), (err, resp) => { + }), metadata, (err, resp) => { if (err) { reject(err); } else { - resolve(resp?.value); + resolve(resp?.value ?? ""); } }); }); @@ -93,12 +92,12 @@ class Sender { return new Promise((resolve, reject) => { client.SenderGetChatName(new srpc_1.srpc.SenderRequest({ uuid: this.uuid, - }), (err, resp) => { + }), metadata, (err, resp) => { if (err) { reject(err); } else { - resolve(resp?.value); + resolve(resp?.value ?? ""); } }); }); @@ -107,12 +106,12 @@ class Sender { return new Promise((resolve, reject) => { client.SenderGetMessageId(new srpc_1.srpc.SenderRequest({ uuid: this.uuid, - }), (err, resp) => { + }), metadata, (err, resp) => { if (err) { reject(err); } else { - resolve(resp?.value); + resolve(resp?.value ?? ""); } }); }); @@ -121,12 +120,12 @@ class Sender { return new Promise((resolve, reject) => { client.SenderGetPlatform(new srpc_1.srpc.SenderRequest({ uuid: this.uuid, - }), (err, resp) => { + }), metadata, (err, resp) => { if (err) { reject(err); } else { - resolve(resp?.value); + resolve(resp?.value ?? ""); } }); }); @@ -135,12 +134,12 @@ class Sender { return new Promise((resolve, reject) => { client.SenderGetBotId(new srpc_1.srpc.SenderRequest({ uuid: this.uuid, - }), (err, resp) => { + }), metadata, (err, resp) => { if (err) { reject(err); } else { - resolve(resp?.value); + resolve(resp?.value ?? ""); } }); }); @@ -149,12 +148,12 @@ class Sender { return new Promise((resolve, reject) => { client.SenderGetContent(new srpc_1.srpc.SenderRequest({ uuid: this.uuid, - }), (err, resp) => { + }), metadata, (err, resp) => { if (err) { reject(err); } else { - resolve(resp?.value); + resolve(resp?.value ?? ""); } }); }); @@ -164,7 +163,7 @@ class Sender { client.SenderParam(new srpc_1.srpc.ReplyRequest({ uuid: this.uuid, content: `${key}`, - }), (err, resp) => { + }), metadata, (err, resp) => { if (err) { reject(err); } @@ -179,7 +178,7 @@ class Sender { client.SenderSetContent(new srpc_1.srpc.SenderContentRequest({ uuid: this.uuid, content, - }), (err, resp) => { + }), metadata, (err, resp) => { if (err) { reject(err); } @@ -193,7 +192,7 @@ class Sender { return new Promise((resolve, reject) => { client.SenderContinue(new srpc_1.srpc.SenderRequest({ uuid: this.uuid, - }), (err, resp) => { + }), metadata, (err, resp) => { if (err) { reject(err); } @@ -217,21 +216,18 @@ class Sender { timeout: options?.timeout, listen_private: options?.listen_private, listen_group: options?.listen_group, - allow_platforms: options?.allow_platforms, - prohibit_platforms: options?.prohibit_platforms, + allow_platforms: options?.allow_platforms ?? [], + prohibit_platforms: options?.prohibit_platforms ?? [], allow_groups: options?.allow_groups, prohibit_groups: options?.prohibit_groups, allow_users: options?.allow_users, prohibit_users: options?.prohibit_users, - persistent: options?.persistent, plugin_id, }; if (!this.uuid) { params.persistent = true; } - const call = client.SenderListen(); - // let callback: any = options.replyHandler; - // console.log("===",this.uuid) + const call = client.SenderListen(metadata); call.on("data", (response) => { if (response.echo == "END") { call.cancel(); @@ -239,74 +235,54 @@ class Sender { } let s = response.uuid ? new Sender(response.uuid) : undefined; if (options?.handle && s) { - // console.log(`options?.handle`, options.persistent) - let obj = options?.handle(s); - if (typeof obj == "string") { - call.write(new srpc_1.srpc.SenderListenRequest({ - uuid: response.echo, - value: obj, - })); - } - else if (obj) { - obj - .then((v) => { + try { + let obj = options?.handle(s); + if (typeof obj == "string") { call.write(new srpc_1.srpc.SenderListenRequest({ uuid: response.echo, - value: v ?? "", + value: obj, })); - }) - .catch((e) => { + } + else if (obj) { + obj + .then((v) => { + call.write(new srpc_1.srpc.SenderListenRequest({ + uuid: response.echo, + value: v ?? "", + })); + }) + .catch((e) => { + console.error(e); + call.write(new srpc_1.srpc.SenderListenRequest({ + uuid: response.echo, + value: "", + })); + }); + } + else { call.write(new srpc_1.srpc.SenderListenRequest({ uuid: response.echo, value: "", })); - }); + } } - else { - call.write(new srpc_1.srpc.SenderListenRequest({ - uuid: response.echo, - value: "", - })); + catch (e) { + console.error(e); } - // console.log(`options?.handle`, options.persistent) } else { - // console.log(`call.cancel()`, options?.persistent) call.write(new srpc_1.srpc.SenderListenRequest({ uuid: response.echo, value: "", })); - // console.log(`call.cancel()`, options?.persistent) } - // console.log("response", JSON.stringify(response)); - // call.cancel() resolve(s); }); call.on("error", (err) => { reject(err); - // console.error(err); }); - // console.log("params", JSON.stringify(params)); call.write(new srpc_1.srpc.SenderListenRequest(params)); - } - // client.SenderListen(new srpc.SenderListenRequest(params), (err, resp) => { - // if (err) { - // reject(err); - // } else { - // if (resp?.value) { - // let handle = options?.handle; - // let s = new Sender(resp.value); - // resolve(s); - // if (handle) { - // handle(s); - // } - // } else { - // reject(new Error("timeout")); - // } - // } - // }); - // } - ); + }); } holdOn(str) { return "go_again_" + str; @@ -316,33 +292,48 @@ class Sender { client.SenderReply(new srpc_1.srpc.ReplyRequest({ uuid: this.uuid, content, - }), (err, resp) => { + }), metadata, (err, resp) => { if (err) { reject(err); } else { - resolve(resp?.value); + resolve(resp?.value ?? ""); } }); }); } - async action(options) { + async doAction(options) { return new Promise((resolve, reject) => { + console.log({ + uuid: this.uuid, + content: JSON.stringify(options), + }); client.SenderAction(new srpc_1.srpc.ReplyRequest({ uuid: this.uuid, content: JSON.stringify(options), - }), (err, resp) => { + }), metadata, (err, resp) => { if (err) { reject(err); } else { - resolve(resp?.value); + resolve(JSON.parse(resp?.value ?? "{}")); } }); }); } - async event() { - return; + async getEvent() { + return new Promise((resolve, reject) => { + client.SenderEvent(new srpc_1.srpc.SenderRequest({ + uuid: this.uuid, + }), metadata, (err, resp) => { + if (err) { + reject(err); + } + else { + resolve(JSON.parse(resp?.value ?? "{}")); + } + }); + }); } } class Bucket { @@ -471,7 +462,7 @@ class Bucket { reject(err); } else { - resolve(resp?.keys); + resolve(resp?.keys ?? []); } }); }); @@ -483,7 +474,7 @@ class Bucket { reject(err); } else { - resolve(resp?.length); + resolve(resp?.length ?? 0); } }); }); @@ -495,7 +486,7 @@ class Bucket { reject(err); } else { - resolve(resp?.buckets); + resolve(resp?.buckets ?? []); } }); }); @@ -504,7 +495,12 @@ class Bucket { const call = client.BucketWatch(); call.on("data", async (response) => { let fin = handle(this.transform(response.old), this.transform(response.now), response.key); - fin = await fin; + try { + fin = await fin; + } + catch (e) { + console.error(e); + } let result = { echo: response.echo, }; @@ -527,7 +523,7 @@ class Bucket { plugin_id, })); } - async _name() { + async getName() { return this.name; } } @@ -540,46 +536,47 @@ class Adapter { this.platform = options.platform; this.bot_id = options.bot_id; if (options.replyHandler) { - const call = client.AdapterRegist(); - // let callback: any = ; + const call = client.AdapterRegist(metadata); call.on("data", async (response) => { - // console.log("start on data") let message = JSON.parse(response.value); const { echo, __type__ } = message; delete message.__type__; delete message.echo; if (__type__ == "reply" && options.replyHandler) { - let v = (await options.replyHandler(message)) ?? ""; - call.write(new srpc_1.srpc.AdapterRegistRequest({ - bot_id: echo, - platform: v, - })); + try { + let v = (await options.replyHandler(message)) ?? ""; + call.write(new srpc_1.srpc.AdapterRegistRequest({ + bot_id: echo, + platform: v, + })); + } + catch (e) { + console.error(e); + } } if (__type__ == "action" && options.actionHandler) { - let v = await options.actionHandler(message); - call.write(new srpc_1.srpc.AdapterRegistRequest({ - bot_id: echo, - platform: v, - })); + try { + let v = await options.actionHandler(message); + call.write(new srpc_1.srpc.AdapterRegistRequest({ + bot_id: echo, + platform: v, + })); + } + catch (e) { + console.error(e); + } } - // console.log("end on data") }); call.on("error", (err) => { console.error("adapter disc", err); }); - // console.log("before write") call.write(new srpc_1.srpc.AdapterRegistRequest({ bot_id: options.bot_id, platform: options.platform, })); - // console.log("after write write") this.call = call; } } - setActionHandler(func) { - // 将从服务端不断接收action消息,并处理 - // 事件处理巨饼 - } async receive(message) { //投递消息 return new Promise((resolve, reject) => { @@ -587,12 +584,12 @@ class Adapter { platform: this.platform, bot_id: this.bot_id, value: JSON.stringify(message), - }), (err, resp) => { + }), metadata, (err, resp) => { if (err) { reject(err); } - else if (resp?.value) { - resolve(new Sender(resp.value)); + else { + resolve(undefined); } }); }); @@ -604,7 +601,7 @@ class Adapter { platform: this.platform, bot_id: this.bot_id, value: JSON.stringify(message), - }), (err, resp) => { + }), metadata, (err, resp) => { if (err) { reject(err); } @@ -623,7 +620,7 @@ class Adapter { platform: this.platform, bot_id: this.bot_id, value: JSON.stringify(options), - }), (err, resp) => { + }), metadata, (err, resp) => { if (err) { reject(err); } @@ -637,7 +634,7 @@ class Adapter { exports.Adapter = Adapter; let sender = new Sender(process.env?.SENDER_ID ?? ""); exports.sender = sender; -async function sleep(ms) { +async function sleep(ms = 1000) { return new Promise((resolve) => setTimeout(resolve, ms)); } exports.sleep = sleep; @@ -648,6 +645,17 @@ class Console { debug = (message, ...optionalParams) => { }; } let utils = { + buildCQTag: (type, params, prefix = "CQ") => { + const paramStrings = []; + for (const key in params) { + const value = params[key]; + const paramString = `${key}=${value}`; + paramStrings.push(paramString); + } + const paramString = paramStrings.join(","); + const cqString = `[${prefix}:${type}${paramString ? "," + paramString : ""}]`; + return cqString; + }, parseCQText: (text, prefix = "CQ") => { const cqRegex = new RegExp(`\\[${prefix}:(\\w+)(.*?)\\]`, "g"); const cqMatches = text.matchAll(cqRegex); @@ -679,23 +687,37 @@ let utils = { }, }; exports.utils = utils; -let slog = (type, ...args) => { }; let console = { log(...args) { - const content = args.reduce((acc, arg) => acc + " " + arg, ""); - client.Console(new srpc_1.srpc.ConsoleRequest({ type: "log", content, plugin_id }), (err, resp) => { }); + client.Console(new srpc_1.srpc.ConsoleRequest({ + type: "log", + content: (0, util_1.format)(...args), + plugin_id, + }), (err, resp) => { }); }, info(...args) { const content = args.reduce((acc, arg) => acc + " " + arg, ""); - client.Console(new srpc_1.srpc.ConsoleRequest({ type: "info", content, plugin_id }), (err, resp) => { }); + client.Console(new srpc_1.srpc.ConsoleRequest({ + type: "info", + content: (0, util_1.format)(...args), + plugin_id, + }), (err, resp) => { }); }, error(...args) { const content = args.reduce((acc, arg) => acc + " " + arg, ""); - client.Console(new srpc_1.srpc.ConsoleRequest({ type: "error", content, plugin_id }), (err, resp) => { }); + client.Console(new srpc_1.srpc.ConsoleRequest({ + type: "error", + content: (0, util_1.format)(...args), + plugin_id, + }), (err, resp) => { }); }, debug(...args) { const content = args.reduce((acc, arg) => acc + " " + arg, ""); - client.Console(new srpc_1.srpc.ConsoleRequest({ type: "debug", content, plugin_id }), (err, resp) => { }); + client.Console(new srpc_1.srpc.ConsoleRequest({ + type: "debug", + content: (0, util_1.format)(...args), + plugin_id, + }), (err, resp) => { }); }, }; exports.console = console; diff --git a/proto3/sillygirl.ts b/proto3/sillygirl.ts index ad48db6..0c23641 100644 --- a/proto3/sillygirl.ts +++ b/proto3/sillygirl.ts @@ -1,5 +1,8 @@ import { srpc } from "./srpc"; import * as grpc_1 from "@grpc/grpc-js"; +import { format } from "util"; + +grpc_1.setLogVerbosity(grpc_1.logVerbosity.NONE); let client = new srpc.SillyGirlServiceClient( "localhost:50051", @@ -8,153 +11,156 @@ let client = new srpc.SillyGirlServiceClient( let senders: Sender[] = []; let plugin_id = process.env?.PLUGIN_ID ?? ""; - -process.on("beforeExit", () => { - for (let sender of senders) { - sender.destructor(); - } -}); +const metadata = new grpc_1.Metadata(); +metadata.add("RUNTIME_ID", process.env?.RUNTIME_ID ?? ""); class Sender { - public uuid: string; + private uuid: string; private destoried = false; constructor(uuid: string) { this.uuid = uuid; senders.push(this); } - - destructor() { + destroy() { if (this.destoried) return; this.destoried = true; client.SenderDestroy( new srpc.ReplyRequest({ uuid: sender.uuid }), + metadata, (err, resp) => {} ); } - - async getUserId(): Promise { + async getUserId(): Promise { return new Promise((resolve, reject) => { client.SenderGetUserId( new srpc.SenderRequest({ uuid: this.uuid, }), + metadata, (err, resp) => { if (err) { reject(err); } else { - resolve(resp?.value); + resolve(resp?.value ?? ""); } } ); }); } - async getUserName(): Promise { + async getUserName(): Promise { return new Promise((resolve, reject) => { client.SenderGetUserName( new srpc.SenderRequest({ uuid: this.uuid, }), + metadata, (err, resp) => { if (err) { reject(err); } else { - resolve(resp?.value); + resolve(resp?.value ?? ""); } } ); }); } - async getChatId(): Promise { + async getChatId(): Promise { return new Promise((resolve, reject) => { client.SenderGetChatId( new srpc.SenderRequest({ uuid: this.uuid, }), + metadata, (err, resp) => { if (err) { reject(err); } else { - resolve(resp?.value); + resolve(resp?.value ?? ""); } } ); }); } - async getChatName(): Promise { + async getChatName(): Promise { return new Promise((resolve, reject) => { client.SenderGetChatName( new srpc.SenderRequest({ uuid: this.uuid, }), + metadata, (err, resp) => { if (err) { reject(err); } else { - resolve(resp?.value); + resolve(resp?.value ?? ""); } } ); }); } - async getMessageId(): Promise { + async getMessageId(): Promise { return new Promise((resolve, reject) => { client.SenderGetMessageId( new srpc.SenderRequest({ uuid: this.uuid, }), + metadata, (err, resp) => { if (err) { reject(err); } else { - resolve(resp?.value); + resolve(resp?.value ?? ""); } } ); }); } - async getPlatform(): Promise { + async getPlatform(): Promise { return new Promise((resolve, reject) => { client.SenderGetPlatform( new srpc.SenderRequest({ uuid: this.uuid, }), + metadata, (err, resp) => { if (err) { reject(err); } else { - resolve(resp?.value); + resolve(resp?.value ?? ""); } } ); }); } - async getBotId(): Promise { + async getBotId(): Promise { return new Promise((resolve, reject) => { client.SenderGetBotId( new srpc.SenderRequest({ uuid: this.uuid, }), + metadata, (err, resp) => { if (err) { reject(err); } else { - resolve(resp?.value); + resolve(resp?.value ?? ""); } } ); }); } - async getContent(): Promise { + async getContent(): Promise { return new Promise((resolve, reject) => { client.SenderGetContent( new srpc.SenderRequest({ uuid: this.uuid, }), + metadata, (err, resp) => { if (err) { reject(err); } else { - resolve(resp?.value); + resolve(resp?.value ?? ""); } } ); @@ -167,6 +173,7 @@ class Sender { uuid: this.uuid, content: `${key}`, }), + metadata, (err, resp) => { if (err) { reject(err); @@ -184,6 +191,7 @@ class Sender { uuid: this.uuid, content, }), + metadata, (err, resp) => { if (err) { reject(err); @@ -200,6 +208,7 @@ class Sender { new srpc.SenderRequest({ uuid: this.uuid, }), + metadata, (err, resp) => { if (err) { reject(err); @@ -210,7 +219,7 @@ class Sender { ); }); } - async getAdapter() { + async getAdapter(): Promise { return new Adapter({ bot_id: await this.getBotId(), platform: await this.getPlatform(), @@ -229,39 +238,34 @@ class Sender { prohibit_groups?: string[]; // 群聊黑名单 allow_users?: string[]; // 用户白名单 prohibit_users?: string[]; // 群聊白名单 - persistent?: boolean; //持久化监听 }): Promise { - return new Promise( - async (resolve, reject) => { - let params: any = { - uuid: this.uuid, - rules: options?.rules, - timeout: options?.timeout, - listen_private: options?.listen_private, - listen_group: options?.listen_group, - allow_platforms: options?.allow_platforms, - prohibit_platforms: options?.prohibit_platforms, - allow_groups: options?.allow_groups, - prohibit_groups: options?.prohibit_groups, - allow_users: options?.allow_users, - prohibit_users: options?.prohibit_users, - persistent: options?.persistent, - plugin_id, - }; - if (!this.uuid) { - params.persistent = true; + return new Promise(async (resolve, reject) => { + let params: any = { + uuid: this.uuid, + rules: options?.rules, + timeout: options?.timeout, + listen_private: options?.listen_private, + listen_group: options?.listen_group, + allow_platforms: options?.allow_platforms ?? [], + prohibit_platforms: options?.prohibit_platforms ?? [], + allow_groups: options?.allow_groups, + prohibit_groups: options?.prohibit_groups, + allow_users: options?.allow_users, + prohibit_users: options?.prohibit_users, + plugin_id, + }; + if (!this.uuid) { + params.persistent = true; + } + const call = client.SenderListen(metadata); + call.on("data", (response) => { + if (response.echo == "END") { + call.cancel(); + return; } - const call = client.SenderListen(); - // let callback: any = options.replyHandler; - // console.log("===",this.uuid) - call.on("data", (response) => { - if (response.echo == "END") { - call.cancel(); - return; - } - let s = response.uuid ? new Sender(response.uuid) : undefined; - if (options?.handle && s) { - // console.log(`options?.handle`, options.persistent) + let s = response.uuid ? new Sender(response.uuid) : undefined; + if (options?.handle && s) { + try { let obj = options?.handle(s); if (typeof obj == "string") { call.write( @@ -281,6 +285,7 @@ class Sender { ); }) .catch((e) => { + console.error(e); call.write( new srpc.SenderListenRequest({ uuid: response.echo, @@ -296,96 +301,92 @@ class Sender { }) ); } - // console.log(`options?.handle`, options.persistent) - } else { - // console.log(`call.cancel()`, options?.persistent) - call.write( - new srpc.SenderListenRequest({ - uuid: response.echo, - value: "", - }) - ); - // console.log(`call.cancel()`, options?.persistent) + } catch (e) { + console.error(e); } - // console.log("response", JSON.stringify(response)); - // call.cancel() - resolve(s); - }); - call.on("error", (err) => { - reject(err); - // console.error(err); - }); - // console.log("params", JSON.stringify(params)); - call.write(new srpc.SenderListenRequest(params)); - } - // client.SenderListen(new srpc.SenderListenRequest(params), (err, resp) => { - // if (err) { - // reject(err); - // } else { - // if (resp?.value) { - // let handle = options?.handle; - // let s = new Sender(resp.value); - // resolve(s); - // if (handle) { - // handle(s); - // } - // } else { - // reject(new Error("timeout")); - // } - // } - // }); - // } - ); + } else { + call.write( + new srpc.SenderListenRequest({ + uuid: response.echo, + value: "", + }) + ); + } + resolve(s); + }); + call.on("error", (err) => { + reject(err); + }); + call.write(new srpc.SenderListenRequest(params)); + }); } holdOn(str: string) { return "go_again_" + str; } - async reply(content: string): Promise { + async reply(content: string): Promise { return new Promise((resolve, reject) => { client.SenderReply( new srpc.ReplyRequest({ uuid: this.uuid, content, }), + metadata, (err, resp) => { if (err) { reject(err); } else { - resolve(resp?.value); + resolve(resp?.value ?? ""); } } ); }); } - async action(options: any): Promise { + async doAction(options: Record): Promise { return new Promise((resolve, reject) => { + console.log({ + uuid: this.uuid, + content: JSON.stringify(options), + }); client.SenderAction( new srpc.ReplyRequest({ uuid: this.uuid, content: JSON.stringify(options), }), + metadata, (err, resp) => { if (err) { reject(err); } else { - resolve(resp?.value); + resolve(JSON.parse(resp?.value ?? "{}")); } } ); }); } - async event(): Promise { - return; + async getEvent(): Promise> { + return new Promise((resolve, reject) => { + client.SenderEvent( + new srpc.SenderRequest({ + uuid: this.uuid, + }), + metadata, + (err, resp) => { + if (err) { + reject(err); + } else { + resolve(JSON.parse(resp?.value ?? "{}")); + } + } + ); + }); } } class Bucket { - name: string; - + private name: string; constructor(name: string) { this.name = name; } - transform(v: string | undefined) { if (!v) { return undefined; @@ -477,7 +478,7 @@ class Bucket { }); } - async getAll(): Promise { + async getAll(): Promise> { return new Promise((resolve, reject) => { client.BucketGetAll( new srpc.BucketRequest({ name: this.name }), @@ -500,8 +501,8 @@ class Bucket { } async delete(key: string): Promise<{ - message?: string | undefined; - changed?: boolean | undefined; + message?: string; + changed?: boolean; }> { return this.set(key, ""); } @@ -521,7 +522,7 @@ class Bucket { }); } - async keys(): Promise { + async keys(): Promise { return new Promise((resolve, reject) => { client.BucketKeys( new srpc.BucketRequest({ name: this.name }), @@ -529,14 +530,14 @@ class Bucket { if (err) { reject(err); } else { - resolve(resp?.keys); + resolve(resp?.keys ?? []); } } ); }); } - async len(): Promise { + async len(): Promise { return new Promise((resolve, reject) => { client.BucketLen( new srpc.BucketRequest({ name: this.name }), @@ -544,20 +545,20 @@ class Bucket { if (err) { reject(err); } else { - resolve(resp?.length); + resolve(resp?.length ?? 0); } } ); }); } - async buckets(): Promise { + async buckets(): Promise { return new Promise((resolve, reject) => { client.BucketBuckets(new srpc.Empty(), (err, resp) => { if (err) { reject(err); } else { - resolve(resp?.buckets); + resolve(resp?.buckets ?? []); } }); }); @@ -565,7 +566,7 @@ class Bucket { watch( key: string, - handle: (old: any, now: any, key: string) => StorageFinal | void | any + handle: (old: any, now: any, key: string) => StorageModifier | void ) { const call = client.BucketWatch(); call.on("data", async (response) => { @@ -574,8 +575,12 @@ class Bucket { this.transform(response.now), response.key ); - fin = await fin; - let result: StorageFinal = { + try { + fin = await fin; + } catch (e) { + console.error(e); + } + let result: StorageModifier = { echo: response.echo, }; if (!fin) { @@ -599,11 +604,11 @@ class Bucket { ); } - async _name(): Promise { + async getName(): Promise { return this.name; } } -interface StorageFinal { +interface StorageModifier { echo?: string; now?: any; message?: string; @@ -620,82 +625,78 @@ interface Message { } class Adapter { - platform: string | undefined; - bot_id: string | undefined; + platform: string; + bot_id: string; call: any; constructor(options: { - platform?: string; - bot_id?: string; - replyHandler?: ( - message: Message - ) => string | undefined | Promise; - actionHandler?: ( - message: Message - ) => string | undefined | Promise; + platform: string; + bot_id: string; + replyHandler?: (message: Message) => Promise; + actionHandler?: (message: Message) => Promise; }) { this.platform = options.platform; this.bot_id = options.bot_id; if (options.replyHandler) { - const call = client.AdapterRegist(); - // let callback: any = ; + const call = client.AdapterRegist(metadata); call.on("data", async (response) => { - // console.log("start on data") let message = JSON.parse(response.value); const { echo, __type__ } = message; delete message.__type__; delete message.echo; if (__type__ == "reply" && options.replyHandler) { - let v = (await options.replyHandler(message)) ?? ""; - call.write( - new srpc.AdapterRegistRequest({ - bot_id: echo, - platform: v, - }) - ); + try { + let v = (await options.replyHandler(message)) ?? ""; + call.write( + new srpc.AdapterRegistRequest({ + bot_id: echo, + platform: v, + }) + ); + } catch (e) { + console.error(e); + } } if (__type__ == "action" && options.actionHandler) { - let v = await options.actionHandler(message); - call.write( - new srpc.AdapterRegistRequest({ - bot_id: echo, - platform: v, - }) - ); + try { + let v = await options.actionHandler(message); + call.write( + new srpc.AdapterRegistRequest({ + bot_id: echo, + platform: v, + }) + ); + } catch (e) { + console.error(e); + } } - // console.log("end on data") }); call.on("error", (err) => { console.error("adapter disc", err); }); - // console.log("before write") call.write( new srpc.AdapterRegistRequest({ bot_id: options.bot_id, platform: options.platform, }) ); - // console.log("after write write") this.call = call; } } - setActionHandler(func: (action: {}) => any): void { - // 将从服务端不断接收action消息,并处理 - // 事件处理巨饼 - } - async receive(message: Message): Promise { + async receive(message: Message): Promise { //投递消息 - return new Promise((resolve, reject) => { + return new Promise((resolve, reject) => { client.AdapterReceive( new srpc.AdapterRequest({ platform: this.platform, bot_id: this.bot_id, value: JSON.stringify(message), }), + metadata, (err, resp) => { if (err) { reject(err); - } else if (resp?.value) { - resolve(new Sender(resp.value)); + } else { + resolve(undefined); } } ); @@ -710,6 +711,7 @@ class Adapter { bot_id: this.bot_id, value: JSON.stringify(message), }), + metadata, (err, resp) => { if (err) { reject(err); @@ -731,6 +733,7 @@ class Adapter { bot_id: this.bot_id, value: JSON.stringify(options), }), + metadata, (err, resp) => { if (err) { reject(err); @@ -745,7 +748,7 @@ class Adapter { let sender: Sender = new Sender(process.env?.SENDER_ID ?? ""); -async function sleep(ms: number | undefined) { +async function sleep(ms = 1000) { return new Promise((resolve) => setTimeout(resolve, ms)); } @@ -758,10 +761,27 @@ class Console { interface CQItem { type: string; - params: {}; + params: Record; +} + +interface CQParams { + [key: string]: string | number | boolean; } let utils = { + buildCQTag: (type: string, params: CQParams, prefix = "CQ"): string => { + const paramStrings: string[] = []; + for (const key in params) { + const value = params[key]; + const paramString = `${key}=${value}`; + paramStrings.push(paramString); + } + const paramString = paramStrings.join(","); + const cqString = `[${prefix}:${type}${ + paramString ? "," + paramString : "" + }]`; + return cqString; + }, parseCQText: (text: string, prefix = "CQ") => { const cqRegex = new RegExp(`\\[${prefix}:(\\w+)(.*?)\\]`, "g"); const cqMatches = text.matchAll(cqRegex); @@ -796,34 +816,47 @@ let utils = { }, }; -let slog = (type: string, ...args: any[]) => {}; - let console = { log(...args: any[]) { - const content = args.reduce((acc, arg) => acc + " " + arg, ""); client.Console( - new srpc.ConsoleRequest({ type: "log", content, plugin_id }), + new srpc.ConsoleRequest({ + type: "log", + content: format(...args), + plugin_id, + }), (err, resp) => {} ); }, info(...args: any[]) { const content = args.reduce((acc, arg) => acc + " " + arg, ""); client.Console( - new srpc.ConsoleRequest({ type: "info", content, plugin_id }), + new srpc.ConsoleRequest({ + type: "info", + content: format(...args), + plugin_id, + }), (err, resp) => {} ); }, error(...args: any[]) { const content = args.reduce((acc, arg) => acc + " " + arg, ""); client.Console( - new srpc.ConsoleRequest({ type: "error", content, plugin_id }), + new srpc.ConsoleRequest({ + type: "error", + content: format(...args), + plugin_id, + }), (err, resp) => {} ); }, debug(...args: any[]) { const content = args.reduce((acc, arg) => acc + " " + arg, ""); client.Console( - new srpc.ConsoleRequest({ type: "debug", content, plugin_id }), + new srpc.ConsoleRequest({ + type: "debug", + content: format(...args), + plugin_id, + }), (err, resp) => {} ); }, diff --git a/proto3/srpc.d.ts b/proto3/srpc.d.ts index 6caae27..ab79a12 100644 --- a/proto3/srpc.d.ts +++ b/proto3/srpc.d.ts @@ -802,8 +802,8 @@ export declare namespace srpc { responseStream: boolean; requestSerialize: (message: AdapterRequest) => Buffer; requestDeserialize: (bytes: Buffer) => AdapterRequest; - responseSerialize: (message: Default) => Buffer; - responseDeserialize: (bytes: Buffer) => Default; + responseSerialize: (message: Empty) => Buffer; + responseDeserialize: (bytes: Buffer) => Empty; }; AdapterPush: { path: string; @@ -868,7 +868,7 @@ export declare namespace srpc { abstract SenderAction(call: grpc_1.ServerUnaryCall, callback: grpc_1.sendUnaryData): void; abstract SenderDestroy(call: grpc_1.ServerUnaryCall, callback: grpc_1.sendUnaryData): void; abstract AdapterRegist(call: grpc_1.ServerDuplexStream): void; - abstract AdapterReceive(call: grpc_1.ServerUnaryCall, callback: grpc_1.sendUnaryData): void; + abstract AdapterReceive(call: grpc_1.ServerUnaryCall, callback: grpc_1.sendUnaryData): void; abstract AdapterPush(call: grpc_1.ServerUnaryCall, callback: grpc_1.sendUnaryData): void; abstract AdapterDestroy(call: grpc_1.ServerUnaryCall, callback: grpc_1.sendUnaryData): void; abstract AdapterSender(call: grpc_1.ServerUnaryCall, callback: grpc_1.sendUnaryData): void; @@ -902,7 +902,7 @@ export declare namespace srpc { SenderAction: GrpcUnaryServiceInterface; SenderDestroy: GrpcUnaryServiceInterface; AdapterRegist: GrpcChunkServiceInterface; - AdapterReceive: GrpcUnaryServiceInterface; + AdapterReceive: GrpcUnaryServiceInterface; AdapterPush: GrpcUnaryServiceInterface; AdapterDestroy: GrpcUnaryServiceInterface; AdapterSender: GrpcUnaryServiceInterface; diff --git a/proto3/srpc.js b/proto3/srpc.js index e7e7d57..ce8ae81 100644 --- a/proto3/srpc.js +++ b/proto3/srpc.js @@ -2166,7 +2166,7 @@ var srpc; requestSerialize: (message) => Buffer.from(message.serialize()), requestDeserialize: (bytes) => AdapterRequest.deserialize(new Uint8Array(bytes)), responseSerialize: (message) => Buffer.from(message.serialize()), - responseDeserialize: (bytes) => Default.deserialize(new Uint8Array(bytes)) + responseDeserialize: (bytes) => Empty.deserialize(new Uint8Array(bytes)) }, AdapterPush: { path: "/srpc.SillyGirlService/AdapterPush", diff --git a/proto3/srpc.proto b/proto3/srpc.proto index 8e2eb11..20b1d48 100644 --- a/proto3/srpc.proto +++ b/proto3/srpc.proto @@ -145,7 +145,7 @@ service SillyGirlService { rpc SenderAction (ReplyRequest) returns (Default); rpc SenderDestroy(ReplyRequest) returns (Empty); rpc AdapterRegist(stream AdapterRegistRequest) returns (stream Default); - rpc AdapterReceive(AdapterRequest) returns (Default); + rpc AdapterReceive(AdapterRequest) returns (Empty); rpc AdapterPush(AdapterRequest) returns (Default); rpc AdapterDestroy(AdapterRequest) returns (Empty); rpc AdapterSender(AdapterRequest) returns (Default); diff --git a/proto3/srpc.ts b/proto3/srpc.ts index 0bdd07c..e608f5e 100644 --- a/proto3/srpc.ts +++ b/proto3/srpc.ts @@ -2404,8 +2404,8 @@ export namespace srpc { responseStream: false, requestSerialize: (message: AdapterRequest) => Buffer.from(message.serialize()), requestDeserialize: (bytes: Buffer) => AdapterRequest.deserialize(new Uint8Array(bytes)), - responseSerialize: (message: Default) => Buffer.from(message.serialize()), - responseDeserialize: (bytes: Buffer) => Default.deserialize(new Uint8Array(bytes)) + responseSerialize: (message: Empty) => Buffer.from(message.serialize()), + responseDeserialize: (bytes: Buffer) => Empty.deserialize(new Uint8Array(bytes)) }, AdapterPush: { path: "/srpc.SillyGirlService/AdapterPush", @@ -2470,7 +2470,7 @@ export namespace srpc { abstract SenderAction(call: grpc_1.ServerUnaryCall, callback: grpc_1.sendUnaryData): void; abstract SenderDestroy(call: grpc_1.ServerUnaryCall, callback: grpc_1.sendUnaryData): void; abstract AdapterRegist(call: grpc_1.ServerDuplexStream): void; - abstract AdapterReceive(call: grpc_1.ServerUnaryCall, callback: grpc_1.sendUnaryData): void; + abstract AdapterReceive(call: grpc_1.ServerUnaryCall, callback: grpc_1.sendUnaryData): void; abstract AdapterPush(call: grpc_1.ServerUnaryCall, callback: grpc_1.sendUnaryData): void; abstract AdapterDestroy(call: grpc_1.ServerUnaryCall, callback: grpc_1.sendUnaryData): void; abstract AdapterSender(call: grpc_1.ServerUnaryCall, callback: grpc_1.sendUnaryData): void; @@ -2555,7 +2555,7 @@ export namespace srpc { AdapterRegist: GrpcChunkServiceInterface = (metadata?: grpc_1.Metadata | grpc_1.CallOptions, options?: grpc_1.CallOptions): grpc_1.ClientDuplexStream => { return super.AdapterRegist(metadata, options); }; - AdapterReceive: GrpcUnaryServiceInterface = (message: AdapterRequest, metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback, options?: grpc_1.CallOptions | grpc_1.requestCallback, callback?: grpc_1.requestCallback): grpc_1.ClientUnaryCall => { + AdapterReceive: GrpcUnaryServiceInterface = (message: AdapterRequest, metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback, options?: grpc_1.CallOptions | grpc_1.requestCallback, callback?: grpc_1.requestCallback): grpc_1.ClientUnaryCall => { return super.AdapterReceive(message, metadata, options, callback); }; AdapterPush: GrpcUnaryServiceInterface = (message: AdapterRequest, metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback, options?: grpc_1.CallOptions | grpc_1.requestCallback, callback?: grpc_1.requestCallback): grpc_1.ClientUnaryCall => { diff --git a/proto3/srpc/srpc.pb.go b/proto3/srpc/srpc.pb.go index d4aba76..5908d9a 100644 --- a/proto3/srpc/srpc.pb.go +++ b/proto3/srpc/srpc.pb.go @@ -1353,7 +1353,7 @@ var file_srpc_proto_rawDesc = []byte{ 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x49, - 0x64, 0x32, 0x96, 0x0d, 0x0a, 0x10, 0x53, 0x69, 0x6c, 0x6c, 0x79, 0x47, 0x69, 0x72, 0x6c, 0x53, + 0x64, 0x32, 0x94, 0x0d, 0x0a, 0x10, 0x53, 0x69, 0x6c, 0x6c, 0x79, 0x47, 0x69, 0x72, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x09, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x47, 0x65, 0x74, 0x12, 0x16, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, @@ -1442,24 +1442,24 @@ var file_srpc_proto_rawDesc = []byte{ 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x28, 0x01, 0x30, 0x01, 0x12, 0x35, 0x0a, 0x0e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, + 0x6c, 0x74, 0x28, 0x01, 0x30, 0x01, 0x12, 0x33, 0x0a, 0x0e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, - 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, - 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x32, 0x0a, - 0x0b, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x50, 0x75, 0x73, 0x68, 0x12, 0x14, 0x2e, 0x73, - 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x12, 0x33, 0x0a, 0x0e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x44, 0x65, 0x73, 0x74, - 0x72, 0x6f, 0x79, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x61, 0x70, 0x74, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, 0x2e, 0x73, 0x72, 0x70, 0x63, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x0d, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, - 0x72, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x41, - 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, - 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x2c, 0x0a, 0x07, - 0x43, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x43, - 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, 0x2e, - 0x73, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x07, 0x5a, 0x05, 0x73, 0x72, - 0x70, 0x63, 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, + 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x32, 0x0a, 0x0b, 0x41, + 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x50, 0x75, 0x73, 0x68, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70, + 0x63, 0x2e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x0d, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, + 0x33, 0x0a, 0x0e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, + 0x79, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x0d, 0x41, 0x64, 0x61, 0x70, 0x74, 0x65, 0x72, 0x53, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x61, + 0x70, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x2e, 0x73, 0x72, + 0x70, 0x63, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x2c, 0x0a, 0x07, 0x43, 0x6f, + 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x12, 0x14, 0x2e, 0x73, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x6e, + 0x73, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0b, 0x2e, 0x73, 0x72, + 0x70, 0x63, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x07, 0x5a, 0x05, 0x73, 0x72, 0x70, 0x63, + 0x2f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1553,7 +1553,7 @@ var file_srpc_proto_depIdxs = []int32{ 1, // 52: srpc.SillyGirlService.SenderAction:output_type -> srpc.Default 0, // 53: srpc.SillyGirlService.SenderDestroy:output_type -> srpc.Empty 1, // 54: srpc.SillyGirlService.AdapterRegist:output_type -> srpc.Default - 1, // 55: srpc.SillyGirlService.AdapterReceive:output_type -> srpc.Default + 0, // 55: srpc.SillyGirlService.AdapterReceive:output_type -> srpc.Empty 1, // 56: srpc.SillyGirlService.AdapterPush:output_type -> srpc.Default 0, // 57: srpc.SillyGirlService.AdapterDestroy:output_type -> srpc.Empty 1, // 58: srpc.SillyGirlService.AdapterSender:output_type -> srpc.Default diff --git a/proto3/srpc/srpc_grpc.pb.go b/proto3/srpc/srpc_grpc.pb.go index e5b4887..3221af2 100644 --- a/proto3/srpc/srpc_grpc.pb.go +++ b/proto3/srpc/srpc_grpc.pb.go @@ -80,7 +80,7 @@ type SillyGirlServiceClient interface { SenderAction(ctx context.Context, in *ReplyRequest, opts ...grpc.CallOption) (*Default, error) SenderDestroy(ctx context.Context, in *ReplyRequest, opts ...grpc.CallOption) (*Empty, error) AdapterRegist(ctx context.Context, opts ...grpc.CallOption) (SillyGirlService_AdapterRegistClient, error) - AdapterReceive(ctx context.Context, in *AdapterRequest, opts ...grpc.CallOption) (*Default, error) + AdapterReceive(ctx context.Context, in *AdapterRequest, opts ...grpc.CallOption) (*Empty, error) AdapterPush(ctx context.Context, in *AdapterRequest, opts ...grpc.CallOption) (*Default, error) AdapterDestroy(ctx context.Context, in *AdapterRequest, opts ...grpc.CallOption) (*Empty, error) AdapterSender(ctx context.Context, in *AdapterRequest, opts ...grpc.CallOption) (*Default, error) @@ -386,8 +386,8 @@ func (x *sillyGirlServiceAdapterRegistClient) Recv() (*Default, error) { return m, nil } -func (c *sillyGirlServiceClient) AdapterReceive(ctx context.Context, in *AdapterRequest, opts ...grpc.CallOption) (*Default, error) { - out := new(Default) +func (c *sillyGirlServiceClient) AdapterReceive(ctx context.Context, in *AdapterRequest, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) err := c.cc.Invoke(ctx, SillyGirlService_AdapterReceive_FullMethodName, in, out, opts...) if err != nil { return nil, err @@ -460,7 +460,7 @@ type SillyGirlServiceServer interface { SenderAction(context.Context, *ReplyRequest) (*Default, error) SenderDestroy(context.Context, *ReplyRequest) (*Empty, error) AdapterRegist(SillyGirlService_AdapterRegistServer) error - AdapterReceive(context.Context, *AdapterRequest) (*Default, error) + AdapterReceive(context.Context, *AdapterRequest) (*Empty, error) AdapterPush(context.Context, *AdapterRequest) (*Default, error) AdapterDestroy(context.Context, *AdapterRequest) (*Empty, error) AdapterSender(context.Context, *AdapterRequest) (*Default, error) @@ -547,7 +547,7 @@ func (UnimplementedSillyGirlServiceServer) SenderDestroy(context.Context, *Reply func (UnimplementedSillyGirlServiceServer) AdapterRegist(SillyGirlService_AdapterRegistServer) error { return status.Errorf(codes.Unimplemented, "method AdapterRegist not implemented") } -func (UnimplementedSillyGirlServiceServer) AdapterReceive(context.Context, *AdapterRequest) (*Default, error) { +func (UnimplementedSillyGirlServiceServer) AdapterReceive(context.Context, *AdapterRequest) (*Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method AdapterReceive not implemented") } func (UnimplementedSillyGirlServiceServer) AdapterPush(context.Context, *AdapterRequest) (*Default, error) {