Я пытаюсь создать простое чат-приложение (планирование приложения для покера) с помощью Action Cable. Я немного смущен терминологией, иерархией файлов и тем, как работают обратные вызовы.
Это действие, которое создает сеанс пользователя:
class SessionsController < ApplicationController
def create
cookies.signed[:username] = params[:session][:username]
redirect_to votes_path
end
end
Затем пользователь может опубликовать голосование, которое должно транслироваться всем:
class VotesController < ApplicationController
def create
ActionCable.server.broadcast 'poker',
vote: params[:vote][:body],
username: cookies.signed[:username]
head :ok
end
end
До сих пор все ясно для меня и прекрасно работает. Проблема заключается в следующем: как отобразить количество подключенных пользователей? Есть ли обратный вызов, который срабатывает в JS, когда пользователь (потребитель?) Подключается? Я хочу, когда я открываю 3 вкладки в 3 разных браузерах в режиме инкогнито, я бы хотел отобразить "3". Когда новый пользователь подключается, я хотел бы, чтобы число увеличивалось. Если какой-либо пользователь отключается, число должно уменьшаться.
Мой PokerChannel
:
class PokerChannel < ApplicationCable::Channel
def subscribed
stream_from 'poker'
end
end
app/assets/javascripts/poker.coffee
:
App.poker = App.cable.subscriptions.create 'PokerChannel',
received: (data) ->
$('#votes').append @renderMessage(data)
renderMessage: (data) ->
"<p><b>[#{data.username}]:</b> #{data.vote}</p>"