Как я могу напрямую ответить на сообщение пользователя, используя каналы Phoenix?

Я создал базовое приложение для чата, показанное в документах Phoenix Channels. Теперь мне нужен способ обрабатывать определенные сообщения, отвечая только отправителю.

Например, если пользователь вводит /who, отправьте ему (и только ему) список подключенных пользователей.

Как я могу это сделать?


person Nathan Long    schedule 09.05.2016    source источник
comment
Я использую Феникс 1.1.4   -  person Nathan Long    schedule 09.05.2016


Ответы (1)


В Фениксе

Соответствующий заголовок функции handle_in должен возвращать ответ в следующем формате: {:reply, {status :: atom, response :: map}, Socket.t}.

Например:

  def handle_in("new_msg", %{"body" => "/who"}, socket) do
    user_list = UserList.get # or whatever
    {:reply, {:ok, %{kind: "private", from: "server", body: user_list}}, socket}
  end

(Если вы установите handle_in для возврата мусора, например, пустой строки, результирующая ошибка объясняет допустимые форматы возвращаемых значений, откуда я это узнал.)

В Javascript

Когда вы channel.push, просто поставьте цепочку на .receive для ответа.

    channel.push("new_msg", {body: $chatInput.val()}).receive(
      "ok", (reply) => console.log("got reply", reply)
     )

(Спасибо Мануэлю Калленбаху за этот ответ.)

person Nathan Long    schedule 09.05.2016