20

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

5 に答える 5

19

1つの方法は使用することのようです

ActionCable.server.connections.length

(コメントの警告を参照してください)

于 2015-10-05T10:06:40.413 に答える
0

私はあなたのための答えを見つけたと思います。これを試して:

ActionCable.server.connections.select { |con| con.current_room == room }.length?

コードのどこでも使用でき、選択したストリームに接続しているユーザーの数を確認できます:)

私の中で私connection.rbはこのようなものを持っています:

module ApplicationCable
  class Connection < ActionCable::Connection::Base
    identified_by :current_room

    def connect
      self.current_room = find_room
    end

    private

    def find_room
      .....
    end
  end
end

誰にも役立つことを願っています。

于 2021-05-07T14:18:07.527 に答える