Size: a a a

2020 October 08

LL

Lama Lover in pro.elixir
Или для апгрейднутого
источник

LL

Lama Lover in pro.elixir
И вот эта неясность всё портит, поэтому никакой cast между call и reply не нужен
источник

ev

eugene vikulov in pro.elixir
Lama Lover
Но после пересылки пакета из reply клиенту

Из-за этого, клиенту с апгрейднутым соединением прилетит пакет для не-апгрейднутого соединения
тут не совсем там. клиенту полетит сообщение, о том что соединение либо открыто(+аттрибуты), либо нет. никакого апргейда соединения с клиентом из сети нет
источник

LL

Lama Lover in pro.elixir
eugene vikulov
тут не совсем там. клиенту полетит сообщение, о том что соединение либо открыто(+аттрибуты), либо нет. никакого апргейда соединения с клиентом из сети нет
Какая разница какими словами это называть
Есть клиент и есть сервер, они могут быть в двух состояниях

И вот этот msg будет послан из сервера клиенту, когда клиент думает, что сервер в состоянии с аттрибутами, а на самом деле нет
источник

LL

Lama Lover in pro.elixir
Я к тому что тут всё совсем не тривиально
источник

LL

Lama Lover in pro.elixir
Но с call-reply всё очень-очень тривиально. Зачем эти сложности?
источник

ev

eugene vikulov in pro.elixir
Lama Lover
Какая разница какими словами это называть
Есть клиент и есть сервер, они могут быть в двух состояниях

И вот этот msg будет послан из сервера клиенту, когда клиент думает, что сервер в состоянии с аттрибутами, а на самом деле нет
да, так и есть, но я не понимаю, как такое может случится. вот и всё.
источник

LL

Lama Lover in pro.elixir
Lama Lover
Если
p1 sends call to p2
p3 sends msg to p1
p2 sends cast to p1
p2 sends reply to p1

То на p2 сообщения обработаются в таком порядке: reply, msg, cast
И вот поведение tcp-процесса во время msg не совсем ясно
Вот конкретный пример, если вы мне не верите, я могу сделать это в плейграунде
источник

ev

eugene vikulov in pro.elixir
Lama Lover
Но с call-reply всё очень-очень тривиально. Зачем эти сложности?
```{status, response_data, additional_statuses} =
         case CIP.Objects.Object.service(registry, EPath.to_map(path), service, service_data) do
           {:success, service_response} -> {:success, service_response, []}
           :success -> {:success, <<>>, []}
           {error, error_codes} -> {error, <<>>, error_codes}
           error -> {error, <<>>, []}
         end```Вот так сеййчас выглядит вызов из tcp-процесса. Вы же предлагаете существенно усложнить этот кусок ради обработки вызова который произойдёт раз в год, как вариант
источник

ev

eugene vikulov in pro.elixir
пардон, не лады какие-то с раметкой
источник

LL

Lama Lover in pro.elixir
eugene vikulov
```{status, response_data, additional_statuses} =
         case CIP.Objects.Object.service(registry, EPath.to_map(path), service, service_data) do
           {:success, service_response} -> {:success, service_response, []}
           :success -> {:success, <<>>, []}
           {error, error_codes} -> {error, <<>>, error_codes}
           error -> {error, <<>>, []}
         end```Вот так сеййчас выглядит вызов из tcp-процесса. Вы же предлагаете существенно усложнить этот кусок ради обработки вызова который произойдёт раз в год, как вариант
Я понятия не имею что это за код
источник

ev

eugene vikulov in pro.elixir
Lama Lover
Я понятия не имею что это за код
это я понимаю. я просто веду к тому, что сейчас всё очевидно, простой запрос - простой ответ. Вы же предлаете каждый ответ анализировать на предмет указаний для модификации стэйта tcp-просесса
источник

ev

eugene vikulov in pro.elixir
а такое случается ОЧЕНЬ редко
источник

LL

Lama Lover in pro.elixir
defmodule Ccr.Manager do
 ...
 def handle_call(:ping, _from, state) do
   Process.sleep(1_000)
   GenServer.cast(Ccr.Server, "cast from manager")
   Process.sleep(1_000)
   {:reply, :pong, state}
 end

end

defmodule Ccr.Server do
 ...
 def handle_cast(:letsdothis, state) do
   reply = GenServer.call(Ccr.Manager, :ping)
   IO.inspect "received reply #{reply}"
   {:noreply, state}
 end

 def handle_cast(cast, state) do
   IO.inspect "received cast #{cast}"
   {:noreply, state}
 end

 def letsdothis do
   Ccr.Server.start_link()
   Ccr.Manager.start_link()

   GenServer.cast(Ccr.Server, :letsdothis)
   Process.sleep(500)
   GenServer.cast(Ccr.Server, "some random message in between")
 end
end

И вот тут
iex(1)> Ccr.Server.letsdothis
:ok
"received reply pong"
"received cast some random message in between"
"received cast cast from manager"
источник

LL

Lama Lover in pro.elixir
eugene vikulov
это я понимаю. я просто веду к тому, что сейчас всё очевидно, простой запрос - простой ответ. Вы же предлаете каждый ответ анализировать на предмет указаний для модификации стэйта tcp-просесса
Анализировать на предмет указаний на модификацию стейта это всего-лишь один case или даже лучше with
источник

ev

eugene vikulov in pro.elixir
Lama Lover
Анализировать на предмет указаний на модификацию стейта это всего-лишь один case или даже лучше with
повторюсь - я вас услышал. утро вечера мудренее. большое спасибо
источник

LL

Lama Lover in pro.elixir
eugene vikulov
повторюсь - я вас услышал. утро вечера мудренее. большое спасибо
Это правда, да
источник

DP

Dmitry Ponyatov in pro.elixir
Pig Greenest
нет, замыкание это closure, а здесь речь про clause
санта-claus
источник

DP

Dmitry Ponyatov in pro.elixir
для phoenix есть аналог jinja с динамической загрузкой шаблонов вместо в-компиляции?
оп-дизайнер хочет менять вёртску через ftp и чтобы было совместимо с популярными рисовалками
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Dmitry Ponyatov
для phoenix есть аналог jinja с динамической загрузкой шаблонов вместо в-компиляции?
оп-дизайнер хочет менять вёртску через ftp и чтобы было совместимо с популярными рисовалками
Что значит совместимо с популярными рисовалками?
источник