blob: fd6972dbbec607448308b9f71e5972f9fdc027ae [file] [log] [blame]
%%%-------------------------------------------------------------------
%%% File : thrift_processor.erl
%%% Author : <todd@lipcon.org>
%%% Description :
%%%
%%% Created : 28 Jan 2008 by <todd@lipcon.org>
%%%-------------------------------------------------------------------
-module(thrift_processor).
-export([start/4,init/4]).
-include("thrift_constants.hrl").
-include("thrift_protocol.hrl").
-record(state, {handler, in_protocol, out_protocol, service}).
start(IProt, OProt, Service, Handler) ->
spawn(thrift_processor, init, [IProt, OProt, Service, Handler]).
init(IProt, OProt, Service, Handler) ->
io:format("Processor started~n"),
loop(#state{in_protocol = IProt,
out_protocol = OProt,
service = Service,
handler = Handler}).
loop(State = #state{in_protocol = IProto,
out_protocol = OProto}) ->
case thrift_protocol:read(IProto, message_begin) of
#protocol_message_begin{name = Function,
type = ?tMessageType_CALL} ->
ok = handle_function(State, list_to_atom(binary_to_list(Function))),
loop(State);
{error, closed} ->
error_logger:info_msg("Processor finished~n"),
ok
end.
handle_function(State = #state{in_protocol = IProto,
out_protocol = OProto},
add) ->
io:format("Reading struct~n"),
{ok, Struct} = thrift_protocol:read(IProto,
{struct, [{1, i32},
{2, i32}]}),
io:format("Struct: ~p~n", [Struct]),
{A, B} = Struct,
thrift_protocol:write(OProto, #protocol_message_begin{
name = "addResult",
type = ?tMessageType_REPLY,
seqid = 0}),
thrift_protocol:write(OProto, {{struct, [{0, i32}]},
{A + B}}),
thrift_protocol:write(OProto, message_end);
handle_function(State = #state{in_protocol = IProto,
out_protocol = OProto},
complexTest) ->
io:format("Reading struct~n"),
Struct = thrift_protocol:read(
IProto,
{struct, [{1, {struct,
[{1, {list, i32}},
{2, {map, string, {struct, [{1, i16}]}}}]}}]}),
io:format("Struct: ~p~n", [Struct]).