From 57e88bdc118d0dfa447a324f2e859b07c23cb5dc Mon Sep 17 00:00:00 2001 From: Jorge Valdez Date: Wed, 27 Feb 2019 00:55:19 -0600 Subject: [PATCH] add lobby agent --- lib/jamstack/application.ex | 1 + lib/jamstack/party/lobby.ex | 78 +++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 lib/jamstack/party/lobby.ex diff --git a/lib/jamstack/application.ex b/lib/jamstack/application.ex index a1fe187..11ba70a 100644 --- a/lib/jamstack/application.ex +++ b/lib/jamstack/application.ex @@ -10,6 +10,7 @@ defmodule Jamstack.Application do children = [ Jamstack.JS.SessionCode, Jamstack.JS.Youtube, + Jamstack.Party.Lobby, # Start the Ecto repository Jamstack.Repo, # Start the endpoint when the application starts diff --git a/lib/jamstack/party/lobby.ex b/lib/jamstack/party/lobby.ex new file mode 100644 index 0000000..e42613e --- /dev/null +++ b/lib/jamstack/party/lobby.ex @@ -0,0 +1,78 @@ +defmodule Jamstack.Party.Lobby do + use Agent + + def start_link(_opts) do + Agent.start_link( + fn -> + %{ } + end, + name: __MODULE__ + ) + end + + def create_lobby(join_code) do + Agent.update( + __MODULE__, + fn lobby -> + Map.put( + lobby, + join_code, + [] + ) + end + ) + end + + def join_lobby(join_code, user_name) do + Agent.update( + __MODULE__, + fn lobby -> + Map.put( + lobby, + join_code, + [ user_name | lobby[join_code] ] + ) + end + ) + end + + def leave_lobby(join_code, user_name) do + Agent.update( + __MODULE__, + fn lobby -> + Map.put( + lobby, + join_code, + Enum.filter( + lobby[join_code], + fn user -> user != user_name end + ) + ) + end + ) + end + + def get_lobby(join_code) do + Agent.get( + __MODULE__, + fn lobby -> + Map.get( + lobby, + join_code + ) + end + ) + end + + def remove_lobby(join_code) do + Agent.update( + __MODULE__, + fn lobby -> + Map.pop( + lobby, + join_code + ) + end + ) + end +end