ВСТУП
N2O, як вбудовуваний фреймворк, надає два способи входу (API) в протокольний цикл.
API
Цикл протоколу n2o_proto сумісний з cowboy та emqttd версіями N2O. Головна мета цього API — вбудувати N2O у вашу функціональну кінцеву точку. В інших випадках він викликається автоматично за допомогою конфігурації.
stream({ text | binary, binary() }, term(), term()) -> #reply{}.
Функція stream призначена для cowboy версії n2o.
info(term(), term(), term()) -> #reply{}.
Функція info призначена для emqttd версії n2o.
push(term(), term(), term(), term(), term()) -> #reply{}.
Обробка ланцюжка бінарних протоколів без фільтрації. Ви можете перехоплювати всі повідомлення з stream/3 та info/3, встановивши функцію для параметру filter в sys.config.
КОНФІГУРАЦІЯ
[{n2o,[{protocols,[n2o_nitro]},
{filter,{n2o_proto,push}}]}].
РЕАЛІЗАЦІЯ
nop(R,S) -> {reply,{binary,<<>>},R,S}.
reply(M,R,S) -> {reply,M,R,S}.
push(_,R,S,[],_) -> nop(R,S);
push(M,R,S,[H|T],Acc) ->
case H:info(M,R,S) of
{unknown,_,_,_} -> push(M,R,S,T,Acc);
{reply,M1,R1,S1} -> reply(M1,R1,S1);
A -> push(M,R,S,T,[A|Acc]) end.