2016-05-19 14 views
0

トピックIDはどこに保存しますか?ソケットの範囲にあった現在のトピックを検出するにはどうすればよいですか?

def join("topic:" <> topic_id, _params, socket) do 
    ... 
    socket= assign(socket, :topic_id, topic_id) 
    {:ok, socket} 
end 

を、私のユーザーは、上記のコードは毎回新しいtopic_idを上書きすることを意味し、同時に複数のトピックに参加することができます。

ソケット用として、私は使用することができますトピックが結合されている、それは本当ですか?

handle_inでアクティブなトピックIDを知りたい場合はどうすればよいですか?例えば

def handle_in("new_message", params, socket) do 

    # what is the active topic id here? 

end 

Iこのかかわら:

def handle_in("new_message:" <> topic_id, params, socket) do 

    # now, I know that topic_id is the active topic 

end 

はこれを行うための別の方法がありますか?またはこれはどのように行われますか?あなたは、ユーザーがトピックを購読することができますチェックするために、追加の検証を行うことができるように

答えて

0

joinは、トピックへのサブスクリプションが存在した後、あなたは、正しい(など、自分の権限を確認してください)

をトピックを持っています、チャネルはソケット上で多重化されます。

あなたが特定のメッセージの追加情報を渡したい場合は、のparamsは、それらを置くための共通の場所である:

def handle_in("new_message", %{"topic_id" => topic_id}, socket) do 
    ... 
end 

あなたがtopic_idを必要とする理由を説明できるなら、それはあなたのquestyに答えることができ、

+0

は、メッセージが送信されたときに、トピックに関連する設定があるかもしれないと私は、トピックIDを必要とする、ありがとう..:だからここにあなたがトピックIDを取得する方法ですが、部屋のトピックのベースは"topic"であると仮定し

また、私はソケットオブジェクトがチャンネルスコープにあると思ったが、ユーザスコープでそのオブジェクトを見つけたので、ソケットオブジェクト内のパラメータを暗号化できますか? – simo

+0

実際には、ユーザーは地域チャンネルに参加できます。地域IDは関連するポリゴンを読み取るために使用されます。領地のポリゴンの内側または外側に送信された緯度経度、長いメッセージがあるかどうかを確認することができます。 – simo

+0

あなたのparamsにterritory_idを送信する必要があります。 – Gazler

3

ユーザーは複数のトピックに参加できます。現在topicにアクセスするには、socketパラメータのhandle_inにアクセスします。

def handle_in("some_message", _params, socket) do 
    "topic:" <> topic_id = socket.topic 
    ... 
end 
関連する問題