To create subscriptions I run:
App.room = App.cable.subscriptions.create({
channel: "RoomChannel",
roomId: roomId
}, {
connected: function() {},
disconnected: function() {},
received: function(data) {
return $('#messages').append(data['message']);
},
speak: function(message, roomId) {
return this.perform('speak', {
message: message,
roomId: roomId
});
}
});
But because I want the client to never be subscribed to more than one channel, what can I run each time before this to remove all subscriptions the client has?
I tried to do something super hacky like:
App.cable.subscriptions['subscriptions'] = [App.cable.subscriptions['subscriptions'][1, 0]]
But I'm sure it didn't work because there are many other ponents that go into a subscription/unsubscription.
App.cable.subscriptions.remove requires a subscription argument, but what do I pass in?
Thanks!
To create subscriptions I run:
App.room = App.cable.subscriptions.create({
channel: "RoomChannel",
roomId: roomId
}, {
connected: function() {},
disconnected: function() {},
received: function(data) {
return $('#messages').append(data['message']);
},
speak: function(message, roomId) {
return this.perform('speak', {
message: message,
roomId: roomId
});
}
});
But because I want the client to never be subscribed to more than one channel, what can I run each time before this to remove all subscriptions the client has?
I tried to do something super hacky like:
App.cable.subscriptions['subscriptions'] = [App.cable.subscriptions['subscriptions'][1, 0]]
But I'm sure it didn't work because there are many other ponents that go into a subscription/unsubscription.
App.cable.subscriptions.remove requires a subscription argument, but what do I pass in?
Thanks!
Share Improve this question asked May 1, 2016 at 7:21 LaserLaser 5,4394 gold badges37 silver badges50 bronze badges3 Answers
Reset to default 9A bit of a late answer, but considering you've already declared
App.room = App.cable.subscriptions.create(...)
to remove, something like
if (App.room) App.cable.subscriptions.remove(App.room);
should suffice.
Running this before each subscription creation will ensure there is only ever a maximum of one subscription per client.
if (App.cable.subscriptions['subscriptions'].length > 1) {
App.cable.subscriptions.remove(App.cable.subscriptions['subscriptions'][1])
};
It looks like you would need to create a reference to your subscription on create
let mySubscription = App.cable.subscriptions.create({
channel: "MyChannel"
},
{
connected: () => { console.log('connected') },
disconnected: () => {},
received: (data) => {}
});
and then remove it like so
App.cable.subscriptions.remove(mySubscription)