Skip to content

Instantly share code, notes, and snippets.

@chvanikoff
Created July 17, 2018 02:17
Show Gist options
  • Save chvanikoff/18cde73bd8225e202ab8a48d283f1e3c to your computer and use it in GitHub Desktop.
Save chvanikoff/18cde73bd8225e202ab8a48d283f1e3c to your computer and use it in GitHub Desktop.
defmodule Chat.Server do
use GenServer
def init(_args) do
{:ok, %{messages: [], users: []}}
end
def handle_info({:message, message}, state) do
broadcast(state.users, message)
{:noreply, %{state | messages: [message | state.messages]}}
end
def handle_info({:join, user}, state) do
message = %{from: "Chat", text: "#{user.name} joined"}
broadcast(state.users, message)
{:noreply, %{state | users: [user | state.users]}}
end
def handle_info({:leave, user}, state) do
message = %{from: "Chat", text: "#{user.name} disconnected"}
broadcast(state.users, message)
{:noreply, %{state | users: state.users -- user}}
end
defp broadcast([], _message), do: :ok
defp broadcast([user | users], message) do
send(user.pid, message)
broadcast(users, message)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment