我正在尝试使用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”。当新用户连接时,我希望数字增加。如果任何用户断开连接,则数字应该减少。
我的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>"