Documentation ¶
Index ¶
- Variables
- func AcceptMuxedListener(ctx context.Context, lis net.Listener, srv *Server, yamuxConf *yamux.Config) error
- func CheckStripPrefix(id string, matchPrefixes []string) (strippedID string, matchedPrefix string)
- func Listen(ctx context.Context, addr string, srv *Server, errCh <-chan error) error
- func NewMuxedConn(conn net.Conn, outbound bool, yamuxConf *yamux.Config) (network.MuxedConn, error)
- func NewMuxedConnWithRwc(ctx context.Context, rwc io.ReadWriteCloser, outbound bool, ...) (network.MuxedConn, error)
- func NewPipeStream(ctx context.Context) (Stream, Stream)
- func NewWebSocketConn(ctx context.Context, conn *websocket.Conn, isServer bool, ...) (network.MuxedConn, error)
- func NewYamuxConfig() *yamux.Config
- type CallData
- func (m *CallData) CloneMessageVT() proto.Message
- func (m *CallData) CloneVT() *CallData
- func (*CallData) Descriptor() ([]byte, []int)deprecated
- func (this *CallData) EqualMessageVT(thatMsg proto.Message) bool
- func (this *CallData) EqualVT(that *CallData) bool
- func (x *CallData) GetComplete() bool
- func (x *CallData) GetData() []byte
- func (x *CallData) GetDataIsZero() bool
- func (x *CallData) GetError() string
- func (m *CallData) MarshalToSizedBufferVT(dAtA []byte) (int, error)
- func (m *CallData) MarshalToVT(dAtA []byte) (int, error)
- func (m *CallData) MarshalVT() (dAtA []byte, err error)
- func (*CallData) ProtoMessage()
- func (x *CallData) ProtoReflect() protoreflect.Message
- func (x *CallData) Reset()
- func (m *CallData) SizeVT() (n int)
- func (x *CallData) String() string
- func (m *CallData) UnmarshalVT(dAtA []byte) error
- func (p *CallData) Validate() error
- type CallStart
- func (m *CallStart) CloneMessageVT() proto.Message
- func (m *CallStart) CloneVT() *CallStart
- func (*CallStart) Descriptor() ([]byte, []int)deprecated
- func (this *CallStart) EqualMessageVT(thatMsg proto.Message) bool
- func (this *CallStart) EqualVT(that *CallStart) bool
- func (x *CallStart) GetData() []byte
- func (x *CallStart) GetDataIsZero() bool
- func (x *CallStart) GetRpcMethod() string
- func (x *CallStart) GetRpcService() string
- func (m *CallStart) MarshalToSizedBufferVT(dAtA []byte) (int, error)
- func (m *CallStart) MarshalToVT(dAtA []byte) (int, error)
- func (m *CallStart) MarshalVT() (dAtA []byte, err error)
- func (*CallStart) ProtoMessage()
- func (x *CallStart) ProtoReflect() protoreflect.Message
- func (x *CallStart) Reset()
- func (m *CallStart) SizeVT() (n int)
- func (x *CallStart) String() string
- func (m *CallStart) UnmarshalVT(dAtA []byte) error
- func (p *CallStart) Validate() error
- type Client
- type ClientRPC
- func (r *ClientRPC) Close()
- func (c *ClientRPC) Context() context.Context
- func (c *ClientRPC) HandleCallCancel() error
- func (c *ClientRPC) HandleCallData(pkt *CallData) error
- func (r *ClientRPC) HandleCallStart(pkt *CallStart) error
- func (r *ClientRPC) HandlePacket(msg *Packet) error
- func (r *ClientRPC) HandlePacketData(data []byte) error
- func (r *ClientRPC) HandleStreamClose(closeErr error)
- func (c *ClientRPC) ReadOne() ([]byte, error)
- func (r *ClientRPC) Start(writer Writer, writeFirstMsg bool, firstMsg []byte) error
- func (c *ClientRPC) Wait(ctx context.Context) error
- func (c *ClientRPC) WriteCallData(data []byte, complete bool, err error) error
- func (c *ClientRPC) WriteCancel() error
- type ClientSet
- func (c *ClientSet) ExecCall(ctx context.Context, service, method string, in, out Message) error
- func (c *ClientSet) NewRawStream(ctx context.Context, msgHandler PacketDataHandler, closeHandler CloseHandler) (Writer, error)
- func (c *ClientSet) NewStream(ctx context.Context, service, method string, firstMsg Message) (Stream, error)
- type CloseHandler
- type HTTPServer
- type Handler
- type Invoker
- type InvokerFunc
- type InvokerSlice
- type Message
- type MsgStream
- type MsgStreamRw
- type Mux
- type OpenStreamFunc
- type Packet
- func (m *Packet) CloneMessageVT() proto.Message
- func (m *Packet) CloneVT() *Packet
- func (*Packet) Descriptor() ([]byte, []int)deprecated
- func (this *Packet) EqualMessageVT(thatMsg proto.Message) bool
- func (this *Packet) EqualVT(that *Packet) bool
- func (m *Packet) GetBody() isPacket_Body
- func (x *Packet) GetCallCancel() bool
- func (x *Packet) GetCallData() *CallData
- func (x *Packet) GetCallStart() *CallStart
- func (m *Packet) MarshalToSizedBufferVT(dAtA []byte) (int, error)
- func (m *Packet) MarshalToVT(dAtA []byte) (int, error)
- func (m *Packet) MarshalVT() (dAtA []byte, err error)
- func (*Packet) ProtoMessage()
- func (x *Packet) ProtoReflect() protoreflect.Message
- func (x *Packet) Reset()
- func (m *Packet) SizeVT() (n int)
- func (x *Packet) String() string
- func (m *Packet) UnmarshalVT(dAtA []byte) error
- func (p *Packet) Validate() error
- type PacketDataHandler
- type PacketHandler
- type PacketReadWriter
- func (r *PacketReadWriter) Close() error
- func (r *PacketReadWriter) ReadPump(cb PacketDataHandler, closed CloseHandler)
- func (r *PacketReadWriter) ReadToHandler(cb PacketDataHandler) error
- func (r *PacketReadWriter) Write(p []byte) (n int, err error)
- func (r *PacketReadWriter) WritePacket(p *Packet) error
- type Packet_CallCancel
- func (m *Packet_CallCancel) CloneVT() isPacket_Body
- func (this *Packet_CallCancel) EqualVT(thatIface isPacket_Body) bool
- func (m *Packet_CallCancel) MarshalToSizedBufferVT(dAtA []byte) (int, error)
- func (m *Packet_CallCancel) MarshalToVT(dAtA []byte) (int, error)
- func (m *Packet_CallCancel) SizeVT() (n int)
- type Packet_CallData
- type Packet_CallStart
- func (m *Packet_CallStart) CloneVT() isPacket_Body
- func (this *Packet_CallStart) EqualVT(thatIface isPacket_Body) bool
- func (m *Packet_CallStart) MarshalToSizedBufferVT(dAtA []byte) (int, error)
- func (m *Packet_CallStart) MarshalToVT(dAtA []byte) (int, error)
- func (m *Packet_CallStart) SizeVT() (n int)
- type PrefixClient
- func (i *PrefixClient) ExecCall(ctx context.Context, service, method string, in, out Message) error
- func (i *PrefixClient) NewRawStream(ctx context.Context, msgHandler PacketDataHandler, closeHandler CloseHandler) (Writer, error)
- func (i *PrefixClient) NewStream(ctx context.Context, service, method string, firstMsg Message) (Stream, error)
- type PrefixInvoker
- type RawMessage
- type RawStreamCtor
- type RawStreamRwc
- type RwcConn
- func (p *RwcConn) Close() error
- func (p *RwcConn) LocalAddr() net.Addr
- func (p *RwcConn) Read(b []byte) (n int, err error)
- func (p *RwcConn) RemoteAddr() net.Addr
- func (p *RwcConn) SetDeadline(t time.Time) error
- func (p *RwcConn) SetReadDeadline(t time.Time) error
- func (p *RwcConn) SetWriteDeadline(t time.Time) error
- func (p *RwcConn) Write(pkt []byte) (n int, err error)
- type Server
- type ServerRPC
- func (c *ServerRPC) Context() context.Context
- func (c *ServerRPC) HandleCallCancel() error
- func (c *ServerRPC) HandleCallData(pkt *CallData) error
- func (r *ServerRPC) HandleCallStart(pkt *CallStart) error
- func (r *ServerRPC) HandlePacket(msg *Packet) error
- func (r *ServerRPC) HandlePacketData(data []byte) error
- func (c *ServerRPC) HandleStreamClose(closeErr error)
- func (c *ServerRPC) ReadOne() ([]byte, error)
- func (c *ServerRPC) Wait(ctx context.Context) error
- func (c *ServerRPC) WriteCallData(data []byte, complete bool, err error) error
- func (c *ServerRPC) WriteCancel() error
- type Stream
- type StreamRwc
- type VClient
- func (c *VClient) ExecCall(ctx context.Context, service, method string, in, out Message) (err error)
- func (c *VClient) NewRawStream(ctx context.Context, msgHandler PacketDataHandler, closeHandler CloseHandler) (writer Writer, err error)
- func (c *VClient) NewStream(ctx context.Context, service, method string, firstMsg Message) (stream Stream, err error)
- type VMux
- type Writer
Constants ¶
This section is empty.
Variables ¶
var ( // ErrUnimplemented is returned if the RPC method was not implemented. ErrUnimplemented = errors.New("unimplemented") // ErrCompleted is returned if a message is received after the rpc was completed. ErrCompleted = errors.New("unexpected packet after rpc was completed") // ErrUnrecognizedPacket is returned if the packet type was not recognized. ErrUnrecognizedPacket = errors.New("unrecognized packet type") // ErrEmptyPacket is returned if nothing is specified in a packet. ErrEmptyPacket = errors.New("invalid empty packet") // ErrInvalidMessage indicates the message failed to parse. ErrInvalidMessage = errors.New("invalid message") // ErrEmptyMethodID is returned if the method id was empty. ErrEmptyMethodID = errors.New("method id empty") // ErrEmptyServiceID is returned if the service id was empty. ErrEmptyServiceID = errors.New("service id empty") // ErrNoAvailableClients is returned if no clients were available. ErrNoAvailableClients = errors.New("no available rpc clients") )
var File_github_com_aperturerobotics_starpc_srpc_rpcproto_proto protoreflect.FileDescriptor
Functions ¶
func AcceptMuxedListener ¶ added in v0.8.3
func AcceptMuxedListener(ctx context.Context, lis net.Listener, srv *Server, yamuxConf *yamux.Config) error
AcceptMuxedListener accepts incoming connections from a net.Listener.
Uses the default yamux muxer. If yamux conf is nil, uses the defaults.
func CheckStripPrefix ¶ added in v0.12.0
CheckStripPrefix checks if the string has any of the given prefixes and strips the matched prefix if any.
if len(matchPrefixes) == 0 returns the ID without changing it.
func Listen ¶ added in v0.18.1
Listen listens for incoming connections with TCP on the given address with the default muxed conn type. Returns on any fatal error or if ctx was canceled. errCh is an optional error channel (can be nil)
func NewMuxedConn ¶ added in v0.8.2
NewMuxedConn constructs a new MuxedConn from a net.Conn.
If yamuxConf is nil, uses defaults.
func NewMuxedConnWithRwc ¶ added in v0.10.8
func NewMuxedConnWithRwc( ctx context.Context, rwc io.ReadWriteCloser, outbound bool, yamuxConf *yamux.Config, ) (network.MuxedConn, error)
NewMuxedConnWithRwc builds a new MuxedConn with a io.ReadWriteCloser.
If yamuxConf is nil, uses defaults.
func NewPipeStream ¶
NewPipeStream constructs a new in-memory stream.
func NewWebSocketConn ¶
func NewWebSocketConn( ctx context.Context, conn *websocket.Conn, isServer bool, yamuxConf *yamux.Config, ) (network.MuxedConn, error)
NewWebSocketConn wraps a websocket into a MuxedConn. if yamuxConf is unset, uses the defaults.
func NewYamuxConfig ¶ added in v0.13.0
NewYamuxConfig builds the default yamux configuration.
Types ¶
type CallData ¶
type CallData struct { // Data contains the packet in the sequence. Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` // DataIsZero indicates Data is set with an empty message. DataIsZero bool `protobuf:"varint,2,opt,name=data_is_zero,json=dataIsZero,proto3" json:"data_is_zero,omitempty"` // Complete indicates the RPC call is completed. Complete bool `protobuf:"varint,3,opt,name=complete,proto3" json:"complete,omitempty"` // Error contains any error that caused the RPC to fail. // If set, implies complete=true. Error string `protobuf:"bytes,4,opt,name=error,proto3" json:"error,omitempty"` // contains filtered or unexported fields }
CallData contains a message in a streaming RPC sequence.
func (*CallData) CloneMessageVT ¶ added in v0.18.3
func (*CallData) Descriptor
deprecated
func (*CallData) EqualMessageVT ¶ added in v0.18.3
func (*CallData) GetComplete ¶
func (*CallData) GetDataIsZero ¶ added in v0.1.8
func (*CallData) MarshalToSizedBufferVT ¶
func (*CallData) ProtoMessage ¶
func (*CallData) ProtoMessage()
func (*CallData) ProtoReflect ¶
func (x *CallData) ProtoReflect() protoreflect.Message
func (*CallData) UnmarshalVT ¶
type CallStart ¶
type CallStart struct { // RpcService is the service to contact. // Must be set. RpcService string `protobuf:"bytes,1,opt,name=rpc_service,json=rpcService,proto3" json:"rpc_service,omitempty"` // RpcMethod is the RPC method to call. // Must be set. RpcMethod string `protobuf:"bytes,2,opt,name=rpc_method,json=rpcMethod,proto3" json:"rpc_method,omitempty"` // Data contains the request or the first message in the stream. // Optional if streaming. Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` // DataIsZero indicates Data is set with an empty message. DataIsZero bool `protobuf:"varint,4,opt,name=data_is_zero,json=dataIsZero,proto3" json:"data_is_zero,omitempty"` // contains filtered or unexported fields }
CallStart requests starting a new RPC call.
func (*CallStart) CloneMessageVT ¶ added in v0.18.3
func (*CallStart) Descriptor
deprecated
func (*CallStart) EqualMessageVT ¶ added in v0.18.3
func (*CallStart) GetDataIsZero ¶ added in v0.1.8
func (*CallStart) GetRpcMethod ¶
func (*CallStart) GetRpcService ¶
func (*CallStart) MarshalToSizedBufferVT ¶
func (*CallStart) ProtoMessage ¶
func (*CallStart) ProtoMessage()
func (*CallStart) ProtoReflect ¶
func (x *CallStart) ProtoReflect() protoreflect.Message
func (*CallStart) UnmarshalVT ¶
type Client ¶
type Client interface { // ExecCall executes a request/reply RPC with the remote. ExecCall(ctx context.Context, service, method string, in, out Message) error // NewStream starts a streaming RPC with the remote & returns the stream. // firstMsg is optional. NewStream(ctx context.Context, service, method string, firstMsg Message) (Stream, error) // NewRawStream opens a new raw stream with the remote. // Implements OpenStreamFunc. // msgHandler must not be called concurrently. NewRawStream(ctx context.Context, msgHandler PacketDataHandler, closeHandler CloseHandler) (Writer, error) }
Client implements a SRPC client which can initiate RPC streams.
func NewClient ¶
func NewClient(openStream OpenStreamFunc) Client
NewClient constructs a client with a OpenStreamFunc.
func NewClientWithConn ¶ added in v0.8.2
NewClientWithConn constructs the muxer and the client.
if yamuxConf is nil, uses defaults.
func NewClientWithMuxedConn ¶ added in v0.3.6
NewClientWithMuxedConn constructs a new client with a MuxedConn.
type ClientRPC ¶
type ClientRPC struct {
// contains filtered or unexported fields
}
ClientRPC represents the client side of an on-going RPC call message stream.
func NewClientRPC ¶
NewClientRPC constructs a new ClientRPC session and writes CallStart. the writer will be closed when the ClientRPC completes. service and method must be specified. must call Start after creating the RPC object.
func (*ClientRPC) Close ¶
func (r *ClientRPC) Close()
Close releases any resources held by the ClientRPC.
func (*ClientRPC) HandleCallCancel ¶ added in v0.15.0
func (c *ClientRPC) HandleCallCancel() error
HandleCallCancel handles the call cancel packet.
func (*ClientRPC) HandleCallData ¶
HandleCallData handles the call data packet.
func (*ClientRPC) HandleCallStart ¶
HandleCallStart handles the call start packet.
func (*ClientRPC) HandlePacket ¶
HandlePacket handles an incoming parsed message packet.
func (*ClientRPC) HandlePacketData ¶
HandlePacketData handles an incoming unparsed message packet.
func (*ClientRPC) HandleStreamClose ¶ added in v0.8.0
HandleStreamClose handles the stream closing optionally w/ an error.
func (*ClientRPC) ReadOne ¶ added in v0.8.5
ReadOne reads a single message and returns.
returns io.EOF if the stream ended without a packet.
func (*ClientRPC) Start ¶
Start sets the writer and writes the MsgSend message. must only be called once!
func (*ClientRPC) WriteCallData ¶ added in v0.15.0
WriteCallData writes a call data packet.
func (*ClientRPC) WriteCancel ¶ added in v0.15.3
func (c *ClientRPC) WriteCancel() error
WriteCancel writes a call cancel packet.
type ClientSet ¶ added in v0.12.2
type ClientSet struct {
// contains filtered or unexported fields
}
ClientSet wraps a list of clients into one Client.
func NewClientSet ¶ added in v0.12.2
NewClientSet constructs a new client set.
func (*ClientSet) ExecCall ¶ added in v0.12.2
ExecCall executes a request/reply RPC with the remote.
func (*ClientSet) NewRawStream ¶ added in v0.19.0
func (c *ClientSet) NewRawStream( ctx context.Context, msgHandler PacketDataHandler, closeHandler CloseHandler, ) (Writer, error)
NewRawStream opens a new raw stream with the remote. Implements OpenStreamFunc. msgHandler must not be called concurrently.
type CloseHandler ¶ added in v0.8.0
type CloseHandler = func(closeErr error)
CloseHandler handles the stream closing with an optional error.
type HTTPServer ¶
type HTTPServer struct {
// contains filtered or unexported fields
}
HTTPServer implements the SRPC server.
func NewHTTPServer ¶
func NewHTTPServer(mux Mux, path string) (*HTTPServer, error)
NewHTTPServer builds a http server / handler. if path is empty, serves on all routes.
func (*HTTPServer) ServeHTTP ¶
func (s *HTTPServer) ServeHTTP(w http.ResponseWriter, r *http.Request)
type Handler ¶
type Handler interface { // Invoker invokes the methods. Invoker // GetServiceID returns the ID of the service. GetServiceID() string // GetMethodIDs returns the list of methods for the service. GetMethodIDs() []string }
Handler describes a SRPC call handler implementation.
type Invoker ¶ added in v0.10.7
type Invoker interface { // InvokeMethod invokes the method matching the service & method ID. // Returns false, nil if not found. // If service string is empty, ignore it. InvokeMethod(serviceID, methodID string, strm Stream) (bool, error) }
Invoker is a function for invoking SRPC service methods.
type InvokerFunc ¶ added in v0.22.5
InvokerFunc is a function implementing InvokeMethod.
func (InvokerFunc) InvokeMethod ¶ added in v0.22.5
func (f InvokerFunc) InvokeMethod(serviceID, methodID string, strm Stream) (bool, error)
InvokeMethod invokes the method matching the service & method ID. Returns false, nil if not found. If service string is empty, ignore it.
type InvokerSlice ¶ added in v0.15.2
type InvokerSlice []Invoker
InvokerSlice is a list of invokers.
func (InvokerSlice) InvokeMethod ¶ added in v0.15.2
func (s InvokerSlice) InvokeMethod(serviceID, methodID string, strm Stream) (bool, error)
InvokeMethod invokes the method matching the service & method ID. Returns false, nil if not found. If service string is empty, ignore it.
type MsgStream ¶ added in v0.4.0
type MsgStream struct {
// contains filtered or unexported fields
}
MsgStream implements the stream interface passed to implementations.
func NewMsgStream ¶ added in v0.4.0
func NewMsgStream( ctx context.Context, rw MsgStreamRw, closeCb func(), ) *MsgStream
NewMsgStream constructs a new Stream with a ClientRPC. dataCh should be closed when no more messages will arrive.
func (*MsgStream) CloseSend ¶ added in v0.4.0
CloseSend signals to the remote that we will no longer send any messages.
type MsgStreamRw ¶ added in v0.15.0
type MsgStreamRw interface { // ReadOne reads a single message and returns. // // returns io.EOF if the stream ended. ReadOne() ([]byte, error) // WriteCallData writes a call data packet. WriteCallData(data []byte, complete bool, err error) error }
MsgStreamRw is the read-write interface for MsgStream.
type Mux ¶
type Mux interface { // Invoker invokes the methods. Invoker // Register registers a new RPC method handler (service). Register(handler Handler) error // HasService checks if the service ID exists in the handlers. HasService(serviceID string) bool // HasServiceMethod checks if <service-id, method-id> exists in the handlers. HasServiceMethod(serviceID, methodID string) bool }
Mux contains a set of <service, method> handlers.
type OpenStreamFunc ¶
type OpenStreamFunc = func( ctx context.Context, msgHandler PacketDataHandler, closeHandler CloseHandler, ) (Writer, error)
OpenStreamFunc opens a stream with a remote. msgHandler must not be called concurrently.
func NewOpenStreamWithMuxedConn ¶ added in v0.3.6
func NewOpenStreamWithMuxedConn(conn network.MuxedConn) OpenStreamFunc
NewOpenStreamWithMuxedConn constructs a OpenStream func with a MuxedConn.
func NewServerPipe ¶
func NewServerPipe(server *Server) OpenStreamFunc
NewServerPipe constructs a open stream func which creates an in-memory Pipe Stream with the given Server. Starts read pumps for both. Starts the HandleStream function on the server in a separate goroutine.
type Packet ¶
type Packet struct { // Body is the packet body. // // Types that are assignable to Body: // // *Packet_CallStart // *Packet_CallData // *Packet_CallCancel Body isPacket_Body `protobuf_oneof:"body"` // contains filtered or unexported fields }
Packet is a message sent over a srpc packet connection.
func NewCallCancelPacket ¶ added in v0.14.0
func NewCallCancelPacket() *Packet
NewCallCancelPacket constructs a new CallCancel packet with cancel.
func NewCallDataPacket ¶
NewCallDataPacket constructs a new CallData packet.
func NewCallStartPacket ¶
NewCallStartPacket constructs a new CallStart packet.
func (*Packet) CloneMessageVT ¶ added in v0.18.3
func (*Packet) Descriptor
deprecated
func (*Packet) EqualMessageVT ¶ added in v0.18.3
func (*Packet) GetCallCancel ¶ added in v0.14.0
func (*Packet) GetCallData ¶
func (*Packet) GetCallStart ¶
func (*Packet) MarshalToSizedBufferVT ¶
func (*Packet) ProtoMessage ¶
func (*Packet) ProtoMessage()
func (*Packet) ProtoReflect ¶
func (x *Packet) ProtoReflect() protoreflect.Message
func (*Packet) UnmarshalVT ¶
type PacketDataHandler ¶ added in v0.19.0
PacketDataHandler handles a packet before it is parsed.
func NewPacketDataHandler ¶ added in v0.19.0
func NewPacketDataHandler(handler PacketHandler) PacketDataHandler
NewPacketDataHandler wraps a PacketHandler with a decoding step.
type PacketHandler ¶
PacketHandler handles a packet.
pkt is optional (can be nil) if closeErr is set, the stream is closed after pkt.
type PacketReadWriter ¶ added in v0.19.0
type PacketReadWriter struct {
// contains filtered or unexported fields
}
PacketReadWriter reads and writes packets from a io.ReadWriter. Uses a LittleEndian uint32 length prefix.
func NewPacketReadWriter ¶
func NewPacketReadWriter(rw io.ReadWriteCloser) *PacketReadWriter
NewPacketReadWriter constructs a new read/writer.
func (*PacketReadWriter) Close ¶ added in v0.19.0
func (r *PacketReadWriter) Close() error
Close closes the packet rw.
func (*PacketReadWriter) ReadPump ¶ added in v0.19.0
func (r *PacketReadWriter) ReadPump(cb PacketDataHandler, closed CloseHandler)
ReadPump executes the read pump in a goroutine.
calls the handler when closed or returning an error
func (*PacketReadWriter) ReadToHandler ¶ added in v0.19.0
func (r *PacketReadWriter) ReadToHandler(cb PacketDataHandler) error
ReadToHandler reads data to the given handler. Does not handle closing the stream, use ReadPump instead.
func (*PacketReadWriter) Write ¶ added in v0.19.0
func (r *PacketReadWriter) Write(p []byte) (n int, err error)
Write writes raw data to the remote.
func (*PacketReadWriter) WritePacket ¶ added in v0.19.0
func (r *PacketReadWriter) WritePacket(p *Packet) error
WritePacket writes a packet to the writer.
type Packet_CallCancel ¶ added in v0.14.0
type Packet_CallCancel struct { // CallCancel cancels the call. CallCancel bool `protobuf:"varint,3,opt,name=call_cancel,json=callCancel,proto3,oneof"` }
func (*Packet_CallCancel) CloneVT ¶ added in v0.14.0
func (m *Packet_CallCancel) CloneVT() isPacket_Body
func (*Packet_CallCancel) EqualVT ¶ added in v0.14.0
func (this *Packet_CallCancel) EqualVT(thatIface isPacket_Body) bool
func (*Packet_CallCancel) MarshalToSizedBufferVT ¶ added in v0.14.0
func (m *Packet_CallCancel) MarshalToSizedBufferVT(dAtA []byte) (int, error)
func (*Packet_CallCancel) MarshalToVT ¶ added in v0.14.0
func (m *Packet_CallCancel) MarshalToVT(dAtA []byte) (int, error)
func (*Packet_CallCancel) SizeVT ¶ added in v0.14.0
func (m *Packet_CallCancel) SizeVT() (n int)
type Packet_CallData ¶
type Packet_CallData struct { // CallData is a message in a streaming RPC sequence. CallData *CallData `protobuf:"bytes,2,opt,name=call_data,json=callData,proto3,oneof"` }
func (*Packet_CallData) CloneVT ¶ added in v0.12.3
func (m *Packet_CallData) CloneVT() isPacket_Body
func (*Packet_CallData) EqualVT ¶ added in v0.10.0
func (this *Packet_CallData) EqualVT(thatIface isPacket_Body) bool
func (*Packet_CallData) MarshalToSizedBufferVT ¶
func (m *Packet_CallData) MarshalToSizedBufferVT(dAtA []byte) (int, error)
func (*Packet_CallData) MarshalToVT ¶
func (m *Packet_CallData) MarshalToVT(dAtA []byte) (int, error)
func (*Packet_CallData) SizeVT ¶
func (m *Packet_CallData) SizeVT() (n int)
type Packet_CallStart ¶
type Packet_CallStart struct { // CallStart initiates a new call. CallStart *CallStart `protobuf:"bytes,1,opt,name=call_start,json=callStart,proto3,oneof"` }
func (*Packet_CallStart) CloneVT ¶ added in v0.12.3
func (m *Packet_CallStart) CloneVT() isPacket_Body
func (*Packet_CallStart) EqualVT ¶ added in v0.10.0
func (this *Packet_CallStart) EqualVT(thatIface isPacket_Body) bool
func (*Packet_CallStart) MarshalToSizedBufferVT ¶
func (m *Packet_CallStart) MarshalToSizedBufferVT(dAtA []byte) (int, error)
func (*Packet_CallStart) MarshalToVT ¶
func (m *Packet_CallStart) MarshalToVT(dAtA []byte) (int, error)
func (*Packet_CallStart) SizeVT ¶
func (m *Packet_CallStart) SizeVT() (n int)
type PrefixClient ¶ added in v0.12.0
type PrefixClient struct {
// contains filtered or unexported fields
}
PrefixClient checks for and strips a set of prefixes from a Client.
func NewPrefixClient ¶ added in v0.12.0
func NewPrefixClient(client Client, serviceIDPrefixes []string) *PrefixClient
NewPrefixClient constructs a new PrefixClient.
serviceIDPrefixes is the list of service id prefixes to match. strips the prefix before calling the underlying Invoke function. if none of the prefixes match, returns unimplemented. if empty: forwards all services w/o stripping any prefix.
func (*PrefixClient) ExecCall ¶ added in v0.12.0
ExecCall executes a request/reply RPC with the remote.
func (*PrefixClient) NewRawStream ¶ added in v0.19.0
func (i *PrefixClient) NewRawStream(ctx context.Context, msgHandler PacketDataHandler, closeHandler CloseHandler) (Writer, error)
NewRawStream opens a new raw stream with the remote. Implements OpenStreamFunc. msgHandler must not be called concurrently.
type PrefixInvoker ¶ added in v0.11.3
type PrefixInvoker struct {
// contains filtered or unexported fields
}
PrefixInvoker checks for and strips a set of prefixes from a Invoker.
func NewPrefixInvoker ¶ added in v0.11.3
func NewPrefixInvoker(inv Invoker, serviceIDPrefixes []string) *PrefixInvoker
NewPrefixInvoker constructs a new PrefixInvoker.
serviceIDPrefixes is the list of service id prefixes to match. strips the prefix before calling the underlying Invoke function. if none of the prefixes match, returns unimplemented. if empty: forwards all services w/o stripping any prefix.
func (*PrefixInvoker) InvokeMethod ¶ added in v0.11.3
func (i *PrefixInvoker) InvokeMethod(serviceID, methodID string, strm Stream) (bool, error)
InvokeMethod invokes the method matching the service & method ID. Returns false, nil if not found. If service string is empty, ignore it.
type RawMessage ¶ added in v0.15.2
type RawMessage struct {
// contains filtered or unexported fields
}
RawMessage is a raw protobuf message container.
The empty value is valid with copy=false.
func NewRawMessage ¶ added in v0.15.2
func NewRawMessage(data []byte, copy bool) *RawMessage
NewRawMessage constructs a new raw message. If copy=true, copies data in MarshalVT. Note: the data buffer will be retained and used. The data buffer will be written to and/or replaced in UnmarshalVT.
func (*RawMessage) Clear ¶ added in v0.19.0
func (m *RawMessage) Clear()
Clear sets the length of the data buffer to 0 without releasing it.
func (*RawMessage) GetData ¶ added in v0.15.2
func (m *RawMessage) GetData() []byte
GetData returns the data buffer without copying.
func (*RawMessage) MarshalVT ¶ added in v0.15.2
func (m *RawMessage) MarshalVT() ([]byte, error)
func (*RawMessage) Reset ¶ added in v0.19.0
func (m *RawMessage) Reset()
Reset releases the data buffer.
func (*RawMessage) SetData ¶ added in v0.15.2
func (m *RawMessage) SetData(data []byte)
SetData sets the data buffer. if copy=true, copies the data to the internal slice. otherwise retains the buffer.
func (*RawMessage) UnmarshalVT ¶ added in v0.15.2
func (m *RawMessage) UnmarshalVT(data []byte) error
type RawStreamCtor ¶ added in v0.19.0
type RawStreamCtor func(ctx context.Context, msgHandler PacketDataHandler, closeHandler CloseHandler) (Writer, error)
RawStreamCtor is a function that builds a raw stream.
type RawStreamRwc ¶ added in v0.19.0
type RawStreamRwc struct {
// contains filtered or unexported fields
}
RawStreamRwc implements io.ReadWriteCloser with a raw stream.
func NewRawStreamRwc ¶ added in v0.19.0
func NewRawStreamRwc(ctx context.Context, ctorFn RawStreamCtor) (*RawStreamRwc, error)
func (*RawStreamRwc) Close ¶ added in v0.19.0
func (r *RawStreamRwc) Close() error
Close closes the stream.
func (*RawStreamRwc) Read ¶ added in v0.19.0
func (r *RawStreamRwc) Read(p []byte) (n int, err error)
Read reads data from the stream to p. Implements io.Reader.
func (*RawStreamRwc) Write ¶ added in v0.19.0
func (r *RawStreamRwc) Write(p []byte) (int, error)
Write writes data to the stream.
func (*RawStreamRwc) WritePacket ¶ added in v0.19.0
func (r *RawStreamRwc) WritePacket(p *Packet) error
WritePacket writes a packet to the remote.
type RwcConn ¶ added in v0.10.8
type RwcConn struct {
// contains filtered or unexported fields
}
RwcConn implements a Conn with a buffered ReadWriteCloser.
func NewRwcConn ¶ added in v0.10.8
func NewRwcConn( ctx context.Context, rwc io.ReadWriteCloser, laddr, raddr net.Addr, bufferPacketN int, ) *RwcConn
NewRwcConn constructs a new packet conn and starts the rx pump.
func (*RwcConn) Close ¶ added in v0.10.8
Close closes the connection. Any blocked ReadFrom or WriteTo operations will be unblocked and return errors.
func (*RwcConn) Read ¶ added in v0.10.8
Read reads data from the connection. Read can be made to time out and return an error after a fixed time limit; see SetDeadline and SetReadDeadline.
func (*RwcConn) RemoteAddr ¶ added in v0.10.8
RemoteAddr returns the bound remote network address.
func (*RwcConn) SetDeadline ¶ added in v0.10.8
SetDeadline sets the read and write deadlines associated with the connection. It is equivalent to calling both SetReadDeadline and SetWriteDeadline.
A deadline is an absolute time after which I/O operations fail instead of blocking. The deadline applies to all future and pending I/O, not just the immediately following call to Read or Write. After a deadline has been exceeded, the connection can be refreshed by setting a deadline in the future.
If the deadline is exceeded a call to Read or Write or to other I/O methods will return an error that wraps os.ErrDeadlineExceeded. This can be tested using errors.Is(err, os.ErrDeadlineExceeded). The error's Timeout method will return true, but note that there are other possible errors for which the Timeout method will return true even if the deadline has not been exceeded.
An idle timeout can be implemented by repeatedly extending the deadline after successful ReadFrom or WriteTo calls.
A zero value for t means I/O operations will not time out.
func (*RwcConn) SetReadDeadline ¶ added in v0.10.8
SetReadDeadline sets the deadline for future ReadFrom calls and any currently-blocked ReadFrom call. A zero value for t means ReadFrom will not time out.
func (*RwcConn) SetWriteDeadline ¶ added in v0.10.8
SetWriteDeadline sets the deadline for future WriteTo calls and any currently-blocked WriteTo call. Even if write times out, it may return n > 0, indicating that some of the data was successfully written. A zero value for t means WriteTo will not time out.
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server handles incoming RPC streams with a mux.
func (*Server) AcceptMuxedConn ¶ added in v0.3.5
AcceptMuxedConn runs a loop which calls Accept on a muxer to handle streams.
Starts HandleStream in a separate goroutine to handle the stream. Returns context.Canceled or io.EOF when the loop is complete / closed.
func (*Server) GetInvoker ¶ added in v0.10.7
GetInvoker returns the invoker.
func (*Server) HandleStream ¶ added in v0.3.5
func (s *Server) HandleStream(ctx context.Context, rwc io.ReadWriteCloser)
HandleStream handles an incoming stream and runs the read loop. Uses length-prefixed packets.
type ServerRPC ¶
type ServerRPC struct {
// contains filtered or unexported fields
}
ServerRPC represents the server side of an on-going RPC call message stream.
func NewServerRPC ¶
NewServerRPC constructs a new ServerRPC session. note: call SetWriter before handling any incoming messages.
func (*ServerRPC) HandleCallCancel ¶ added in v0.15.0
func (c *ServerRPC) HandleCallCancel() error
HandleCallCancel handles the call cancel packet.
func (*ServerRPC) HandleCallData ¶
HandleCallData handles the call data packet.
func (*ServerRPC) HandleCallStart ¶
HandleCallStart handles the call start packet.
func (*ServerRPC) HandlePacket ¶
HandlePacket handles an incoming parsed message packet.
func (*ServerRPC) HandlePacketData ¶ added in v0.19.0
HandlePacketData handles an incoming unparsed message packet.
func (*ServerRPC) HandleStreamClose ¶ added in v0.8.0
func (c *ServerRPC) HandleStreamClose(closeErr error)
HandleStreamClose handles the incoming stream closing w/ optional error.
func (*ServerRPC) ReadOne ¶ added in v0.15.0
ReadOne reads a single message and returns.
returns io.EOF if the stream ended without a packet.
func (*ServerRPC) WriteCallData ¶ added in v0.15.0
WriteCallData writes a call data packet.
func (*ServerRPC) WriteCancel ¶ added in v0.15.3
func (c *ServerRPC) WriteCancel() error
WriteCancel writes a call cancel packet.
type Stream ¶
type Stream interface { // Context is canceled when the Stream is no longer valid. Context() context.Context // MsgSend sends the message to the remote. MsgSend(msg Message) error // MsgRecv receives an incoming message from the remote. // Parses the message into the object at msg. MsgRecv(msg Message) error // CloseSend signals to the remote that we will no longer send any messages. CloseSend() error // Close closes the stream for reading and writing. Close() error }
Stream is a handle to an on-going bi-directional or one-directional stream RPC handle.
type StreamRwc ¶ added in v0.19.0
type StreamRwc struct { // Stream is the base stream interface. Stream // contains filtered or unexported fields }
StreamRwc implements an io.ReadWriteCloser with a srpc.Stream.
func NewStreamRwc ¶ added in v0.19.0
NewStreamRwc constructs a new stream read write closer.
type VClient ¶ added in v0.21.0
type VClient struct {
// contains filtered or unexported fields
}
VClient implements a verbose SRPC client which can log RPC streams.
func NewVClient ¶ added in v0.21.0
NewVClient constructs a new verbose client wrapper.
func (*VClient) ExecCall ¶ added in v0.21.0
func (c *VClient) ExecCall(ctx context.Context, service, method string, in, out Message) (err error)
ExecCall executes a request/reply RPC with the remote.
func (*VClient) NewRawStream ¶ added in v0.21.0
func (c *VClient) NewRawStream(ctx context.Context, msgHandler PacketDataHandler, closeHandler CloseHandler) (writer Writer, err error)
NewRawStream opens a new raw stream with the remote. Implements OpenStreamFunc. msgHandler must not be called concurrently.
type VMux ¶ added in v0.21.0
type VMux struct {
// contains filtered or unexported fields
}
VMux implements a verbose logging wrapper for a Mux.
func NewVMux ¶ added in v0.21.0
NewVMux constructs a verbose logging wrapper for a Mux.
if veryVerbose is set, we also log very chatty logs: HasService, HasServiceMethod, Register
func (*VMux) HasService ¶ added in v0.21.0
HasService checks if the service ID exists in the handlers.
func (*VMux) HasServiceMethod ¶ added in v0.21.0
HasServiceMethod checks if <service-id, method-id> exists in the handlers.
func (*VMux) InvokeMethod ¶ added in v0.21.0
InvokeMethod invokes the method matching the service & method ID. Returns false, nil if not found. If service string is empty, ignore it.
Source Files ¶
- accept.go
- client-prefix.go
- client-rpc.go
- client-set.go
- client-verbose.go
- client.go
- common-rpc.go
- errors.go
- handler.go
- invoker-prefix.go
- invoker.go
- message.go
- msg-stream.go
- mux-verbose.go
- mux.go
- muxed-conn.go
- net.go
- packet-rw.go
- packet.go
- raw-stream-rwc.go
- rpcproto.pb.go
- rpcproto_vtproto.pb.go
- rwc-conn.go
- server-http.go
- server-pipe.go
- server-rpc.go
- server.go
- stream-pipe.go
- stream-rwc.go
- stream.go
- strip-prefix.go
- websocket.go
- writer.go