Idea #6
parent
0488c36a1c
commit
f47f4754f4
|
@ -18,6 +18,17 @@ export const DEFAULT_STATE: ConnectionState = {
|
|||
};
|
||||
type PingResultPayload = { id: string, at: number };
|
||||
|
||||
function maybeTransition(s: ConnectionState, state: "up" | "down", at: number) {
|
||||
const stats = s.uptime["bot.mqtt"];
|
||||
const go = () => s.uptime["bot.mqtt"] = { state, at };
|
||||
if (stats) {
|
||||
if (stats.state !== state) {
|
||||
go();
|
||||
}
|
||||
} else {
|
||||
go();
|
||||
}
|
||||
}
|
||||
export let connectivityReducer =
|
||||
generateReducer<ConnectionState>(DEFAULT_STATE)
|
||||
.add<{ id: string }>(Actions.PING_START, (s, { payload }) => {
|
||||
|
@ -28,12 +39,12 @@ export let connectivityReducer =
|
|||
})
|
||||
.add<PingResultPayload>(Actions.PING_OK, (s, { payload }) => {
|
||||
s.pings = completePing(s.pings, payload.id, payload.at);
|
||||
s.uptime["bot.mqtt"] = { state: "up", at: payload.at };
|
||||
maybeTransition(s, "up", payload.at);
|
||||
return s;
|
||||
})
|
||||
.add<PingResultPayload>(Actions.PING_NO, (s, { payload }) => {
|
||||
s.pings = failPing(s.pings, payload.id);
|
||||
s.uptime["bot.mqtt"] = { state: "down", at: payload.at };
|
||||
maybeTransition(s, "down", payload.at);
|
||||
return s;
|
||||
})
|
||||
.add<EdgeStatus>(Actions.NETWORK_EDGE_CHANGE, (s, { payload }) => {
|
||||
|
|
Loading…
Reference in New Issue