@curium.rocks/ping-pong-emitter

A emitter that peroidically emits a ping message and expects a pong

Usage no npm install needed!

<script type="module">
  import curiumRocksPingPongEmitter from 'https://cdn.skypack.dev/@curium.rocks/ping-pong-emitter';
</script>

README

ping-pong-emitter

Quality Gate Status Coverage Security Rating

Purpose

The purpose of this class is to create an emitter that will periodically emit a ping message expecting a pong response. Likewise, it can be pinged, and it will send a pong back. This can be used as a test class for emitter transceivers, as well as a general comm link check akin to a keep alive.

How to use

Install

npm install --save @curium.rocks/ping-pong-emitter

Examples

import {isPingPongMessage, PingPongEmitter, PingPongMessage, PingPongMessageType} from '@curium.rocks/ping-pong-emitter';
import {IDataEvent} from '@curium.rocks/data-emitter-base';

const emitter = new PingPongEmitter('unique-id', 'usefull-name', 'lengthy description', 1000);
emitter.startPolling();
const disposable = emitter.onData(async (evt) => {
    if(!isPingPongMessage(evt.data)) console.log('What... not a ping pong message!');
    if((evt.data as PingPongMessage).type == PingPongMessageType.PING) {
        console.log("I've been pinged!, I better send a pong");
        await emitter.sendCommand({
            actionId: 'unique-action-id',
            payload: {
                type: PingPongMessageType.PONG
            }
        });
        console.log("Ponged back!");
    }
});

// check on the state 

const state = await emitter.probeStatus();

if (state.bit) {
    console.log('BIT flag on indicates BIT failure, not getting pongs!');
}

// want to change the ping interval

const cmdResult = await emitter.sendCommand({
    actionId: 'unique-id',
    name: 'new-name',
    id: 'new-emitter-id',
    description: 'new-emitter-description',
    interval: 5000 //interval in ms
});

// check cmd result

if(!cmdResult.success) {
    console.log(`Error while executing cmd: ${cmdResult.actionId}, reason: ${cmdResult.failureReason}`);
}

// when done cleanup
emitter.dispose();