mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-09 13:33:50 +00:00
52 lines
832 B
Go
52 lines
832 B
Go
package network
|
|
|
|
import (
|
|
"fmt"
|
|
"bytes"
|
|
|
|
"github.com/ethereum/go-ethereum/logger"
|
|
"github.com/ethereum/go-ethereum/logger/glog"
|
|
)
|
|
|
|
type Pss struct {
|
|
Overlay
|
|
LocalAddr []byte
|
|
C chan []byte
|
|
}
|
|
|
|
func NewPss(k Overlay, addr []byte) *Pss {
|
|
return &Pss{
|
|
Overlay: k,
|
|
LocalAddr: addr,
|
|
C: make(chan []byte),
|
|
}
|
|
}
|
|
|
|
type PssMsg struct {
|
|
To []byte
|
|
Data []byte
|
|
}
|
|
|
|
func (pm *PssMsg) String() string {
|
|
return fmt.Sprintf("PssMsg: Recipient: %v", pm.To)
|
|
}
|
|
|
|
func (ps *Pss) HandlePssMsg(msg interface{}) error {
|
|
pssmsg := msg.(*PssMsg)
|
|
to := pssmsg.To
|
|
if bytes.Equal(to, ps.LocalAddr) {
|
|
glog.V(logger.Detail).Infof("Pss to us, yay!", to)
|
|
ps.C <- pssmsg.Data
|
|
return nil
|
|
}
|
|
|
|
ps.EachLivePeer(to, 255, func(p Peer, po int) bool {
|
|
err := p.Send(pssmsg)
|
|
if err != nil {
|
|
return true
|
|
}
|
|
return false
|
|
})
|
|
|
|
return nil
|
|
}
|