mirror of https://github.com/poanetwork/gecko.git
39 lines
967 B
Go
39 lines
967 B
Go
// (c) 2019-2020, Ava Labs, Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package greadcloser
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
|
|
"github.com/ava-labs/gecko/vms/rpcchainvm/ghttp/greadcloser/proto"
|
|
)
|
|
|
|
// Server is a http.Handler that is managed over RPC.
|
|
type Server struct{ readCloser io.ReadCloser }
|
|
|
|
// NewServer returns a http.Handler instance manage remotely
|
|
func NewServer(readCloser io.ReadCloser) *Server {
|
|
return &Server{readCloser: readCloser}
|
|
}
|
|
|
|
// Read ...
|
|
func (s *Server) Read(ctx context.Context, req *proto.ReadRequest) (*proto.ReadResponse, error) {
|
|
buf := make([]byte, int(req.Length))
|
|
n, err := s.readCloser.Read(buf)
|
|
resp := &proto.ReadResponse{
|
|
Read: buf[:n],
|
|
}
|
|
if err != nil {
|
|
resp.Errored = true
|
|
resp.Error = err.Error()
|
|
}
|
|
return resp, nil
|
|
}
|
|
|
|
// Close ...
|
|
func (s *Server) Close(ctx context.Context, req *proto.CloseRequest) (*proto.CloseResponse, error) {
|
|
return &proto.CloseResponse{}, s.readCloser.Close()
|
|
}
|