From 660324b7b3d24f0e274035134680dbf671dfc698 Mon Sep 17 00:00:00 2001 From: Jay Date: Thu, 16 Apr 2026 18:58:40 -0400 Subject: [PATCH] implement pool Send method. --- pool.go | 25 +++++++++++++++++++++++++ pool_test.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/pool.go b/pool.go index 621d0b7..f889036 100644 --- a/pool.go +++ b/pool.go @@ -124,6 +124,22 @@ func (p *pool) removePeer(id string) error { return nil } +func (p *pool) send(id string, data []byte) error { + p.mu.RLock() + defer p.mu.RUnlock() + + if p.closed { + return errors.NewPoolError("pool is closed") + } + + peer, exists := p.peers[id] + if !exists { + return errors.NewPoolError("connection not found") + } + + return peer.conn.Send(data) +} + // Outbound Pool type OutboundPool struct { @@ -251,6 +267,15 @@ func (p *OutboundPool) Remove(url string) error { return p.removePeer(url) } +func (p *OutboundPool) Send(url string, data []byte) error { + url, err := NormalizeURL(url) + if err != nil { + return err + } + + return p.send(url, data) +} + // Inbound Pool type InboundPool struct { diff --git a/pool_test.go b/pool_test.go index b050077..b739de8 100644 --- a/pool_test.go +++ b/pool_test.go @@ -2,6 +2,7 @@ package honeybee import ( "fmt" + "github.com/gorilla/websocket" "github.com/stretchr/testify/assert" "net/http" "testing" @@ -169,6 +170,35 @@ func TestPoolRemove(t *testing.T) { } +func TestPoolSend(t *testing.T) { + mockSocket := NewMockSocket() + outgoingData := make(chan mockOutgoingData, 10) + mockSocket.WriteMessageFunc = func(msgType int, data []byte) error { + outgoingData <- mockOutgoingData{msgType: msgType, data: data} + return nil + } + mockDialer := &MockDialer{ + DialFunc: func(string, http.Header) (Socket, *http.Response, error) { + return mockSocket, nil, nil + }, + } + + pool, err := NewOutboundPool(nil, nil) + assert.NoError(t, err) + pool.dialer = mockDialer + + err = pool.Connect("wss://test") + assert.NoError(t, err) + expectEvent(t, pool.events, "wss://test", EventConnected) + + err = pool.Send("wss://test", []byte("hello")) + assert.NoError(t, err) + + expectWrite(t, outgoingData, websocket.TextMessage, []byte("hello")) + + pool.Close() +} + func expectEvent( t *testing.T, events chan PoolEvent,