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

Link to this function

handle_event(binary, arg2, socket)

View Source
@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

Link to this function

handle_info(atom, socket)

View Source
@spec handle_info(msg :: term(), socket :: Phoenix.LiveView.Socket.t()) ::
  {:noreply, Phoenix.LiveView.Socket.t()}

Handle the refresh_board messages triggered by auto_mode

Link to this function

mount(params, session, socket)

View Source
@spec mount(
  params :: Phoenix.LiveView.unsigned_params(),
  session :: map(),
  socket :: Phoenix.LiveView.Socket.t()
) :: {:ok, Phoenix.LiveView.Socket.t()}

Set up initial liveview state

Render the page based on current state