code: func (bh *Handler) Handle(srv ab.AtomicBroadcast_BroadcastServer) error {
  	addr := util.ExtractRemoteAddress(srv.Context())
  	logger.Debugf("Starting new broadcast loop for %s", addr)
  	for {
  		msg, err := srv.Recv()
  		if err == io.EOF {
  			logger.Debugf("Received EOF from %s, hangup", addr)
  			return nil
  		}
  		if err != nil {
  			logger.Warningf("Error reading from %s: %s", addr, err)
  			return err
  		}
  
  		resp := bh.ProcessMessage(msg, addr)
  		err = srv.Send(resp)
  		if resp.Status != cb.Status_SUCCESS {
  			return err
  		}
  
  		if err != nil {
  			logger.Warningf("Error sending to %s: %s", addr, err)
  			return err
  		}
  	}
  
  }
docs: // Handle reads requests from a Broadcast stream, processes them, and returns the responses to the stream