implement pool Send method.

This commit is contained in:
Jay
2026-04-16 18:58:40 -04:00
parent ff58207779
commit 660324b7b3
2 changed files with 55 additions and 0 deletions

25
pool.go
View File

@@ -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 {

View File

@@ -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,