implement PacketBroadcaster

This commit is contained in:
rkonfj
2024-01-20 21:53:07 +08:00
parent a85b4edfec
commit 7b54b06c0e
4 changed files with 39 additions and 117 deletions

View File

@@ -2,6 +2,7 @@ package disco
import (
"encoding/hex"
"errors"
"fmt"
"log/slog"
"net"
@@ -299,6 +300,29 @@ func (n *UDPConn) WriteToUDP(p []byte, peerID peer.PeerID) (int, error) {
return 0, ErrUseOfClosedConnection
}
func (c *UDPConn) Broadcast(b []byte) (peerCount int, err error) {
c.peersMapMutex.RLock()
peerCount = len(c.peersMap)
peers := make([]peer.PeerID, 0, peerCount)
for k := range c.peersMap {
peers = append(peers, k)
}
c.peersMapMutex.RUnlock()
var errs []error
for _, peer := range peers {
_, err := c.WriteToUDP(b, peer)
if err != nil {
errs = append(errs, err)
}
}
if len(errs) > 0 {
err = errors.Join(errs...)
}
return
}
func ListenUDP(port int, disableIPv4, disableIPv6 bool, id peer.PeerID) (*UDPConn, error) {
conn, err := net.ListenUDP("udp", &net.UDPAddr{Port: port})
if err != nil {