From b9898ef45fe45dd33e594de8158cf6bde17349d1 Mon Sep 17 00:00:00 2001 From: Asim Date: Sat, 19 Dec 2015 23:38:46 +0000 Subject: [PATCH] Add server side codegen example --- examples/server/codegen/codegen.go | 83 +++++++++++++++++++++ examples/server/proto/example/example.pb.go | 10 +-- 2 files changed, 88 insertions(+), 5 deletions(-) create mode 100644 examples/server/codegen/codegen.go diff --git a/examples/server/codegen/codegen.go b/examples/server/codegen/codegen.go new file mode 100644 index 00000000..5d485aeb --- /dev/null +++ b/examples/server/codegen/codegen.go @@ -0,0 +1,83 @@ +package main + +import ( + log "github.com/golang/glog" + "github.com/micro/go-micro/cmd" + "github.com/micro/go-micro/examples/server/subscriber" + "github.com/micro/go-micro/server" + "golang.org/x/net/context" + + example "github.com/micro/go-micro/examples/server/proto/example" +) + +type Example struct{} + +func (e *Example) Call(ctx context.Context, req *example.Request, rsp *example.Response) error { + log.Info("Received Example.Call request") + rsp.Msg = server.Config().Id() + ": Hello " + req.Name + return nil +} + +func (e *Example) Stream(ctx context.Context, req *example.StreamingRequest, stream example.Example_StreamStream) error { + log.Infof("Received Example.Stream request with count: %d", req.Count) + + for i := 0; i < int(req.Count); i++ { + log.Infof("Responding: %d", i) + if err := stream.SendR(&example.StreamingResponse{ + Count: int64(i), + }); err != nil { + return err + } + } + + return nil +} + +func (e *Example) PingPong(ctx context.Context, stream example.Example_PingPongStream) error { + for { + req, err := stream.RecvR() + if err != nil { + return err + } + log.Infof("Got ping %v", req.Stroke) + if err := stream.SendR(&example.Pong{Stroke: req.Stroke}); err != nil { + return err + } + } + return nil +} + +func main() { + // optionally setup command line usage + cmd.Init() + + // Initialise Server + server.Init( + server.Name("go.micro.srv.example"), + ) + + // Register Subscribers + server.Subscribe( + server.NewSubscriber( + "topic.go.micro.srv.example", + new(subscriber.Example), + ), + ) + + server.Subscribe( + server.NewSubscriber( + "topic.go.micro.srv.example", + subscriber.Handler, + ), + ) + + // Register Handler + example.RegisterExampleHandler( + server.DefaultServer, new(Example), + ) + + // Run server + if err := server.Run(); err != nil { + log.Fatal(err) + } +} diff --git a/examples/server/proto/example/example.pb.go b/examples/server/proto/example/example.pb.go index f48bff5a..7731156b 100644 --- a/examples/server/proto/example/example.pb.go +++ b/examples/server/proto/example/example.pb.go @@ -219,18 +219,18 @@ type ExampleHandler interface { } func RegisterExampleHandler(s server.Server, hdlr ExampleHandler) { - s.Handle(s.NewHandler(&exampleHandler{hdlr})) + s.Handle(s.NewHandler(&Example{hdlr})) } -type exampleHandler struct { +type Example struct { ExampleHandler } -func (h *exampleHandler) Call(ctx context.Context, in *Request, out *Response) error { +func (h *Example) Call(ctx context.Context, in *Request, out *Response) error { return h.ExampleHandler.Call(ctx, in, out) } -func (h *exampleHandler) Stream(ctx context.Context, stream server.Streamer) error { +func (h *Example) Stream(ctx context.Context, stream server.Streamer) error { m := new(StreamingRequest) if err := stream.Recv(m); err != nil { return err @@ -251,7 +251,7 @@ func (x *exampleStreamStream) SendR(m *StreamingResponse) error { return x.Streamer.Send(m) } -func (h *exampleHandler) PingPong(ctx context.Context, stream server.Streamer) error { +func (h *Example) PingPong(ctx context.Context, stream server.Streamer) error { return h.ExampleHandler.PingPong(ctx, &examplePingPongStream{stream}) }