status-go/services/wallet/connection/status.go

57 lines
1.1 KiB
Go

package connection
import (
"sync"
"time"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/event"
"github.com/status-im/status-go/services/wallet/walletevent"
)
type Status struct {
eventType walletevent.EventType
feed *event.Feed
isConnected bool
lastCheckedAt int64
isConnectedLock sync.RWMutex
}
func NewStatus(eventType walletevent.EventType, feed *event.Feed) *Status {
return &Status{
eventType: eventType,
feed: feed,
isConnected: true,
lastCheckedAt: time.Now().Unix(),
}
}
func (c *Status) SetIsConnected(value bool) {
c.isConnectedLock.Lock()
defer c.isConnectedLock.Unlock()
c.lastCheckedAt = time.Now().Unix()
if value != c.isConnected {
message := "down"
if value {
message = "up"
}
if c.feed != nil {
c.feed.Send(walletevent.Event{
Type: c.eventType,
Accounts: []common.Address{},
Message: message,
At: time.Now().Unix(),
})
}
}
c.isConnected = value
}
func (c *Status) IsConnected() bool {
c.isConnectedLock.RLock()
defer c.isConnectedLock.RUnlock()
return c.isConnected
}