Client is sending object that contains multiple rooms to join so once socket starts streaming user should see event that are only related to that user based on rooms, So I use socket Rooms approach when event comes i checked if event.room
are same as "rooms" sent from connected client start streaming to those channels.
client-Data = ["room1","room2"]
event-Data = {room: "room2",message:"This message is for room2 user only"}
So with above data user should joined both room and should expect this event because one room matched with event its not happening with below code user is getting event from the rooms that are not related to logged user. Any idea what is implemented wrong or better approach ?
server.js
io.on('connection', function(socket) {
socket.on('joinChannel', function(rooms) {
rooms.forEach(function,(room){
socket.join(room);
console.log('Room', room);
oplogger.watch('riskAnalysisSLA.event', function(event) {
console.log(event);
if (event.room = room) {
io.sockets.in(room).emit('newMessage', event);
}
});
});
});
});
app.component.ts
ngOnInit() {
this.streamService.getAllStream().subscribe(stream => {
this.dataSource = new MatTableDataSource(stream);
this.socket.on('newMessage', (event) => {
this.dataSource.data.push(event.data);
console.log("data",event.data);
this.dataSource.data = [...this.dataSource.data]
});
this.socket.emit('joinChannel',["room1","room2"]);
});
});