forked from cerc-io/plugeth
Merge pull request #16176 from gluk256/255-refactoring
whisper: filters no longer get removed after a while
This commit is contained in:
commit
423c8bb1d8
@ -60,32 +60,9 @@ func NewPublicWhisperAPI(w *Whisper) *PublicWhisperAPI {
|
|||||||
w: w,
|
w: w,
|
||||||
lastUsed: make(map[string]time.Time),
|
lastUsed: make(map[string]time.Time),
|
||||||
}
|
}
|
||||||
|
|
||||||
go api.run()
|
|
||||||
return api
|
return api
|
||||||
}
|
}
|
||||||
|
|
||||||
// run the api event loop.
|
|
||||||
// this loop deletes filter that have not been used within filterTimeout
|
|
||||||
func (api *PublicWhisperAPI) run() {
|
|
||||||
timeout := time.NewTicker(2 * time.Minute)
|
|
||||||
for {
|
|
||||||
<-timeout.C
|
|
||||||
|
|
||||||
api.mu.Lock()
|
|
||||||
for id, lastUsed := range api.lastUsed {
|
|
||||||
if time.Since(lastUsed).Seconds() >= filterTimeout {
|
|
||||||
delete(api.lastUsed, id)
|
|
||||||
if err := api.w.Unsubscribe(id); err != nil {
|
|
||||||
log.Error("could not unsubscribe whisper filter", "error", err)
|
|
||||||
}
|
|
||||||
log.Debug("delete whisper filter (timeout)", "id", id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
api.mu.Unlock()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Version returns the Whisper sub-protocol version.
|
// Version returns the Whisper sub-protocol version.
|
||||||
func (api *PublicWhisperAPI) Version(ctx context.Context) string {
|
func (api *PublicWhisperAPI) Version(ctx context.Context) string {
|
||||||
return ProtocolVersionStr
|
return ProtocolVersionStr
|
||||||
|
@ -61,32 +61,9 @@ func NewPublicWhisperAPI(w *Whisper) *PublicWhisperAPI {
|
|||||||
w: w,
|
w: w,
|
||||||
lastUsed: make(map[string]time.Time),
|
lastUsed: make(map[string]time.Time),
|
||||||
}
|
}
|
||||||
|
|
||||||
go api.run()
|
|
||||||
return api
|
return api
|
||||||
}
|
}
|
||||||
|
|
||||||
// run the api event loop.
|
|
||||||
// this loop deletes filter that have not been used within filterTimeout
|
|
||||||
func (api *PublicWhisperAPI) run() {
|
|
||||||
timeout := time.NewTicker(2 * time.Minute)
|
|
||||||
for {
|
|
||||||
<-timeout.C
|
|
||||||
|
|
||||||
api.mu.Lock()
|
|
||||||
for id, lastUsed := range api.lastUsed {
|
|
||||||
if time.Since(lastUsed).Seconds() >= filterTimeout {
|
|
||||||
delete(api.lastUsed, id)
|
|
||||||
if err := api.w.Unsubscribe(id); err != nil {
|
|
||||||
log.Error("could not unsubscribe whisper filter", "error", err)
|
|
||||||
}
|
|
||||||
log.Debug("delete whisper filter (timeout)", "id", id)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
api.mu.Unlock()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Version returns the Whisper sub-protocol version.
|
// Version returns the Whisper sub-protocol version.
|
||||||
func (api *PublicWhisperAPI) Version(ctx context.Context) string {
|
func (api *PublicWhisperAPI) Version(ctx context.Context) string {
|
||||||
return ProtocolVersionStr
|
return ProtocolVersionStr
|
||||||
@ -219,7 +196,8 @@ func (api *PublicWhisperAPI) DeleteSymKey(ctx context.Context, id string) bool {
|
|||||||
return api.w.DeleteSymKey(id)
|
return api.w.DeleteSymKey(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MakeLightClient turns the node into light client, which does not forward any incoming messages.
|
// MakeLightClient turns the node into light client, which does not forward
|
||||||
|
// any incoming messages, and sends only messages originated in this node.
|
||||||
func (api *PublicWhisperAPI) MakeLightClient(ctx context.Context) bool {
|
func (api *PublicWhisperAPI) MakeLightClient(ctx context.Context) bool {
|
||||||
api.w.lightClient = true
|
api.w.lightClient = true
|
||||||
return api.w.lightClient
|
return api.w.lightClient
|
||||||
|
@ -590,10 +590,7 @@ func (whisper *Whisper) Unsubscribe(id string) error {
|
|||||||
// network in the coming cycles.
|
// network in the coming cycles.
|
||||||
func (whisper *Whisper) Send(envelope *Envelope) error {
|
func (whisper *Whisper) Send(envelope *Envelope) error {
|
||||||
ok, err := whisper.add(envelope, false)
|
ok, err := whisper.add(envelope, false)
|
||||||
if err != nil {
|
if err == nil && !ok {
|
||||||
return err
|
|
||||||
}
|
|
||||||
if !ok {
|
|
||||||
return fmt.Errorf("failed to add envelope")
|
return fmt.Errorf("failed to add envelope")
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
|
Loading…
Reference in New Issue
Block a user