X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=core%2Fstream.go;h=171b2017bcef97ed5ab9e3626267285b4afafe19;hb=d1f24d37bd447b64e402298bb8eb2479681facf9;hp=edc3f2b9145dbb2cbf612900fa18e24014119d21;hpb=1548c7e12531e3d055567d761c580a1c7ff0ac40;p=govpp.git 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 {