mirror of
https://codeberg.org/JasterV/jaster.xyz.git
synced 2026-04-26 18:10:01 +00:00
Format
This commit is contained in:
parent
8448ad4a9f
commit
93ec842720
1 changed files with 6 additions and 3 deletions
|
|
@ -64,6 +64,7 @@ firmware.door_server -> hardware: lock {style.animated: true}
|
||||||
firmware.lights -> hardware: set_lights_red {style.animated: true}
|
firmware.lights -> hardware: set_lights_red {style.animated: true}
|
||||||
firmware.notifications -> third_party_notifications_service: send_notification {style.animated: true}
|
firmware.notifications -> third_party_notifications_service: send_notification {style.animated: true}
|
||||||
```
|
```
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
In this post we will focus on the firmware layer, more specifically in the Door server, its implementation and tests.
|
In this post we will focus on the firmware layer, more specifically in the Door server, its implementation and tests.
|
||||||
|
|
@ -298,7 +299,7 @@ defmodule DoorAutomation.DoorServer do
|
||||||
|
|
||||||
{:reply, :unlocked, @unlocked_state}
|
{:reply, :unlocked, @unlocked_state}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
I'd like to also show how to write a subscriber for the lights module to react to pub sub events.
|
I'd like to also show how to write a subscriber for the lights module to react to pub sub events.
|
||||||
|
|
@ -333,7 +334,7 @@ defmodule DoorAutomation.LightsSubscriber do
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def handle_info(:door_locked, state) do
|
def handle_info(:door_locked, state) do
|
||||||
:ok = DoorAutomation.Lights.set_red()
|
:ok = DoorAutomation.Lights.set_red()
|
||||||
Phoenix.PubSub.broadcast(DoorAutomation.PubSub, @lights_topic, :lights_set_red)
|
Phoenix.PubSub.broadcast(DoorAutomation.PubSub, @lights_topic, :lights_set_red)
|
||||||
{:noreply, state}
|
{:noreply, state}
|
||||||
end
|
end
|
||||||
|
|
@ -344,7 +345,7 @@ defmodule DoorAutomation.LightsSubscriber do
|
||||||
Phoenix.PubSub.broadcast(DoorAutomation.PubSub, @lights_topic, :lights_set_green)
|
Phoenix.PubSub.broadcast(DoorAutomation.PubSub, @lights_topic, :lights_set_green)
|
||||||
{:noreply, state}
|
{:noreply, state}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
As a note, some people might prefer publishing the light events from inside the Lights module,
|
As a note, some people might prefer publishing the light events from inside the Lights module,
|
||||||
|
|
@ -442,9 +443,11 @@ We've also seen how tests become simpler due to the fact that each test suite be
|
||||||
There are some drawbacks though:
|
There are some drawbacks though:
|
||||||
|
|
||||||
- Debugging becomes harder.
|
- Debugging becomes harder.
|
||||||
|
|
||||||
- You are introducing an extra of asynchronous broadcast messaging and therefore your elixir processes become harder to debug.
|
- You are introducing an extra of asynchronous broadcast messaging and therefore your elixir processes become harder to debug.
|
||||||
|
|
||||||
- Event delivery is not ensured.
|
- Event delivery is not ensured.
|
||||||
|
|
||||||
- If a subscriber goes down, Phoenix PubSub won't try to re-deliver lost events once the process restarts.
|
- If a subscriber goes down, Phoenix PubSub won't try to re-deliver lost events once the process restarts.
|
||||||
- Depending on your situation you might want to implement a more complex pub-sub system that does its best to ensure event delivery.
|
- Depending on your situation you might want to implement a more complex pub-sub system that does its best to ensure event delivery.
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue