...
1 package main
2
3 import (
4 "bytes"
5 "fmt"
6 "time"
7
8 "github.com/golang/protobuf/jsonpb"
9 log "github.com/sirupsen/logrus"
10 "github.com/tmc/grpc-websocket-proxy/examples/cmd/wsechoserver/echoserver"
11 )
12
13 type Server struct{}
14
15 func (s *Server) Stream(_ *echoserver.Empty, stream echoserver.EchoService_StreamServer) error {
16 start := time.Now()
17 for i := 0; i < 5; i++ {
18 time.Sleep(time.Second)
19 if err := stream.Send(&echoserver.EchoResponse{
20 Message: "hello there!" + fmt.Sprint(time.Now().Sub(start)),
21 }); err != nil {
22 return err
23 }
24 }
25 return nil
26 }
27
28 func (s *Server) Echo(srv echoserver.EchoService_EchoServer) error {
29 for {
30 req, err := srv.Recv()
31 if err != nil {
32 return err
33 }
34 if err := srv.Send(&echoserver.EchoResponse{
35 Message: req.Message + "!",
36 }); err != nil {
37 return err
38 }
39 }
40 }
41
42 func (s *Server) Heartbeats(srv echoserver.EchoService_HeartbeatsServer) error {
43 go func() {
44 for {
45 _, err := srv.Recv()
46 if err != nil {
47 log.Println("Recv() err:", err)
48 return
49 }
50 log.Println("got hb from client")
51 }
52 }()
53 t := time.NewTicker(time.Second * 1)
54 for {
55 log.Println("sending hb")
56 hb := &echoserver.Heartbeat{
57 Status: echoserver.Heartbeat_OK,
58 }
59 b := new(bytes.Buffer)
60 if err := (&jsonpb.Marshaler{}).Marshal(b, hb); err != nil {
61 log.Println("marshal err:", err)
62 }
63 log.Println(string(b.Bytes()))
64 if err := srv.Send(hb); err != nil {
65 return err
66 }
67 <-t.C
68 }
69 return nil
70 }
71
View as plain text