Гнездо Phoenix LiveView и внешняя розетка - PullRequest
0 голосов
/ 08 ноября 2019

Мне нужна помощь с чем-то и извините, если это кажется тривиальным, поскольку я все еще изучаю феникс.

У меня есть простой LiveView для просмотра позиции объекта в трехмерном пространстве, позиция приходит извнешний сокет вот как я обрабатываю входящую позицию

def handle_in("new_msg", %{"x" => posX, "y"=> posY, "z" => posZ}, socket) do
    GameLive.handle_event("new_position", %{"x" => posX, "y" => posY, "z" => posZ}, socket)
    broadcast!(socket, "new_msg", %{x: posX, y: posY, z: posZ})
    {:reply, {:ok, %{response: "Updated"}}, socket}
end

и вот как я обрабатываю событие

def handle_event("new_position", %{"x" => posX, "y" => posY, "z" => posZ}, socket) do
    {:noreply, assign(socket, %{x: posX, y: posY, z: posZ})}
end

Я получаю эту ошибку всякий раз, когда пытаюсь обновить позицию

[error] GenServer #PID<0.481.0> terminating
** (FunctionClauseError) no function clause matching in Phoenix.LiveView.assign/2
    (phoenix_live_view) lib/phoenix_live_view.ex:1252: Phoenix.LiveView.assign(%Phoenix.Socket{assigns: %{}, channel: GameviewWeb.RoomChannel, channel_pid: #PID<0.481.0>, endpoint: GameviewWeb.Endpoint, handler: GameviewWeb.UserSocket, id: nil, join_ref: "3", joined: true, private: %{log_handle_in: :debug, log_join: :info}, pubsub_server: Gameview.PubSub, ref: "4", serializer: Phoenix.Socket.V2.JSONSerializer, topic: "room:lobby", transport: :websocket, transport_pid: #PID<0.478.0>}, %{x: 5, y: 5, z: 5})

Теперь я понимаю, что я передаю сокет другого типа Phoenix.LiveView.assign/2, поскольку он ожидает Phoenix.LiveView.Socket, и я передаю Phoenix.Socket. Спасибо Elixir Forum Community .

Как мне справиться с такой ситуацией, я ищу решение с хорошей практикой. Заранее спасибо.

...