Skip to content

Commit 32a27d9

Browse files
Dynamically handle Clients joining Network and inform necessary Routers
1 parent 5de8a1e commit 32a27d9

File tree

1 file changed

+32
-19
lines changed

1 file changed

+32
-19
lines changed

Server/src/Switcher.ts

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -98,26 +98,39 @@ Switcher.on('message', (msg, rinfo) => {
9898
console.log("Client connecting to Switcher");
9999
messageType = 3;
100100

101-
// Get first Router in Routers list
102-
var it = Routers.values();
103-
104-
let firstRouter = it.next().value;
105-
// TODO: If no Routers are active, save Client details and notify once a Router is connected
106-
if(!firstRouter) return sendMessage = { message: "No Routers active on Network" };
107-
else if(clientCount == 0) {
108-
console.log("Initial Client Connected");
109-
sendMessage = JSON.parse(firstRouter);
110-
} else if(clientCount == 1) {
111-
console.log("Receiving Client Connected");
112-
// Store Client details for later use by last router
113-
receivingClient.ip = address;
114-
receivingClient.port = port;
115-
sendMessage = "You are the receiving Client";
116-
} else {
117-
console.log("Additional Client connected, no space in Flow Table");
118-
sendMessage = "You are not connected to the Network, no space.";
101+
// Get first Router in Routers list
102+
var it = Routers.values();
103+
104+
let firstRouter = it.next().value;
105+
if (!firstRouter) return sendMessage = { message: "No Routers active on Network" };
106+
else if (clientCount == 0) {
107+
console.log("Initial Client Connected");
108+
sendMessage = { message: 'You are the initial client. Router 1 has been detected on the Switcher Network', router: JSON.parse(firstRouter), count: clientCount };
109+
} else if (clientCount == 1) {
110+
console.log("Receiving Client Connected");
111+
112+
// Get Flow Table values for Receiving Client and update with address and port
113+
let finalRouter = 'R3'; // Hardcoded
114+
let flowTableValues = FlowTable.get(finalRouter);
115+
if (flowTableValues) {
116+
flowTableValues[4] = address.toString();
117+
flowTableValues[5] = port.toString();
118+
FlowTable.set(finalRouter, flowTableValues);
119+
120+
let [, , lastRouterAddress, lastRouterPort] = flowTableValues;
121+
// Send message to last Router to inform that Receiving Client is active on Network
122+
sendMessage = prepareMessage(6, { forwardAddress: address, forwardPort: port });
123+
sendMessageToRouter(sendMessage, lastRouterAddress.toString(), lastRouterPort as unknown as number);
119124
}
120-
clientCount++;
125+
126+
sendMessage = { message: "You are the receiving Client", router: JSON.parse(firstRouter), count: clientCount };
127+
} else {
128+
console.log("Additional Client connected, no space in Flow Table");
129+
sendMessage = { message: "You are not connected to the Network, no space." };
130+
}
131+
clientCount++;
132+
133+
sendMessage = { ...sendMessage, client: { address, port } };
121134

122135
}
123136

0 commit comments

Comments
 (0)