status-go/server/pairing/peers.go

59 lines
1.3 KiB
Go
Raw Normal View History

2023-04-12 10:30:12 +00:00
package pairing
import (
"runtime"
"sync"
"time"
2023-04-12 10:30:12 +00:00
"go.uber.org/zap"
2023-09-05 09:04:38 +00:00
"github.com/status-im/status-go/common"
2023-04-12 10:30:12 +00:00
"github.com/status-im/status-go/logutils"
"github.com/status-im/status-go/server"
"github.com/status-im/status-go/server/pairing/peers"
"github.com/status-im/status-go/signal"
)
type PeerNotifier struct {
logger *zap.Logger
stop chan struct{}
terminator sync.Once
2023-04-12 10:30:12 +00:00
}
func NewPeerNotifier() *PeerNotifier {
logger := logutils.ZapLogger().Named("PeerNotifier")
stop := make(chan struct{})
return &PeerNotifier{
logger: logger,
stop: stop,
}
}
func (p *PeerNotifier) terminateIn(d time.Duration) {
p.terminator.Do(func() {
time.Sleep(d)
p.stop <- struct{}{}
})
}
2023-04-12 10:30:12 +00:00
func (p *PeerNotifier) handler(hello *peers.LocalPairingPeerHello) {
signal.SendLocalPairingEvent(Event{Type: EventPeerDiscovered, Action: ActionPeerDiscovery, Data: hello})
p.logger.Debug("received peers.LocalPairingPeerHello message", zap.Any("hello message", hello))
p.terminateIn(5 * time.Second)
2023-04-12 10:30:12 +00:00
}
func (p *PeerNotifier) Search() error {
2023-09-05 08:58:55 +00:00
// TODO until we can resolve Android errors when calling net.Interfaces() just noop. Sorry Android
2023-09-05 09:04:38 +00:00
if runtime.GOOS == common.AndroidPlatform {
2023-09-05 08:58:55 +00:00
return nil
}
2023-04-12 10:30:12 +00:00
dn, err := server.GetDeviceName()
if err != nil {
return err
}
return peers.Search(dn, runtime.GOOS, p.handler, p.stop, p.logger)
}