Files
frontier/api/dataplane/v1/edge/edge_end.go
2024-05-26 06:00:03 -04:00

106 lines
2.5 KiB
Go

package edge
import (
"context"
"github.com/singchia/geminio"
"github.com/singchia/geminio/client"
"github.com/singchia/geminio/options"
)
type edgeEnd struct {
geminio.End
}
func newEdgeEnd(dialer client.Dialer, opts ...EdgeOption) (*edgeEnd, error) {
// options
eopt := &edgeOption{
readBufferSize: -1,
writeBufferSize: -1,
}
for _, opt := range opts {
opt(eopt)
}
// turn to end options
eopts := client.NewEndOptions()
if eopt.tmr != nil {
eopts.SetTimer(eopt.tmr)
}
if eopt.logger != nil {
eopts.SetLog(eopt.logger)
}
if eopt.edgeID != nil {
eopts.SetClientID(*eopt.edgeID)
}
if eopt.meta != nil {
eopts.SetMeta(eopt.meta)
}
if eopt.readBufferSize != -1 || eopt.writeBufferSize != -1 {
eopts.SetBufferSize(eopt.readBufferSize, eopt.writeBufferSize)
}
// new geminio end
end, err := client.NewRetryEndWithDialer(dialer, eopts)
if err != nil {
return nil, err
}
return &edgeEnd{end}, nil
}
// RPCer
func (end *edgeEnd) NewRequest(data []byte) geminio.Request {
return end.End.NewRequest(data)
}
func (end *edgeEnd) Call(ctx context.Context, method string, req geminio.Request) (geminio.Response, error) {
return end.End.Call(ctx, method, req)
}
func (end *edgeEnd) CallAsync(ctx context.Context, method string, req geminio.Request, ch chan *geminio.Call) (*geminio.Call, error) {
return end.End.CallAsync(ctx, method, req, ch)
}
func (end *edgeEnd) Register(ctx context.Context, method string, rpc geminio.RPC) error {
return end.End.Register(ctx, method, rpc)
}
// Messager
func (end *edgeEnd) NewMessage(data []byte) geminio.Message {
return end.End.NewMessage(data)
}
func (end *edgeEnd) Publish(ctx context.Context, topic string, msg geminio.Message) error {
msg.SetTopic(topic)
return end.End.Publish(ctx, msg)
}
func (end *edgeEnd) PublishAsync(ctx context.Context, topic string, msg geminio.Message, ch chan *geminio.Publish) (*geminio.Publish, error) {
msg.SetTopic(topic)
return end.End.PublishAsync(ctx, msg, ch)
}
func (end *edgeEnd) Receive(ctx context.Context) (geminio.Message, error) {
return end.End.Receive(ctx)
}
// Multiplexer
func (end *edgeEnd) OpenStream(serviceName string) (geminio.Stream, error) {
opt := options.OpenStream()
opt.SetPeer(serviceName)
return end.End.OpenStream(opt)
}
func (end *edgeEnd) AcceptStream() (geminio.Stream, error) {
return end.End.AcceptStream()
}
func (end *edgeEnd) ListStreams() []geminio.Stream {
return end.End.ListStreams()
}
// Meta
func (end *edgeEnd) EdgeID() uint64 {
return end.End.ClientID()
}