From a98e31c20fad5c97d501812dd4ed96911a973177 Mon Sep 17 00:00:00 2001 From: Samuel Hawksby-Robinson Date: Fri, 24 Apr 2020 15:34:45 +0100 Subject: [PATCH] Refactor moved message functionality from filter to message (#1951) When documenting the `filter.go` file I found that there was a lot of functionality that belongs in the `message.go` file, so I've moved it. --- waku/filter.go | 41 ----------------------------------------- waku/message.go | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 41 deletions(-) diff --git a/waku/filter.go b/waku/filter.go index d90aabce4..cbe1d5000 100644 --- a/waku/filter.go +++ b/waku/filter.go @@ -28,47 +28,6 @@ import ( "github.com/ethereum/go-ethereum/log" ) -// MessageStore defines interface for temporary message store. -type MessageStore interface { - Add(*ReceivedMessage) error - Pop() ([]*ReceivedMessage, error) -} - -// NewMemoryMessageStore returns pointer to an instance of the MemoryMessageStore. -func NewMemoryMessageStore() *MemoryMessageStore { - return &MemoryMessageStore{ - messages: map[common.Hash]*ReceivedMessage{}, - } -} - -// MemoryMessageStore stores massages in memory hash table. -type MemoryMessageStore struct { - mu sync.Mutex - messages map[common.Hash]*ReceivedMessage -} - -// Add adds message to store. -func (store *MemoryMessageStore) Add(msg *ReceivedMessage) error { - store.mu.Lock() - defer store.mu.Unlock() - if _, exist := store.messages[msg.EnvelopeHash]; !exist { - store.messages[msg.EnvelopeHash] = msg - } - return nil -} - -// Pop returns all available messages and cleans the store. -func (store *MemoryMessageStore) Pop() ([]*ReceivedMessage, error) { - store.mu.Lock() - defer store.mu.Unlock() - all := make([]*ReceivedMessage, 0, len(store.messages)) - for hash, msg := range store.messages { - delete(store.messages, hash) - all = append(all, msg) - } - return all, nil -} - // Filter represents a Waku message filter type Filter struct { Src *ecdsa.PublicKey // Sender of the message diff --git a/waku/message.go b/waku/message.go index 268155eb1..05f9f4bd5 100644 --- a/waku/message.go +++ b/waku/message.go @@ -28,6 +28,7 @@ import ( "fmt" mrand "math/rand" "strconv" + "sync" "time" "github.com/ethereum/go-ethereum/common" @@ -445,3 +446,44 @@ func (msg *ReceivedMessage) hash() []byte { } return crypto.Keccak256(msg.Raw) } + +// MessageStore defines interface for temporary message store. +type MessageStore interface { + Add(*ReceivedMessage) error + Pop() ([]*ReceivedMessage, error) +} + +// NewMemoryMessageStore returns pointer to an instance of the MemoryMessageStore. +func NewMemoryMessageStore() *MemoryMessageStore { + return &MemoryMessageStore{ + messages: map[common.Hash]*ReceivedMessage{}, + } +} + +// MemoryMessageStore stores massages in memory hash table. +type MemoryMessageStore struct { + mu sync.Mutex + messages map[common.Hash]*ReceivedMessage +} + +// Add adds message to store. +func (store *MemoryMessageStore) Add(msg *ReceivedMessage) error { + store.mu.Lock() + defer store.mu.Unlock() + if _, exist := store.messages[msg.EnvelopeHash]; !exist { + store.messages[msg.EnvelopeHash] = msg + } + return nil +} + +// Pop returns all available messages and cleans the store. +func (store *MemoryMessageStore) Pop() ([]*ReceivedMessage, error) { + store.mu.Lock() + defer store.mu.Unlock() + all := make([]*ReceivedMessage, 0, len(store.messages)) + for hash, msg := range store.messages { + delete(store.messages, hash) + all = append(all, msg) + } + return all, nil +}