package main import ( "context" "time" "linkfog.com/pluginx/pluginrpc" pb "linkfog.com/pluginx/proto" "linkfog.com/public/lib/l" ) type pluginServer struct { pb.UnimplementedPluginServer } func newServer() *pluginServer { s := &pluginServer{} return s } func (s *pluginServer) Call(ctx context.Context, req *pb.Req) (*pb.Res, error) { res := pluginrpc.NewRes(req, 0, "success", []byte("pong")) return res, nil } func (s *pluginServer) SendFile(stream pb.Plugin_SendFileServer) error { return pluginrpc.SendFileHelper(stream, SendFileHandle) } func SendFileHandle(fs *pb.FileStream, filePath string) { l.Info("recv file header:", fs.Header) l.Infof("recv file name:%s, purpose:%s, size:%d, path:%s", fs.Name, fs.Purpose, fs.TotalSize, filePath) } func (s *pluginServer) Chat(req *pb.Req, stream pb.Plugin_ChatServer) error { moduleName := req.GetHeader().GetTo() l.Infof("RPC:start chat with %s", moduleName) ch = make(chan *pb.Res, 50) return pluginrpc.ChatHelper(req, stream, ch) } var ch chan *pb.Res func main() { pluginServer := newServer() grpcServerHelper, err := pluginrpc.NewPluginGrpcServer("/tmp/unix_domain.sock", pluginServer) if err != nil { l.Error("NewPluginGrpcServer err:", err) return } defer grpcServerHelper.Close() time.Sleep(10 * time.Second) go func() { msg := &pb.Res{Header: &pb.Header{ UUID: "123456", Timestamp: time.Now().Unix(), From: "test-plugin", To: "agent", Func: "", }, Code: 0, Desc: "chat info", } for { msg.Header.Timestamp = time.Now().Unix() msg.Code += 1 ch <- msg time.Sleep(5 * time.Second) } }() select {} }