From 7e84577094e54d7ad2aab3578758a3fdf46c1d9d Mon Sep 17 00:00:00 2001 From: larscom Date: Thu, 29 Aug 2024 22:59:43 +0200 Subject: [PATCH] add debug printer --- example/main.go | 2 +- internal/socket/socket.go | 2 +- pkg/bitvavo/debug_printer.go | 26 ++++++++++++++++++++++++++ pkg/bitvavo/listener.go | 1 + pkg/bitvavo/ticker_listener.go | 18 ++++++++++++------ 5 files changed, 41 insertions(+), 8 deletions(-) create mode 100644 pkg/bitvavo/debug_printer.go diff --git a/example/main.go b/example/main.go index 82fd9a0..fa735bf 100644 --- a/example/main.go +++ b/example/main.go @@ -34,7 +34,7 @@ func main() { log.Printf("Subscribing to %d markets\n", len(tradingMarkets)) <-time.After(time.Second * 2) - listener := bitvavo.NewTickerListener() + listener := bitvavo.NewTickerListener(bitvavo.NewDebugPrinter()) defer func() { _ = listener.Close() }() diff --git a/internal/socket/socket.go b/internal/socket/socket.go index c7a7f95..637c1c5 100644 --- a/internal/socket/socket.go +++ b/internal/socket/socket.go @@ -31,7 +31,7 @@ func NewSocket( } socket := &Socket{ - buffer: make(chan []byte, 2048), + buffer: make(chan []byte, 1024), conn: conn, url: url, handleFunc: handleFunc, diff --git a/pkg/bitvavo/debug_printer.go b/pkg/bitvavo/debug_printer.go new file mode 100644 index 0000000..f001f96 --- /dev/null +++ b/pkg/bitvavo/debug_printer.go @@ -0,0 +1,26 @@ +package bitvavo + +import ( + "fmt" + "log" +) + +type DebugPrinter interface { + Println(value ...any) +} + +type DefaultDebugPrinter struct{} + +func NewDebugPrinter() *DefaultDebugPrinter { + return &DefaultDebugPrinter{} +} + +func (l *DefaultDebugPrinter) Println(value ...any) { + log.Println(value...) +} + +func debug(p DebugPrinter, value ...any) { + if p != nil { + p.Println(fmt.Sprintf("[BITVAVO-GO] %v", value...)) + } +} diff --git a/pkg/bitvavo/listener.go b/pkg/bitvavo/listener.go index 34c254e..139b217 100644 --- a/pkg/bitvavo/listener.go +++ b/pkg/bitvavo/listener.go @@ -45,6 +45,7 @@ type listener[T any] struct { channel Channel subscriptions []Subscription closefn context.CancelFunc + printer DebugPrinter } type authListener[T any] struct { diff --git a/pkg/bitvavo/ticker_listener.go b/pkg/bitvavo/ticker_listener.go index 46b3f95..b61229c 100644 --- a/pkg/bitvavo/ticker_listener.go +++ b/pkg/bitvavo/ticker_listener.go @@ -9,7 +9,7 @@ type TickerEvent ListenerEvent[Ticker] type TickerListener listener[TickerEvent] -func NewTickerListener() Listener[TickerEvent] { +func NewTickerListener(printer ...DebugPrinter) Listener[TickerEvent] { chn := make(chan TickerEvent) rchn := make(chan struct{}) @@ -20,6 +20,10 @@ func NewTickerListener() Listener[TickerEvent] { channel: ChannelTicker, } + if len(printer) > 0 { + l.printer = printer[0] + } + ctx, cancel := context.WithCancel(context.Background()) ws, err := NewWebSocket(ctx, l.onMessage, func() { rchn <- struct{}{} @@ -36,6 +40,8 @@ func NewTickerListener() Listener[TickerEvent] { } func (l *TickerListener) Subscribe(markets []string) (<-chan TickerEvent, error) { + debug(l.printer, "subscribing to", markets) + if err := l.ws.Subscribe([]Subscription{NewSubscription(l.channel, markets)}); err != nil { return nil, err } @@ -90,11 +96,11 @@ func (l *TickerListener) onMessage(data WebSocketEventData, err error) { } } -func (t *TickerListener) resubscriber() { - t.once.Do(func() { - for range t.rchn { - if err := t.ws.Subscribe(t.subscriptions); err != nil { - t.chn <- TickerEvent{Error: err} +func (l *TickerListener) resubscriber() { + l.once.Do(func() { + for range l.rchn { + if err := l.ws.Subscribe(l.subscriptions); err != nil { + l.chn <- TickerEvent{Error: err} } } })