<div dir="ltr">Oh, thank you very much! 

'change_callback_module' action is relatively new and I was not aware of it.<br><div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">чт, 26 нояб. 2020 г. в 15:11, Hugo Mills <<a href="mailto:hugo@carfax.org.uk">hugo@carfax.org.uk</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Thu, Nov 26, 2020 at 03:00:46PM +0300, Stanislav Ledenev wrote:<br>
> Hi,<br>
> In my application I have simple_one_for_one supervisor for handling incoming<br>
> external requests (HTTP). Each request has some command and its arguments.<br>
> Each command has its own workflow and that is why commands handler is<br>
> implemented as gen_statem. This gen_statem handles all commands and<br>
> I don't like that kind of a code mess inside of it.<br>
> <br>
> I have two thoughts in my mind about resolving this problem, but I don't<br>
> like<br>
> them either:<br>
> 1. Create multiple simple_one_for_one supervisors, one for each type of<br>
> command.<br>
>    I don't think that so many supervisors is a good idea;<br>
> 2. Create "general" gen_statem for supervisor and multiple handling modules<br>
>    which then be passed as arguments to supervisor's init.<br>
>    I don't like general over general and so on (yuck!).<br>
> <br>
> Is there any elegant way to solve this kind of a problem and keep this nice<br>
> pair of simple_one_for_one supervisor and gen_statem?<br>
<br>
   gen_statem can switch between callback modules, so you could have<br>
one which simply identifies which kind of command it's meant to be<br>
handling, and then switches to the appropriate callback module for<br>
that command, with the 'change_callback_module' action.<br>
<br>
   Hugo.<br>
<br>
-- <br>
Hugo Mills             | If you're not part of the solution, you're part of<br>
hugo@... <a href="http://carfax.org.uk" rel="noreferrer" target="_blank">carfax.org.uk</a> | the precipitate.<br>
<a href="http://carfax.org.uk/" rel="noreferrer" target="_blank">http://carfax.org.uk/</a>  |<br>
PGP: E2AB1DE4          |<br>
</blockquote></div>