Ibrahim madi
Ibrahim madi

Reputation: 11

Change channel dynamic with laravel,Socket and Redis

!!! Server - socket How can change channal dynamic

When I broadcast using /fire/1 for example, I only want to send to /room/1.

Currently it sends to /room/1, /room/2, /room/3, etc. Because by default here, everything on the server is subscribed to 'test-channel'. I just can't figure this out.

var server = require('http').Server();

var io = require('socket.io')(server);

var Redis = require('ioredis');
var redis = new Redis();


io.on('connection', function(socket){
    console.log('New User Conected here');

 redis.subscribe('test-channel');

redis.on('message', function(subscribed ,channel, message) {
    console.log(channel);
    message = JSON.parse(message);

    socket.emit(channel + ':' + message.event, message.data);
});

socket.on('joinRoom', function(room ){

    console.log('Join in  this Room '+ room);
    socket.join(room);

    });

});
server.listen(3000);

    event | php


    public function broadcastOn()
    {

         return ['test-channel']; // static

    }

Upvotes: 0

Views: 807

Answers (1)

Joe
Joe

Reputation: 4738

Add a property to your broadcast event, then pass it to the constructor.

class Message implements ShouldBroadcast{
    use SerializesModels;

    protected $channel;

    public function __construct($channel){
        $this->channel = $channel;
    }

    public function broadcastOn(){
       return [$this->channel];
    }
}

Then when you fire the event, pass the channel in: event(new Message($channel));

Upvotes: 1

Related Questions