Есть ли способ прекратить подписку на конкретный канал для какого-либо конкретного потребителя с серверной стороны (контроллер), чтобы можно было отключить отключенный обратный вызов в моем файле сценария кофе?Как прекратить подписку на канал действия с сервера?
4
A
ответ
0
Вы можете сделать что-то вроде этого.
class YourChannel < ApplicationCable::Channel
#your code
def your_custom_action
if something
reject_subscription
end
end
end
0
class ChatChannel < ApplicationCable::Channel
def subscribed
@room = Chat::Room[params[:room_number]]
reject unless current_user.can_access?(@room)
end
end
Перед вызовом reject
вы можете также информировать абонента о отбросим причине:
class ChatChannel < ApplicationCable::Channel
def subscribed
if params["answerer"]
answerer = params["answerer"]
answerer_user = User.find_by email: answerer
if answerer_user
stream_from "chat_#{answerer_user}_channel"
else
connection.transmit identifier: params, error: "The user #{answerer} not found."
# http://api.rubyonrails.org/classes/ActionCable/Channel/Base.html#class-ActionCable::Channel::Base-label-Rejecting+subscription+requests
reject
end
else
connection.transmit identifier: params, error: "No params specified."
# http://api.rubyonrails.org/classes/ActionCable/Channel/Base.html#class-ActionCable::Channel::Base-label-Rejecting+subscription+requests
reject
end
end
end
Мне интересно, что тоже. Я решил отправить клиенту сообщение об отключении, и клиент получил завершение подписки после получения этого сообщения. –