Add ability to stop the morse.

This commit is contained in:
Pim Kunis 2019-10-25 13:33:22 +02:00
parent 0e722b813e
commit 7ea4dd1752
5 changed files with 37 additions and 29 deletions

View file

@ -5,8 +5,8 @@ defmodule Morse.Server do
GenServer.start_link(__MODULE__, {nil, 0}, name: __MODULE__)
end
def start_morse do
GenServer.call(__MODULE__, :start)
def toggle_morse do
GenServer.call(__MODULE__, :toggle)
end
def update_progress(progress) do
@ -27,9 +27,11 @@ defmodule Morse.Server do
end
@impl true
def handle_call(:start, _from, {pid, _progress} = state) do
def handle_call(:toggle, _from, {pid, _progress}) do
if worker_alive?(pid) do
{:reply, {:error, :already_started}, state}
Morse.Worker.kill(pid)
apply(pubsub(), :broadcast, [Ui.PubSub, "morse_progress", 0])
{:reply, :ok, {nil, 0}}
else
pid = spawn(&Morse.Worker.signal/0)
{:reply, :ok, {pid, 0}}

View file

@ -32,6 +32,11 @@ defmodule Morse.Worker do
update_progress(100, 100)
end
def kill(pid) do
Process.exit(pid, :kill)
toggle_lamp(@off)
end
defp signal_symbol({?., _index}, _length) do
toggle_lamp(@on)
Process.sleep(@sleep_short)

View file

@ -1,42 +1,42 @@
body {
background-color: lightblue;
background-color: lightblue;
}
h1 {
font-size: 30px;
font-family: "Verdana", Verdana, sans-serif;
font-size: 30px;
font-family: "Verdana", Verdana, sans-serif;
}
h2 {
font-size: 25px;
font-family: "Verdana", Verdana, sans-serif;
font-weight: normal;
font-size: 25px;
font-family: "Verdana", Verdana, sans-serif;
font-weight: normal;
}
p {
font-size: 20px;
font-family: "Verdana", Verdana, sans-serif;
font-size: 20px;
font-family: "Verdana", Verdana, sans-serif;
}
#buttonwrap {
text-align: center;
text-align: center;
}
.button {
background-color: #4CAF50; /* Green */
border: none;
color: white;
padding: 15px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
width: 70%;
height: 100px;
background-color: #4CAF50; /* Green */
border: none;
color: white;
padding: 15px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
width: 70%;
height: 100px;
}
.button[disabled=disabled] {
background-color: gray;
.button.stop {
background-color: red;
}
#hintbutton {

View file

@ -12,10 +12,11 @@ defmodule UiWeb.MorseLive do
{:ok, assign(socket, default_assigns(ip))}
end
def handle_event("start_morse", _value, %{assigns: %{ip: ip}} = socket) do
if :ok == Morse.Server.start_morse() do
def handle_event("toggle_morse", _value, %{assigns: %{ip: ip}} = socket) do
if Morse.Server.in_progress?() do
spawn fn -> Ui.TelegramBot.message("#{ip} pressed the button!") end
end
Morse.Server.toggle_morse()
{:noreply, socket}
end

View file

@ -4,9 +4,9 @@
<div id="buttonwrap">
<%= if @in_progress? do %>
<button phx-click="start_morse" class="button" <%= if @in_progress?, do: ~s(disabled=disabled) %>>In progress...</button>
<button phx-click="toggle_morse" class="button stop">Stop</button>
<% else %>
<button phx-click="start_morse" class="button">Start</button>
<button phx-click="toggle_morse" class="button">Start</button>
<% end %>
<div id="response-block">
<h2>Progress:</h2>