Sha256: 0fa6f537381bc3ad66ac605ce00aaec3d8edf8f51d5c27caea391e0c07519c4d

Contents?: true

Size: 1001 Bytes

Versions: 1

Compression:

Stored size: 1001 Bytes

Contents

-module(ernie_native).
-export([process/2]).
-include_lib("ernie.hrl").

process(ActionTerm, Request) ->
  {_Type, Mod, Fun, Args} = ActionTerm,
  Sock = Request#request.sock,
  logger:debug("Calling ~p:~p(~p)~n", [Mod, Fun, Args]),
  try apply(Mod, Fun, Args) of
    Result ->
      logger:debug("Result was ~p~n", [Result]),
      Data = bert:encode({reply, Result}),
      gen_tcp:send(Sock, Data)
  catch
    exit:Error -> handle_error(Sock, Error);
    error:Error -> handle_error(Sock, Error)
  end,
  ok = gen_tcp:close(Sock),
  Log = Request#request.log,
  Log2 = Log#log{tdone = erlang:now()},
  Request2 = Request#request{log = Log2},
  ernie_access_logger:acc(Request2).

handle_error(Sock, Error) ->
  BError = list_to_binary(io_lib:format("~p", [Error])),
  Trace = erlang:get_stacktrace(),
  BTrace = lists:map(fun(X) -> list_to_binary(io_lib:format("~p", [X])) end, Trace),
  Data = term_to_binary({error, [user, 0, <<"RuntimeError">>, BError, BTrace]}),
  gen_tcp:send(Sock, Data).
  

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
schleyfox-ernie-2.2.3 elib/ernie_native.erl