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) } }