aboutsummaryrefslogtreecommitdiffstats
path: root/whisper
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-12-08 20:16:50 +0800
committerobscuren <geffobscura@gmail.com>2014-12-08 20:16:50 +0800
commite3a8412df3fe75fe498a3fce64fd2fd691a18183 (patch)
tree7c2e88be6b9d7dec5180a508a387b24835928022 /whisper
parentebe2d9d872c5482e02508f1d3e9c3a56e8a41d44 (diff)
downloadgo-tangerine-e3a8412df3fe75fe498a3fce64fd2fd691a18183.tar.gz
go-tangerine-e3a8412df3fe75fe498a3fce64fd2fd691a18183.tar.zst
go-tangerine-e3a8412df3fe75fe498a3fce64fd2fd691a18183.zip
Proper start/stoping wpeers
Diffstat (limited to 'whisper')
-rw-r--r--whisper/peer.go15
-rw-r--r--whisper/whisper.go14
2 files changed, 24 insertions, 5 deletions
diff --git a/whisper/peer.go b/whisper/peer.go
index 5fe50ba59..3471ddb2f 100644
--- a/whisper/peer.go
+++ b/whisper/peer.go
@@ -38,6 +38,13 @@ func (self *peer) init() error {
func (self *peer) start() {
go self.update()
+ self.peer.Infoln("whisper started")
+}
+
+func (self *peer) stop() {
+ self.peer.Infoln("whisper stopped")
+
+ close(self.quit)
}
func (self *peer) update() {
@@ -69,9 +76,11 @@ func (self *peer) broadcast(envelopes []*Envelope) error {
}
}
- msg := p2p.NewMsg(envelopesMsg, envs[:i]...)
- if err := self.ws.WriteMsg(msg); err != nil {
- return err
+ if i > 0 {
+ msg := p2p.NewMsg(envelopesMsg, envs[:i]...)
+ if err := self.ws.WriteMsg(msg); err != nil {
+ return err
+ }
}
return nil
diff --git a/whisper/whisper.go b/whisper/whisper.go
index 692e6bc2c..255bd2152 100644
--- a/whisper/whisper.go
+++ b/whisper/whisper.go
@@ -1,7 +1,7 @@
package whisper
import (
- "fmt"
+ "bytes"
"sync"
"time"
@@ -23,6 +23,10 @@ func HS(hash string) Hash {
return Hash{hash}
}
+func (self Hash) Compare(other Hash) int {
+ return bytes.Compare([]byte(self.hash), []byte(other.hash))
+}
+
// MOVE ME END
const (
@@ -73,13 +77,18 @@ func (self *Whisper) Send(ttl time.Duration, topics [][]byte, data *Message) {
self.add(envelope)
}
+// Main handler for passing whisper messages to whisper peer objects
func (self *Whisper) msgHandler(peer *p2p.Peer, ws p2p.MsgReadWriter) error {
wpeer := NewPeer(self, peer, ws)
+ // init whisper peer (handshake/status)
if err := wpeer.init(); err != nil {
return err
}
+ // kick of the main handler for broadcasting/managing envelopes
go wpeer.start()
+ defer wpeer.stop()
+ // Main *read* loop. Writing is done by the peer it self.
for {
msg, err := ws.ReadMsg()
if err != nil {
@@ -96,11 +105,11 @@ func (self *Whisper) msgHandler(peer *p2p.Peer, ws p2p.MsgReadWriter) error {
}
}
+// takes care of adding envelopes to the messages pool. At this moment no sanity checks are being performed.
func (self *Whisper) add(envelope *Envelope) {
self.mmu.Lock()
defer self.mmu.Unlock()
- fmt.Println("received envelope", envelope)
self.messages[envelope.Hash()] = envelope
if self.expiry[envelope.Expiry] == nil {
self.expiry[envelope.Expiry] = set.NewNonTS()
@@ -120,6 +129,7 @@ out:
}
}
}
+
func (self *Whisper) expire() {
self.mmu.Lock()
defer self.mmu.Unlock()