Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions nodejs/tfwconnector/MessageSender.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
'use strict';
let TFWConnector = require('./TFWConnector');


class MessageSender{


constructor(connector){
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

connector should be optional, and if the user does not provide one it should be initialised.

if(connector instanceof TFWConnector){
this.connector = connector;
}else{
console.error("MessageSender require an instance of TFWConnector!");
}
}


send(key, data){
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MessageSender should not be used to send data, only instructions (clients should use a naked TFWConnector for that (this method should be implemented in TFWServerConnector)

let messageToSend = createTFWMessage(data);
this.connector.pushSocket.send(messageToSend);
}


sendMessage(message, name = "avataobot") {
let key = "message";
let data = {
key: key,
data: {
originator: name,
message: message
}
};
let messageToSend = createTFWMessage(data);
this.connector.pushSocket.send(messageToSend);
}


sendMessages(messages, name = "avataobot"){
let key = "queueMessages";
let messagesToSend = [];
messages.forEach(message=>{
messagesToSend.push({originator: name, message: message});
});
let data = {
key: key,
data: {messages: messagesToSend}
};
let messageToSend = createTFWMessage(data);
this.connector.pushSocket.send(messageToSend);
}


sendToEventHandlers(message){
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MessageSender should not be used to send data, only instructions (clients should use a naked TFWConnector for that (this method should be implemented in TFWServerConnector)

let key = "mirror";
let data = {
key: key,
data: message
};
let messageToSend = createTFWMessage(data);
this.connector.pushSocket.send(messageToSend);
}

}


let createTFWMessage = (message) => {
return [Buffer.from(message.key), Buffer.from(JSON.stringify(message))]
};

module.exports = MessageSender;
29 changes: 29 additions & 0 deletions nodejs/tfwconnector/TFWConnector.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
'use strict';
const zmq = require('zeromq'),
subSock = zmq.socket('sub'),
pushSock = zmq.socket('push');

const SUB_PORT = process.env.TFW_PUBLISHER_PORT || 7654,
PUSH_PORT = process.env.TFW_RECEIVER_PORT || 8765;

const SUB_ADDRESS = "tcp://localhost:" + SUB_PORT,
PUSH_ADDRESS = "tcp://localhost:" + PUSH_PORT;


class TFWConnector {


constructor() {
this.pushSocket = pushSock.connect(PUSH_ADDRESS);
this.subSocket = subSock.connect(SUB_ADDRESS);
console.log("Push socket connected to: " + PUSH_ADDRESS + "\n" + "Subscribe socket connected to: " + SUB_ADDRESS);
}


subscribe(key) {
this.subSocket.subscribe(key);
}
}


module.exports = TFWConnector;
68 changes: 68 additions & 0 deletions nodejs/tfwconnector/TFWUtilities.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
'use strict';
let MessageSender = require('./MessageSender');


class TFWUtilities{


constructor(messageSender){
if(messageSender instanceof MessageSender){
this.messageSender = messageSender;
}else{
console.error("TFWUtilities class needs an instance of MessageSender!");
}
}


setView(viewType) {
let key = "dashboard";
let data = {
key: key,
data: {
command: "layout",
value: viewType
}
};
this.messageSender.send(key, data);
}


writeShell(command) {
let data = {
key: "shell",
data:{
command: "write",
value: command
}
};
this.messageSender.sendToEventHandlers(data);
}


stepNextState(){
let key = "";
let data = {
key: key,
data: {
event: "Stepping FSM to next state, from node event handler"
},
trigger: "step_next"
};
this.messageSender.send(key,data);
}


stepToState(state){
let key = "";
let data = {
key: key,
data: {
event: "Stepping FSM to next state, from node event handler"
},
trigger: "to_"+state
};
this.messageSender.send(key,data);
}
}

module.exports = TFWUtilities;