|
@@ -7,11 +7,13 @@ import { v4 as uuidv4 } from 'uuid'
|
|
|
import { ConnectionState, Transport, TransportEvent, TransportMessage } from '../interface/connector.interface';
|
|
|
import { ConnectedClientSocket, ConnectedServerSocket } from '../transport/websocket';
|
|
|
import { EventMessage } from '../interface/transport.interface';
|
|
|
+import ConsoleLogger from './log.utils';
|
|
|
+const console: ConsoleLogger = new ConsoleLogger(`SocketUtils`, ['transport'])
|
|
|
|
|
|
export function startSocketServer(port: number): Observable<SocketForConnectedClient> {
|
|
|
return new Observable((observer) => {
|
|
|
try {
|
|
|
- console.log(`Socket Server ${port} Started....`)
|
|
|
+ console.log({ message: `Socket Server ${port} Started....` })
|
|
|
let httpServer = createServer();
|
|
|
let socketServer = new Server(httpServer)
|
|
|
|
|
@@ -21,15 +23,15 @@ export function startSocketServer(port: number): Observable<SocketForConnectedCl
|
|
|
})
|
|
|
|
|
|
socketServer.engine.on("connection_error", (err) => {
|
|
|
- console.log(err.req);
|
|
|
- console.log(err.code);
|
|
|
- console.log(err.message);
|
|
|
- console.log(err.context);
|
|
|
+ console.log({ message: `Socket Server ${port} Connection Error`, details: err.req })
|
|
|
+ console.log({ message: `Socket Server ${port} Connection Error`, details: err.code })
|
|
|
+ console.log({ message: `Socket Server ${port} Connection Error`, details: err.message })
|
|
|
+ console.log({ message: `Socket Server ${port} Connection Error`, details: err.context })
|
|
|
});
|
|
|
|
|
|
|
|
|
httpServer.listen(port, '0.0.0.0', () => {
|
|
|
- console.log(`Socket server listening on ${port}`);
|
|
|
+ console.log({ message: `Socket server listening on ${port}` });
|
|
|
});
|
|
|
} catch (error) {
|
|
|
observer.error(error);
|
|
@@ -64,7 +66,7 @@ export function handleClientSocketConnection(socket: ClientSocket, serversConnec
|
|
|
|
|
|
|
|
|
socket.on('connect', () => {
|
|
|
- console.log('Connected to the server:', socket.id)
|
|
|
+ console.log({ message: `Connected to the server ${socket.id} ` })
|
|
|
if (receiverProfileInfo?.id) {
|
|
|
checkOwnClientInfo(receiverProfileInfo.id).then((profile: { id: string }) => {
|
|
|
socket.emit('profile', {
|
|
@@ -109,9 +111,8 @@ export function handleClientSocketConnection(socket: ClientSocket, serversConnec
|
|
|
})
|
|
|
|
|
|
socket.on('profile', (data: { name: string, message: any }) => {
|
|
|
- console.log(data)
|
|
|
if (data.name == 'New Profile') {
|
|
|
- console.log(`Assigned client Name: ${data.message.id}`)
|
|
|
+ console.log({ message: `Assigned client Name: ${data.message.id}` })
|
|
|
|
|
|
receiverProfileInfo = {
|
|
|
id: data.message.id,
|
|
@@ -120,7 +121,7 @@ export function handleClientSocketConnection(socket: ClientSocket, serversConnec
|
|
|
connectionState: new BehaviorSubject<ConnectionState>(`ONLINE`)
|
|
|
}
|
|
|
writeFile(data.message as ConnectedServerSocket, (data.message as ConnectedServerSocket).id).then(() => {
|
|
|
-
|
|
|
+
|
|
|
eventNotification.next({
|
|
|
id: uuidv4(),
|
|
|
event: `New Server`,
|
|
@@ -129,11 +130,20 @@ export function handleClientSocketConnection(socket: ClientSocket, serversConnec
|
|
|
message: `New Websocket Channel ${(data.message as ConnectedServerSocket).id} established.`
|
|
|
} as EventMessage
|
|
|
})
|
|
|
+
|
|
|
+ eventNotification.next({
|
|
|
+ id: uuidv4(),
|
|
|
+ event: `Server Connected`,
|
|
|
+ data: {
|
|
|
+ clientId: (data.message as ConnectedServerSocket).id,
|
|
|
+ message: `Server ${(data.message as ConnectedServerSocket).id} connected and ready to go.`
|
|
|
+ } as EventMessage
|
|
|
+ })
|
|
|
}).catch((error) => { })
|
|
|
serversConnected.push(receiverProfileInfo)
|
|
|
}
|
|
|
if (data.name == 'Adjusted Profile') {
|
|
|
- console.log(`Assigned client Name: ${(data.message as ConnectedServerSocket).id}`)
|
|
|
+ console.log({ message: `Adjusted client Name: ${(data.message as ConnectedServerSocket).id}` })
|
|
|
|
|
|
let clientObj: ConnectedServerSocket | undefined = serversConnected.find(obj => obj.id === data.message.id)
|
|
|
if (clientObj) {
|
|
@@ -142,7 +152,9 @@ export function handleClientSocketConnection(socket: ClientSocket, serversConnec
|
|
|
clientObj.id = receiverProfileInfo.id
|
|
|
clientObj.socketInstance = socket
|
|
|
clientObj.connectionState.next('ONLINE')
|
|
|
- console.log(`Just to make sure they are pointed accurately:`, `This should be ONLINE: ${receiverProfileInfo.connectionState.getValue()}`, `Id match? ${receiverProfileInfo.id == clientObj.id ? true : false}`)
|
|
|
+ console.log({
|
|
|
+ message: `Just to make sure they are pointed accurately: This should be ONLINE: ${receiverProfileInfo.connectionState.getValue()} !! Id match? ${receiverProfileInfo.id == clientObj.id ? true : false}`,
|
|
|
+ })
|
|
|
}
|
|
|
writeFile(data.message as ConnectedServerSocket, (data.message as ConnectedServerSocket).id).then(() => {
|
|
|
|
|
@@ -157,7 +169,7 @@ export function handleClientSocketConnection(socket: ClientSocket, serversConnec
|
|
|
}).catch((error) => { })
|
|
|
}
|
|
|
if (data.name == 'Error') {
|
|
|
- console.log(`Server cannot find credentials`, data.message)
|
|
|
+ console.log({ message: `Server cannot find credentials`, details: data.message })
|
|
|
|
|
|
setTimeout(() => {
|
|
|
socket.emit('profile', {
|
|
@@ -170,7 +182,7 @@ export function handleClientSocketConnection(socket: ClientSocket, serversConnec
|
|
|
|
|
|
|
|
|
socket.on('disconnect', () => {
|
|
|
- console.error(`Socket Server ${receiverProfileInfo.id} Disconnected`)
|
|
|
+ console.log({ message: `Socket Server ${receiverProfileInfo.id} Disconnected` })
|
|
|
if (receiverProfileInfo) {
|
|
|
eventNotification.next({
|
|
|
id: uuidv4(),
|
|
@@ -189,7 +201,7 @@ export function handleClientSocketConnection(socket: ClientSocket, serversConnec
|
|
|
|
|
|
export function handleNewSocketClient(socket: SocketForConnectedClient, connectedClientSocket: ConnectedClientSocket[]): Observable<TransportEvent> {
|
|
|
return new Observable((event: Observer<TransportEvent>) => {
|
|
|
- console.log(`Setting up listeners for socket:${socket.id}`)
|
|
|
+ console.log({ message: `Setting up listeners for socket:${socket.id}` })
|
|
|
|
|
|
|
|
|
socket.on(`profile`, (message: { name: string, data: any }) => {
|
|
@@ -229,23 +241,21 @@ export function handleNewSocketClient(socket: SocketForConnectedClient, connecte
|
|
|
checkIfClientExists(message.data.id).then((client: ConnectedClientSocket) => {
|
|
|
clientInstance = client
|
|
|
handleFoundClient(clientInstance)
|
|
|
- }).catch(error => console.error(error))
|
|
|
+ }).catch(error => {
|
|
|
+ console.log({ message: `Promise Error`, details: error })
|
|
|
+ })
|
|
|
}
|
|
|
function handleFoundClient(clientInstance: ConnectedClientSocket | undefined) {
|
|
|
if (clientInstance) {
|
|
|
- console.log(`Socket Client ${clientInstance.id} Found`)
|
|
|
+ console.log({ message: `Socket Client ${clientInstance.id} Found` })
|
|
|
socket.emit('profile', { name: 'Adjusted Profile', message: { id: clientInstance.id } })
|
|
|
|
|
|
clientInstance.socketInstance = socket
|
|
|
-
|
|
|
- if (!clientInstance.connectionState) {
|
|
|
- clientInstance.connectionState = new BehaviorSubject<ConnectionState>(`OFFLINE`)
|
|
|
- }
|
|
|
|
|
|
- startListening(socket, clientInstance, event)
|
|
|
+ startListening(socket, clientInstance, event, true)
|
|
|
|
|
|
} else {
|
|
|
- console.log(`Profile Not Found`)
|
|
|
+ console.log({ message: `Profile Not Found` })
|
|
|
socket.emit('profile', { name: 'Error', message: 'Receiver Profile Not found' })
|
|
|
}
|
|
|
}
|
|
@@ -261,10 +271,10 @@ export async function writeFile(data: ConnectedServerSocket, filename: string):
|
|
|
|
|
|
fs.writeFile(`${filename}.json`, JSON.stringify(data, null, 2), (err) => {
|
|
|
if (err) {
|
|
|
- console.error('Error writing file', err);
|
|
|
+ console.log({ message: 'Error writing file', details: err })
|
|
|
reject(false)
|
|
|
} else {
|
|
|
- console.log('File has been written');
|
|
|
+ console.log({ message: 'File has been written', details: err })
|
|
|
resolve(true)
|
|
|
}
|
|
|
});
|
|
@@ -282,7 +292,7 @@ export function addClientToDB(entry: ConnectedClientSocket, filePath: string = '
|
|
|
data = JSON.parse(fileContent);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+
|
|
|
data.push({
|
|
|
id: entry.id,
|
|
|
dateCreated: entry.dateCreated,
|
|
@@ -292,9 +302,9 @@ export function addClientToDB(entry: ConnectedClientSocket, filePath: string = '
|
|
|
|
|
|
|
|
|
fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8');
|
|
|
- console.log(`Entry added successfully.`);
|
|
|
+ console.log({ message: `Entry added successfully.` })
|
|
|
} catch (error) {
|
|
|
- console.error('Error writing to file:', error);
|
|
|
+ console.log({ message: 'Error writing to file:', details: error })
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -303,7 +313,7 @@ export async function checkIfClientExists(id: string, filePath: string = 'client
|
|
|
try {
|
|
|
|
|
|
if (!fs.existsSync(filePath)) {
|
|
|
- console.log("File does not exist.");
|
|
|
+ console.log({ message: "File does not exist." })
|
|
|
reject('File does not exist');
|
|
|
}
|
|
|
|
|
@@ -311,18 +321,16 @@ export async function checkIfClientExists(id: string, filePath: string = 'client
|
|
|
const fileContent = fs.readFileSync(filePath, 'utf-8');
|
|
|
const data: any[] = JSON.parse(fileContent);
|
|
|
|
|
|
-
|
|
|
+
|
|
|
let obj = data.find(entry => entry.id === id);
|
|
|
|
|
|
if (obj) {
|
|
|
- console.log(`Client with ID ${id} exists.`);
|
|
|
+ console.log({ message: "Client with ID ${id} exists." })
|
|
|
} else {
|
|
|
- console.log(`Client with ID ${id} does not exist.`);
|
|
|
+ console.log({ message: `Client with ID ${id} does not exist.` })
|
|
|
}
|
|
|
-
|
|
|
resolve(obj);
|
|
|
} catch (error) {
|
|
|
- console.error('Error reading the file:', error);
|
|
|
reject(`Error reading the file`)
|
|
|
}
|
|
|
})
|
|
@@ -349,34 +357,39 @@ export async function checkOwnClientInfo(filename?: string): Promise<{ id: strin
|
|
|
|
|
|
} catch (err) {
|
|
|
|
|
|
- console.error("Error reading or parsing file:", err);
|
|
|
+ console.log({ message: "Error reading or parsing file:", details: err })
|
|
|
reject('');
|
|
|
}
|
|
|
} else {
|
|
|
- console.error("File does not exist");
|
|
|
+ console.log({ message: "File does not exist" })
|
|
|
reject('');
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
|
|
|
|
|
|
-export function startListening(socket: SocketForConnectedClient, client: ConnectedClientSocket, eventListener: Observer<TransportEvent>): void {
|
|
|
+export function startListening(socket: SocketForConnectedClient, client: ConnectedClientSocket, eventListener: Observer<TransportEvent>, oldClient?: boolean): void {
|
|
|
|
|
|
eventListener.next({
|
|
|
id: uuidv4(),
|
|
|
- event: `Client Connected`,
|
|
|
+ event: oldClient ? 'Client Re-connected' : `Client Connected`,
|
|
|
data: {
|
|
|
clientId: client.id,
|
|
|
- message: `Socket Client Connected. Adapter ID assigned: ${client.id}`,
|
|
|
+ message: `Socket Client ${oldClient ? `Re-Connected` : `Connected`}. Adapter ID assigned: ${client.id}`,
|
|
|
payload: client
|
|
|
} as EventMessage
|
|
|
})
|
|
|
|
|
|
- if (client.connectionState.getValue() == 'OFFLINE') {
|
|
|
+
|
|
|
+ if (!client.connectionState) {
|
|
|
+ client.connectionState = new BehaviorSubject<ConnectionState>(`ONLINE`)
|
|
|
+ } else {
|
|
|
client.connectionState.next(`ONLINE`)
|
|
|
}
|
|
|
+
|
|
|
|
|
|
socket.on('message', (message: any) => {
|
|
|
+ console.log({ message: `Message from client ${client.id}`, details: message })
|
|
|
eventListener.next({
|
|
|
id: uuidv4(),
|
|
|
event: 'New Message',
|