Size: a a a

Эликсир и Вунш

2019 October 01

GK

Gleb Kolokolov in Эликсир и Вунш
по связке state и event может быть разный транзишен
источник

ŹR

Źmićer Rubinštejn in Эликсир и Вунш
Я не понимаю
источник

GK

Gleb Kolokolov in Эликсир и Вунш
событие - нажать на левую педаль. стейт машина стоит. транзишен - ничего. стейт машина едет - вызов акшена тормозжение и переход в стейт машина стоит
источник

GK

Gleb Kolokolov in Эликсир и Вунш
это разные транзишены
источник

GK

Gleb Kolokolov in Эликсир и Вунш
но событие одно и то же
источник

ŹR

Źmićer Rubinštejn in Эликсир и Вунш
states = [:stop, :drive]
transitions = %{
 stop: %{
   gas: &gas_action/1
 },
 drive: %{
   brake: &stop_action/1
 }
}
источник

AB

Alexey Bolshakov in Эликсир и Вунш
а что, не сделать мапу? ключ - это {экшен, стейт} ?
источник

ŹR

Źmićer Rubinštejn in Эликсир и Вунш
Вот нормальная fsm здорового человека
источник

AB

Alexey Bolshakov in Эликсир и Вунш
ну или так вот, да
источник

ŹR

Źmićer Rubinštejn in Эликсир и Вунш
Без кучи непонятной хрени
источник

GK

Gleb Kolokolov in Эликсир и Вунш
фсм как черный ящик. отправляем ему что попало. если это оказалось эвентом он сменит состояние
источник

IA

Ivan Ananev in Эликсир и Вунш
Źmićer Rubinštejn
Как ты собираешься функции грузить из бд?
в dets можно записать функцию..
источник

IA

Ivan Ananev in Эликсир и Вунш
но это другая история)
источник

ŹR

Źmićer Rubinštejn in Эликсир и Вунш
defmodule FSM do
 use GenServer

 defstruct [
   :states,
   :transitions
 ]

 def init(struct) do
   {:ok, {Enum.at(struct.states, 0), struct}}
 end

 def handle_info({:transition, transition}, {current_state, struct}) do
   case Map.get(struct.transitions, current_state) do
     nil -> {:noreply, {current_state, struct}}
     transition_map -> case Map.get(transition_map, transition) do
       nil -> {:noreply, {current_state, struct}}
       {action_name, next_state} ->
         ActionPerformer.perform_action(action_name)
         {:noreply, {next_state, struct}}
     end
   end
 end
end



#######
states = [:stop, :drive]
transitions = %{
 stop: %{
   gas: {"gas_action", :drive}
 },
 drive: %{
   brake: {"stop_action", :stop}
 }
}
источник

ŹR

Źmićer Rubinštejn in Эликсир и Вунш
Вот блять проблему нашли - запилить fsm на генсервере.
источник

AB

Alexey Bolshakov in Эликсир и Вунш
Alexey Bolshakov
написав один единственный модуль ГС
^^^
источник

AB

Alexey Bolshakov in Эликсир и Вунш
понял. тут надо было написать за тебя, а не объяснить, как сделать
источник

GK

Gleb Kolokolov in Эликсир и Вунш
Не
источник

GK

Gleb Kolokolov in Эликсир и Вунш
Не надо было
источник

GK

Gleb Kolokolov in Эликсир и Вунш
источник