From 3fb4bf2efbec9323b01f94d85f3d22482561e6a8 Mon Sep 17 00:00:00 2001 From: high-moctane Date: Wed, 21 Aug 2024 21:58:55 +0900 Subject: [PATCH] Define SimpleHandler struct --- handler.go | 76 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 42 insertions(+), 34 deletions(-) diff --git a/handler.go b/handler.go index ac77e05..c8f365f 100644 --- a/handler.go +++ b/handler.go @@ -41,47 +41,55 @@ type SimpleHandlerBase interface { ServeNostrClientMsg(context.Context, ClientMsg) (<-chan ServerMsg, error) } -func NewSimpleHandler(h SimpleHandlerBase) Handler { - return HandlerFunc( - func(ctx context.Context, send chan<- ServerMsg, recv <-chan ClientMsg) (err error) { - ctx, err = h.ServeNostrStart(ctx) +type SimpleHandler struct { + base SimpleHandlerBase +} + +func NewSimpleHandler(base SimpleHandlerBase) *SimpleHandler { + return &SimpleHandler{base: base} +} + +func (h *SimpleHandler) ServeNostr( + ctx context.Context, + send chan<- ServerMsg, + recv <-chan ClientMsg, +) error { + ctx, err := h.base.ServeNostrStart(ctx) + if err != nil { + return fmt.Errorf("failed to start: %w", err) + } + defer func() { err = errors.Join(err, h.base.ServeNostrEnd(ctx)) }() + + for { + select { + case <-ctx.Done(): + return ctx.Err() + + case cmsg, ok := <-recv: + if !ok { + return ErrRecvClosed + } + smsgCh, err := h.base.ServeNostrClientMsg(ctx, cmsg) if err != nil { - return + return fmt.Errorf("failed to serve client msg: %w", err) } - defer func() { err = errors.Join(err, h.ServeNostrEnd(ctx)) }() - - for { - select { - case <-ctx.Done(): - return ctx.Err() + if smsgCh != nil { + L: + for { + select { + case <-ctx.Done(): + return ctx.Err() - case cmsg, ok := <-recv: - if !ok { - return ErrRecvClosed - } - smsgCh, err := h.ServeNostrClientMsg(ctx, cmsg) - if err != nil { - return err - } - if smsgCh != nil { - L: - for { - select { - case <-ctx.Done(): - return ctx.Err() - - case smsg, ok := <-smsgCh: - if !ok { - break L - } - sendServerMsgCtx(ctx, send, smsg) - } + case smsg, ok := <-smsgCh: + if !ok { + break L } + sendServerMsgCtx(ctx, send, smsg) } } } - }, - ) + } + } } type DefaultSimpleHandlerBase struct{}