sockets connections and disconnections plus callers ordered arrays.

This commit is contained in:
Luis Fernando Molina committed 2021-09-07 13:05:58 +02:00
1 parent 4623ef28a3
commit bac140cf92
3 files changed
+141 -31

No files matched your search

+4 -3
View File
@@ -15,9 +15,10 @@ exports.newDesktopApp = function newDesktopApp() {
/*
This is the Web Sockets client that interacts with the Superalgos Network.
*/
//DK.webSocketsClient = SA.projects.network.modules.webSocketsClient.newNetworkModulesWebSocketsClient()
//await DK.webSocketsClient.initialize()
DK.webSocketsClient = SA.projects.network.modules.webSocketsClient.newNetworkModulesWebSocketsClient()
await DK.webSocketsClient.initialize()
return
/* These are the Network Interfaces by which the UI interacts with the Desktop App.*/
//let WEB_SOCKETS_INTERFACE = require('./Client/webSocketsInterface.js')
let HTTP_INTERFACE = require('./Client/httpInterface.js')
@@ -1,6 +1,9 @@
exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSocketsInterface() {
let thisObject = {
networkClients: undefined,
networkPeers: undefined,
callersMap: undefined,
initialize: initialize,
finalize: finalize
}
@@ -14,6 +17,10 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
return thisObject
function finalize() {
thisObject.networkClients = undefined
thisObject.networkPeers = undefined
callersMap = undefined
socketServer = undefined
clientInterface = undefined
peerInterface = undefined
@@ -26,18 +33,35 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
clientInterface = NT.projects.socialTrading.modules.clientInterface.newSocialTradingModulesClientInterface()
peerInterface = NT.projects.socialTrading.modules.peerInterface.newSocialTradingModulesPeerInterface()
thisObject.networkClients = []
thisObject.networkPeers = []
thisObject.callersMap = new Map()
setUpWebSocketServer()
}
function setUpWebSocketServer() {
try {
socketServer.on('connection', onConnection)
socketServer.on('connection', onConnectionOpened)
function onConnectionOpened(socket)
/*
This function is executed every time a new Websockets connection
is stablished.
*/ {
let caller = {
socket: socket,
userProfile: undefined,
role: undefined
}
caller.socket.id = SA.projects.foundations.utilities.miscellaneousFunctions.genereteUniqueId()
caller.socket.on('close', onConnectionClosed)
function onConnection(socket) {
let caller = {}
let calledTimestamp = (new Date()).valueOf()
socket.on('message', onMenssage)
caller.socket.on('message', onMenssage)
async function onMenssage(message) {
try {
@@ -49,7 +73,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'messageHeader Not Coorrect JSON Format.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
/*
@@ -60,13 +84,13 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'messageType Not Provided.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
switch (messageHeader.messageType) {
case "Handshake": {
handshakeProducedure(socket, caller, calledTimestamp, messageHeader)
handshakeProducedure(caller, calledTimestamp, messageHeader)
break
}
case "Request": {
@@ -76,19 +100,19 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'Handshake Not Done Yet.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
switch (caller.role) {
case 'Network Client': {
let response = await clientInterface.messageReceived(messageHeader.payload, caller.userProfile)
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
break
}
case 'Network Peer': {
let response = await peerInterface.messageReceived(messageHeader.payload)
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
break
}
}
@@ -99,7 +123,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'messageType Not Supported.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
break
}
}
@@ -109,7 +133,13 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
}
}
function handshakeProducedure(socket, caller, calledTimestamp, messageHeader) {
function onConnectionClosed() {
let socketId = this.id
let caller = thisObject.callersMap.get(socketId)
removeCaller(caller)
}
function handshakeProducedure(caller, calledTimestamp, messageHeader) {
/*
The handshage producedure have 2 steps, we need to know
now which one we are at.
@@ -119,7 +149,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'step Not Provided.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
if (messageHeader.step !== 'One' && messageHeader.step !== 'Two') {
@@ -127,7 +157,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'step Not Supported.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
switch (messageHeader.step) {
@@ -149,7 +179,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'callerRole Not Provided.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
@@ -158,7 +188,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'callerRole Not Supported.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
@@ -171,7 +201,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'callerProfileHandle Not Provided.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
@@ -184,7 +214,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'callerTimestamp Not Provided.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
/*
@@ -195,7 +225,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'callerTimestamp Too Old.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
/*
@@ -215,7 +245,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
message: 'Handshake Step One Complete',
signature: JSON.stringify(signature)
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
}
function handshakeStepTwo() {
@@ -227,7 +257,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'Handshake Step One Not Completed.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
/*
@@ -238,7 +268,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'signature Not Provided.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
@@ -250,7 +280,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'Bad Signature.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
/*
@@ -263,7 +293,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'userProfile Not Found.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
/*
@@ -277,7 +307,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'callerProfileHandle Does Not Match witnessUserProfile.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
/*
@@ -289,7 +319,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'calledProfileHandle Does Not Match This Network Node Handle.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
/*
@@ -300,7 +330,7 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
result: 'Error',
message: 'calledTimestamp Does Not Match calledTimestamp On Record.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
return
}
/*
@@ -310,15 +340,74 @@ exports.newNetworkModulesWebSocketsInterface = function newNetworkModulesWebSock
We will remember the user profile behind this caller.
*/
caller.userProfile = witnessUserProfile
/*
We will remember the caller itself.
*/
addCaller(caller)
let response = {
result: 'Ok',
message: 'Handshake Successful.'
}
socket.send(JSON.stringify(response))
caller.socket.send(JSON.stringify(response))
}
}
function addCaller(caller) {
thisObject.callersMap.set(caller.socket.id, caller)
switch (caller.role) {
case 'Network Client': {
addToArray(thisObject.networkClients, caller)
break
}
case 'Network Peer': {
addToArray(thisObject.networkPeers, caller)
break
}
}
function addToArray(callersArray, caller) {
/*
We will add the caller to the existing array, first the ones with highest ranking.
*/
for (let i = 0; i < callersArray.length; i++) {
let callerInArray = callersArray[i]
if (caller.userProfile.ranking > callerInArray.userProfile.ranking) {
callersArray.splice(i, 0, caller)
return
}
}
callersArray.push(caller)
}
}
function removeCaller(caller) {
thisObject.callersMap.delete(caller.socket.id)
switch (caller.role) {
case 'Network Client': {
removeFromArray(thisObject.networkClients, caller)
break
}
case 'Network Peer': {
removeFromArray(thisObject.networkPeers, caller)
break
}
}
function removeFromArray(callersArray, caller) {
for (let i = 0; i < callersArray.length; i++) {
let callerInArray = callersArray[i]
if (caller.socket.id === callerInArray.socket.id) {
callersArray.splice(i, 1)
return
}
}
}
}
} catch (err) {
console.log('[ERROR] Web Sockets Interface -> setUpWebSocketServer -> err.stack = ' + err.stack)
}
@@ -0,0 +1,20 @@
exports.newSocialTradingModulesSocialGraph = function newSocialTradingModulesSocialGraph() {
/*
This object represent the entire Social Graph.
*/
let thisObject = {
initialize: initialize,
finalize: finalize
}
return thisObject
function finalize() {
}
function initialize() {
}
}