feat: connected/disconnected status with wakuV2
This commit is contained in:
parent
22e8c8a7ff
commit
d0514f366d
|
@ -18,6 +18,16 @@ proc handleSignals(self: ChatController) =
|
||||||
)
|
)
|
||||||
mailserverWorker.start(task)
|
mailserverWorker.start(task)
|
||||||
|
|
||||||
|
self.status.events.on(SignalType.PeerStats.event) do(e:Args):
|
||||||
|
var data = PeerStatsSignal(e)
|
||||||
|
let
|
||||||
|
mailserverWorker = self.status.tasks.marathon[MailserverWorker().name]
|
||||||
|
task = PeerSummaryChangeTaskArg(
|
||||||
|
`method`: "peerSummaryChange",
|
||||||
|
peers: data.peers
|
||||||
|
)
|
||||||
|
mailserverWorker.start(task)
|
||||||
|
|
||||||
self.status.events.on(SignalType.EnvelopeSent.event) do(e:Args):
|
self.status.events.on(SignalType.EnvelopeSent.event) do(e:Args):
|
||||||
var data = EnvelopeSentSignal(e)
|
var data = EnvelopeSentSignal(e)
|
||||||
self.status.messages.updateStatus(data.messageIds)
|
self.status.messages.updateStatus(data.messageIds)
|
||||||
|
|
|
@ -35,6 +35,11 @@ proc init*(self: NodeController) =
|
||||||
self.status.network.peerSummaryChange(data.enodes)
|
self.status.network.peerSummaryChange(data.enodes)
|
||||||
self.view.setPeerSize(data.enodes.len)
|
self.view.setPeerSize(data.enodes.len)
|
||||||
|
|
||||||
|
self.status.events.on(SignalType.PeerStats.event) do(e:Args):
|
||||||
|
var data = PeerStatsSignal(e)
|
||||||
|
self.status.network.peerSummaryChange(data.peers)
|
||||||
|
self.view.setPeerSize(data.peers.len)
|
||||||
|
|
||||||
self.status.events.on(SignalType.Stats.event) do (e:Args):
|
self.status.events.on(SignalType.Stats.event) do (e:Args):
|
||||||
self.view.setStats(StatsSignal(e).stats)
|
self.view.setStats(StatsSignal(e).stats)
|
||||||
self.view.fetchBitsSet()
|
self.view.fetchBitsSet()
|
||||||
|
|
|
@ -0,0 +1,77 @@
|
||||||
|
import NimQml, tables, json, chronicles, strutils, json_serialization
|
||||||
|
import ../types as status_types
|
||||||
|
import types, messages, discovery, whisperFilter, envelopes, expired, wallet, mailserver, communities, stats, peerstats
|
||||||
|
import ../status
|
||||||
|
import ../../eventemitter
|
||||||
|
|
||||||
|
logScope:
|
||||||
|
topics = "signals"
|
||||||
|
|
||||||
|
QtObject:
|
||||||
|
type SignalsController* = ref object of QObject
|
||||||
|
variant*: QVariant
|
||||||
|
status*: Status
|
||||||
|
|
||||||
|
proc newController*(status: Status): SignalsController =
|
||||||
|
new(result)
|
||||||
|
result.status = status
|
||||||
|
result.setup()
|
||||||
|
result.variant = newQVariant(result)
|
||||||
|
|
||||||
|
proc setup(self: SignalsController) =
|
||||||
|
self.QObject.setup
|
||||||
|
|
||||||
|
proc delete*(self: SignalsController) =
|
||||||
|
self.variant.delete
|
||||||
|
self.QObject.delete
|
||||||
|
|
||||||
|
proc processSignal(self: SignalsController, statusSignal: string) =
|
||||||
|
var jsonSignal: JsonNode
|
||||||
|
try:
|
||||||
|
jsonSignal = statusSignal.parseJson
|
||||||
|
except:
|
||||||
|
error "Invalid signal received", data = statusSignal
|
||||||
|
return
|
||||||
|
|
||||||
|
let signalString = jsonSignal["type"].getStr
|
||||||
|
|
||||||
|
trace "Raw signal data", data = $jsonSignal
|
||||||
|
|
||||||
|
var signalType: SignalType
|
||||||
|
|
||||||
|
try:
|
||||||
|
signalType = parseEnum[SignalType](signalString)
|
||||||
|
except:
|
||||||
|
warn "Unknown signal received", type = signalString
|
||||||
|
signalType = SignalType.Unknown
|
||||||
|
return
|
||||||
|
|
||||||
|
var signal: Signal = case signalType:
|
||||||
|
of SignalType.Message: messages.fromEvent(jsonSignal)
|
||||||
|
of SignalType.EnvelopeSent: envelopes.fromEvent(jsonSignal)
|
||||||
|
of SignalType.EnvelopeExpired: expired.fromEvent(jsonSignal)
|
||||||
|
of SignalType.WhisperFilterAdded: whisperFilter.fromEvent(jsonSignal)
|
||||||
|
of SignalType.Wallet: wallet.fromEvent(jsonSignal)
|
||||||
|
of SignalType.NodeLogin: Json.decode($jsonSignal, NodeSignal)
|
||||||
|
of SignalType.PeerStats: peerStats.fromEvent(jsonSignal)
|
||||||
|
of SignalType.DiscoverySummary: discovery.fromEvent(jsonSignal)
|
||||||
|
of SignalType.MailserverRequestCompleted: mailserver.fromCompletedEvent(jsonSignal)
|
||||||
|
of SignalType.MailserverRequestExpired: mailserver.fromExpiredEvent(jsonSignal)
|
||||||
|
of SignalType.CommunityFound: communities.fromEvent(jsonSignal)
|
||||||
|
of SignalType.Stats: stats.fromEvent(jsonSignal)
|
||||||
|
else: Signal()
|
||||||
|
|
||||||
|
if(signalType == SignalType.NodeLogin):
|
||||||
|
if(NodeSignal(signal).event.error != ""):
|
||||||
|
error "node.login", error=NodeSignal(signal).event.error
|
||||||
|
|
||||||
|
if(signalType == SignalType.NodeCrashed):
|
||||||
|
error "node.crashed", error=statusSignal
|
||||||
|
|
||||||
|
self.status.events.emit(signalType.event, signal)
|
||||||
|
|
||||||
|
proc signalReceived*(self: SignalsController, signal: string) {.signal.}
|
||||||
|
|
||||||
|
proc receiveSignal(self: SignalsController, signal: string) {.slot.} =
|
||||||
|
self.processSignal(signal)
|
||||||
|
self.signalReceived(signal)
|
Loading…
Reference in New Issue