View Source HanoiWeb.HanoiGameControllerLive (Towers of Hanoi v1.0.0)
Controller that renders the main Hanoi game page
Receives liveview events from the page and updates state accordingly
Main page furniture is rendered here. The main board visual rendering functions are in RenderBoard.
%%{init: {'theme':'dark'}}%%
graph LR;
classDef server fill:#709421,stroke:#AD9121,stroke-width:1px;
classDef supervision fill:#D000FF,stroke:#D0B441,stroke-width:1px;
classDef topic fill:#0059DF,stroke:#312378,stroke-width:1px;
classDef db fill:#9E74BE,stroke:#4E1C74,stroke-width:1px;
subgraph App
T0(Application):::supervision
end
subgraph Session
S1(IdPlug):::topic
S2(Purger):::server
end
subgraph Web
T2(Hanoi_GameControllerLive):::topic
T3(Hanoi_GameView):::topic
T4(CoreComponents):::topic
end
subgraph Server
G1(TowerGame):::supervision;
G2(TowerState):::server;
end
subgraph Algo
T5(Board):::topic;
T6(Algo):::topic;
end
T0(Application):::supervision --> T1{{Phoenix Webserver}}:::topic;
T0(Application):::supervision --> S2(Purger):::server;
T1{{Phoenix Webserver}}:::topic -- Controller --> T2(hanoi_game_controller_live):::topic;
T1{{Phoenix Webserver}}:::topic --> S1(IdPlug):::topic
T2(Hanoi_GameControllerLive):::topic -- View --> T3(HanoiGameView):::topic;
T3(Hanoi_GameView):::topic --> T4(CoreComponents):::topic;
T2(Hanoi_GameControllerLive):::topic -- Model --> G1(TowerGame):::supervision;
S2(Purger):::server --> G1(TowerGame)
G1(TowerGame):::supervision -- per game --> G2(TowerState):::server;
G2(TowerState):::server --> DB[("ETS#nbsp;")]:::db;
G2(TowerState):::server --> T5(Board):::topic;
G2(TowerState):::server --> T6(Algo):::topic;
Summary
Functions
Handle the auto_mode, move_stone & reset clicks from page
Handle the refresh_board messages triggered by auto_mode
Set up initial liveview state
Render the page based on current state
Functions
@spec handle_event( event :: binary(), Phoenix.LiveView.unsigned_params(), socket :: Phoenix.LiveView.Socket.t() ) :: {:noreply, Phoenix.LiveView.Socket.t()}
Handle the auto_mode, move_stone & reset clicks from page
@spec handle_info(msg :: term(), socket :: Phoenix.LiveView.Socket.t()) :: {:noreply, Phoenix.LiveView.Socket.t()}
Handle the refresh_board messages triggered by auto_mode
@spec mount( params :: Phoenix.LiveView.unsigned_params(), session :: map(), socket :: Phoenix.LiveView.Socket.t() ) :: {:ok, Phoenix.LiveView.Socket.t()}
Set up initial liveview state
@spec render(assigns :: Phoenix.LiveView.Socket.assigns()) :: Phoenix.LiveView.Rendered.t()
Render the page based on current state