2016-10-02 5 views
4

Есть ли способ прекратить подписку на конкретный канал для какого-либо конкретного потребителя с серверной стороны (контроллер), чтобы можно было отключить отключенный обратный вызов в моем файле сценария кофе?Как прекратить подписку на канал действия с сервера?

+0

Мне интересно, что тоже. Я решил отправить клиенту сообщение об отключении, и клиент получил завершение подписки после получения этого сообщения. –

ответ

0

Вы можете сделать что-то вроде этого.

class YourChannel < ApplicationCable::Channel 

    #your code 

    def your_custom_action 
    if something 
     reject_subscription 
    end 
    end 
end 
0

http://api.rubyonrails.org/classes/ActionCable/Channel/Base.html#class-ActionCable::Channel::Base-label-Rejecting+subscription+requests

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