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 components that go into a subscription/unsubscription.
App.cable.subscriptions.remove requires a subscription argument, but what do I pass in?
Thanks!
Testing Action Cable To test this connection class, we can use connect method to simulate a client server connection and then test the state of connection is as expected. The connection object is available in the test.
1 What is Action Cable? Action Cable seamlessly integrates WebSockets with the rest of your Rails application. It allows for real-time features to be written in Ruby in the same style and form as the rest of your Rails application, while still being performant and scalable.
you can unsubscribe by calling the unsubscribe() function on the channel returned by creating a new subscription.
A 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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With