@@ -15,16 +15,63 @@ mongoose.connect(config.mongoose.url, config.mongoose.options).then(() => {
15
15
const wss = new WebSocket . Server ( { host : '0.0.0.0' , port : 5001 } ) ;
16
16
logger . info ( 'WebSocket server is listening on port 5001' ) ;
17
17
18
+ // Store clients with their associated rasID
19
+ const clients = new Map ( ) ;
20
+
18
21
wss . on ( 'connection' , ( ws ) => {
19
22
logger . info ( 'New WebSocket connection' ) ;
20
23
21
24
ws . on ( 'message' , ( message ) => {
22
- logger . info ( `Received message: ${ message } ` ) ;
23
- // Handle incoming messages here
25
+ try {
26
+ const parsedMessage = JSON . parse ( message ) ;
27
+ logger . info ( `Received message: ${ JSON . stringify ( parsedMessage ) } ` ) ;
28
+
29
+ if ( parsedMessage . rasID ) {
30
+ // Store the rasID with the client
31
+ // clients.set(ws, parsedMessage.rasID);
32
+ // logger.info(`Stored rasID ${parsedMessage.rasID} for client`);
33
+ if ( ! clients . has ( ws ) ) {
34
+ clients . set ( ws , parsedMessage . rasID ) ;
35
+ logger . info ( `Stored rasID ${ parsedMessage . rasID } for client` ) ;
36
+ }
37
+ }
38
+
39
+ if ( parsedMessage . ID ) {
40
+ // check if not have ID before set
41
+ if ( ! clients . has ( ws ) ) {
42
+ clients . set ( ws , parsedMessage . ID ) ;
43
+ }
44
+ // Forward the message to the client with the matching rasID
45
+ }
46
+ // clients.forEach((rasID, client) => {
47
+ // if (rasID === parsedMessage.ID && client.readyState === WebSocket.OPEN && client !== ws) {
48
+ // client.send(JSON.stringify(parsedMessage));
49
+ // logger.info(`Forwarded message to client with rasID ${rasID}`);
50
+ // }
51
+ // });
52
+ // send for client have same ID == rasID
53
+ clients . forEach ( ( rasID , client ) => {
54
+ if ( rasID === parsedMessage . ID && client . readyState === WebSocket . OPEN && client !== ws ) {
55
+ client . send ( JSON . stringify ( parsedMessage ) ) ;
56
+ logger . info ( `Forwarded message to client with rasID ${ rasID } ` ) ;
57
+ }
58
+ } ) ;
59
+
60
+ clients . forEach ( ( ID , client ) => {
61
+ if ( ID === parsedMessage . rasID && client . readyState === WebSocket . OPEN && client !== ws ) {
62
+ client . send ( JSON . stringify ( parsedMessage ) ) ;
63
+ logger . info ( `Forwarded message to client with ID ${ ID } ` ) ;
64
+ }
65
+ } ) ;
66
+
67
+ } catch ( e ) {
68
+ logger . error ( 'Failed to parse message' , e ) ;
69
+ }
24
70
} ) ;
25
71
26
72
ws . on ( 'close' , ( ) => {
27
73
logger . info ( 'WebSocket connection closed' ) ;
74
+ clients . delete ( ws ) ;
28
75
} ) ;
29
76
} ) ;
30
77
} ) ;
0 commit comments