From bb68bf3be19282d84731ed1018acc933d554090e Mon Sep 17 00:00:00 2001 From: Derrick Hammer Date: Tue, 9 Jan 2024 06:59:12 -0500 Subject: [PATCH] feat: implement SendHashRequest, UpVote, DownVote --- interfaces/p2p.go | 4 ++++ service/p2p.go | 51 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/interfaces/p2p.go b/interfaces/p2p.go index f07478b..2141b53 100644 --- a/interfaces/p2p.go +++ b/interfaces/p2p.go @@ -4,6 +4,7 @@ import ( "git.lumeweb.com/LumeWeb/libs5-go/encoding" "git.lumeweb.com/LumeWeb/libs5-go/net" "git.lumeweb.com/LumeWeb/libs5-go/structs" + "git.lumeweb.com/LumeWeb/libs5-go/types" "net/url" ) @@ -23,4 +24,7 @@ type P2PService interface { SignMessageSimple(message []byte) ([]byte, error) AddPeer(peer net.Peer) error SendPublicPeersToPeer(peer net.Peer, peersToSend []net.Peer) error + SendHashRequest(hash *encoding.Multihash, kinds []types.StorageLocationType) error + UpVote(nodeId *encoding.NodeId) error + DownVote(nodeId *encoding.NodeId) error } diff --git a/service/p2p.go b/service/p2p.go index e04c4d2..ead595b 100644 --- a/service/p2p.go +++ b/service/p2p.go @@ -401,3 +401,54 @@ func (p *P2PImpl) SendPublicPeersToPeer(peer net.Peer, peersToSend []net.Peer) e return nil } +func (p *P2PImpl) SendHashRequest(hash *encoding.Multihash, kinds []types.StorageLocationType) error { + hashRequest := protocol.NewHashRequest(hash, kinds) + message, err := msgpack.Marshal(hashRequest) + if err != nil { + return err + } + + for _, peer := range p.peers.Values() { + peerValue, ok := peer.(net.Peer) + if !ok { + p.node.Logger().Error("failed to cast peer to net.Peer") + continue + } + err = peerValue.SendMessage(message) + } + + return nil +} + +func (p *P2PImpl) UpVote(nodeId *encoding.NodeId) error { + err := p.vote(nodeId, true) + if err != nil { + return err + } + + return nil +} + +func (p *P2PImpl) DownVote(nodeId *encoding.NodeId) error { + err := p.vote(nodeId, false) + if err != nil { + return err + } + + return nil +} + +func (p *P2PImpl) vote(nodeId *encoding.NodeId, upvote bool) error { + votes, err := p.readNodeVotes(nodeId) + if err != nil { + return err + } + + if upvote { + votes.Upvote() + } else { + votes.Downvote() + } + + return nil +}