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
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.
Deep Learning with Python by François Chollet(12571)
Hello! Python by Anthony Briggs(9916)
OCA Java SE 8 Programmer I Certification Guide by Mala Gupta(9796)
The Mikado Method by Ola Ellnestam Daniel Brolund(9779)
Dependency Injection in .NET by Mark Seemann(9340)
Algorithms of the Intelligent Web by Haralambos Marmanis;Dmitry Babenko(8299)
Test-Driven iOS Development with Swift 4 by Dominik Hauser(7763)
Grails in Action by Glen Smith Peter Ledbrook(7696)
The Well-Grounded Java Developer by Benjamin J. Evans Martijn Verburg(7557)
Becoming a Dynamics 365 Finance and Supply Chain Solution Architect by Brent Dawson(7081)
Microservices with Go by Alexander Shuiskov(6849)
Practical Design Patterns for Java Developers by Miroslav Wengner(6769)
Test Automation Engineering Handbook by Manikandan Sambamurthy(6708)
Secrets of the JavaScript Ninja by John Resig Bear Bibeault(6414)
Angular Projects - Third Edition by Aristeidis Bampakos(6114)
The Art of Crafting User Stories by The Art of Crafting User Stories(5644)
NetSuite for Consultants - Second Edition by Peter Ries(5576)
Demystifying Cryptography with OpenSSL 3.0 by Alexei Khlebnikov(5381)
Kotlin in Action by Dmitry Jemerov(5064)
