...

Source file src/github.com/tmc/grpc-websocket-proxy/_examples/cmd/wsechoserver/server.go

Documentation: github.com/tmc/grpc-websocket-proxy/_examples/cmd/wsechoserver

     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