From d1f24d37bd447b64e402298bb8eb2479681facf9 Mon Sep 17 00:00:00 2001 From: Ondrej Fabry Date: Fri, 17 Jul 2020 10:36:28 +0200 Subject: Improve binapi generator - simplified Size/Marshal/Unmarshal methods - replace struc in unions with custom marshal/unmarshal - fix imports in generated files - fix mock adapter - generate rpc service using low-level stream API (dumps generate control ping or stream msg..) - move examples/binapi to binapi and generate all API for latest release - add binapigen.Plugin for developing custom generator plugins - optionally generate HTTP handlers (REST API) for RPC services - add govpp program for browsing VPP API Change-Id: I092e9ed2b0c17972b3476463c3d4b14dd76ed42b Signed-off-by: Ondrej Fabry --- core/stream.go | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'core/stream.go') diff --git a/core/stream.go b/core/stream.go index edc3f2b..171b201 100644 --- a/core/stream.go +++ b/core/stream.go @@ -62,8 +62,23 @@ func (c *Connection) NewStream(ctx context.Context) (api.Stream, error) { } func (c *Connection) Invoke(ctx context.Context, req api.Message, reply api.Message) error { - // TODO: implement invoke - panic("not implemented") + stream, err := c.NewStream(ctx) + if err != nil { + return err + } + if err := stream.SendMsg(req); err != nil { + return err + } + msg, err := stream.RecvMsg() + if err != nil { + return err + } + if msg.GetMessageName() != reply.GetMessageName() || + msg.GetCrcString() != reply.GetCrcString() { + return fmt.Errorf("unexpected reply: %T %+v", msg, msg) + } + reflect.ValueOf(reply).Elem().Set(reflect.ValueOf(msg).Elem()) + return nil } func (s *Stream) Context() context.Context { -- cgit 1.2.3-korg