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>"