Phoenix Web Development: Create rich web applications using functional programming techniques with Phoenix and Elixir by Richey Brandon

Phoenix Web Development: Create rich web applications using functional programming techniques with Phoenix and Elixir by Richey Brandon

Author:Richey, Brandon [Richey, Brandon]
Language: eng
Format: azw3
Tags: COM060160 - COMPUTERS / Web / Web Programming, COM051000 - COMPUTERS / Programming / General, COM060080 - COMPUTERS / Web / General
Publisher: Packt Publishing
Published: 2018-04-29T16:00:00+00:00


Writing our server channel code for live voting

The last piece to the puzzle for all of this work is that we need to tell Phoenix how to deal with the "vote" message that is getting pushed from the client. Remember that our preceding implementation used the "push" message with an option_id parameter; we'll use those rules to implement the appropriate handle_in function. Back in lib/vocial_web/channels/poll_channel.ex, add the following:

def handle_in("vote", %{"option_id" => option_id}, socket) do

with {:ok, option} <- Vocial.Votes.vote_on_option(option_id) do

broadcast socket, "new_vote", %{"option_id" => option.id, "votes" => option.votes}

{:reply, {:ok, %{"option_id" => option.id, "votes" => option.votes}}, socket}

else

{:error, _} ->

{:reply, {:error, %{message: "Failed to vote for option!"}}, socket}

end

end

In the preceding block of code, we start with just our handle_in function pattern matching on "vote" messages coming from the client. We're expecting them to provide an option_id parameter (because how else would we know what it is that they're trying to vote on?), and with that option ID we'll try to cast that vote. If we succeed, we'll broadcast out to all listening clients, Hey, we just received a new vote for this particular option ID. The new vote count should be X!

If all went well, we'll broadcast out a message repeating the same information we received, and we'll include a reply to the sender that the server received the message successfully! Otherwise, we'll fail out with an error reply that lets the user know that they failed to vote for the option they clicked the button for!



Download



Copyright Disclaimer:
This site does not store any files on its server. We only index and link to content provided by other sites. Please contact the content providers to delete copyright contents if any and email us, we'll remove relevant links or contents immediately.