These are chat archives for synrc/n2o

24th
Feb 2017
Oleg Zinchenko
@cystbear
Feb 24 2017 17:46
@m-2k @5HT я тут пытаюсь gen_udp:recv/2 в loop закинуть который крутится в gen_server`е как в овнере, но немогу придумать как это сделать по-нормальному
Oleg Zinchenko
@cystbear
Feb 24 2017 17:59
-module(udp_listener).
-behaviour(gen_server).

-export([start_link/0]).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).

-record(state, { socket }).

start_link() -> gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).

init(_) ->
  timer:send_after(1000, loop),
  Port = 31337, Ip = {127,0,0,1},
  {ok, Socket} = gen_udp:open(Port, [{ip, Ip}, {active, false}, binary]),
  {ok, #state{socket = Socket}}.

handle_info(loop, State) ->
  loop(State#state.socket),
  {noreply, State};
handle_info(_, State) -> {noreply, State}.

loop(Socket) ->
  {ok, {_Ip, _Port, Data}} = gen_udp:recv(Socket, 0),
  Data,
  loop(Socket).

handle_call(_, _, State) -> {reply, ok, State}.
handle_cast(_, State)    -> {noreply, State}.
terminate(_, State)      -> gen_udp:close(State#state.socket).
code_change(_, State, _) -> {ok, State}.
смущает вот тот уебищный самодельный loop