From 0ccdaeac26353509c24b7d9f7104d94df96ee6b8 Mon Sep 17 00:00:00 2001 From: a <a@tuxpa.in> Date: Fri, 4 Aug 2023 04:12:42 -0500 Subject: [PATCH] shitty --- contrib/client/reconnecting.go | 69 ++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 contrib/client/reconnecting.go diff --git a/contrib/client/reconnecting.go b/contrib/client/reconnecting.go new file mode 100644 index 0000000..ebafc1c --- /dev/null +++ b/contrib/client/reconnecting.go @@ -0,0 +1,69 @@ +package client + +import ( + "context" + "sync" + + "gfx.cafe/open/jrpc" + "gfx.cafe/open/jrpc/pkg/codec" +) + +type Reconnecting struct { + dialer func(ctx context.Context) (jrpc.Conn, error) + base codec.Conn + middleware []codec.Middleware + + mu sync.Mutex +} + +func NewReconnecting(dialer func(ctx context.Context) (jrpc.Conn, error)) *Reconnecting { + r := &Reconnecting{ + dialer: dialer, + } + return r +} + +func (r *Reconnecting) getClient(ctx context.Context) (jrpc.Conn, error) { + + return r.base, nil +} + +func (r *Reconnecting) Do(ctx context.Context, result any, method string, params any) error { + errChan := make(chan error) + go func() { + conn, err := r.getClient(ctx) + if err != nil { + errChan <- err + return + } + errChan <- conn.Do(ctx, result, method, params) + }() + return <-errChan +} + +func (r *Reconnecting) BatchCall(ctx context.Context, b ...*codec.BatchElem) error { + errChan := make(chan error) + go func() { + conn, err := r.getClient(ctx) + if err != nil { + errChan <- err + return + } + errChan <- conn.BatchCall(ctx, b...) + }() + return <-errChan +} + +func (r *Reconnecting) Mount(m codec.Middleware) { + r.middleware = append(r.middleware, m) +} + +// why would you want to do this.... +func (r *Reconnecting) Close() error { + return nil +} + +// never.... +func (r *Reconnecting) Closed() <-chan struct{} { + return make(<-chan struct{}) +} -- GitLab