mirror of
https://github.com/valitydev/thrift.git
synced 2024-11-07 10:48:51 +00:00
Make processor use a service definition and handler to determine types
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@666376 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
ae756f4561
commit
1c1ca74237
7
lib/alterl/src/test_handler.erl
Normal file
7
lib/alterl/src/test_handler.erl
Normal file
@ -0,0 +1,7 @@
|
||||
-module(test_handler).
|
||||
|
||||
-export([handle_function/2]).
|
||||
|
||||
handle_function(add, Params = {A, B}) ->
|
||||
io:format("Got params: ~p~n", [Params]),
|
||||
{reply, A + B}.
|
10
lib/alterl/src/test_service.erl
Normal file
10
lib/alterl/src/test_service.erl
Normal file
@ -0,0 +1,10 @@
|
||||
-module(test_service).
|
||||
%
|
||||
% Test service definition
|
||||
|
||||
-export([function_info/2]).
|
||||
|
||||
function_info(add, params_type) ->
|
||||
{struct, [{1, i32},
|
||||
{2, i32}]};
|
||||
function_info(add, reply_type) -> i32.
|
@ -36,35 +36,57 @@ loop(State = #state{in_protocol = IProto,
|
||||
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]),
|
||||
%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,
|
||||
% {A, B} = Struct,
|
||||
|
||||
thrift_protocol:write(OProto, #protocol_message_begin{
|
||||
name = "addResult",
|
||||
% 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]);
|
||||
|
||||
|
||||
handle_function(State = #state{in_protocol = IProto,
|
||||
out_protocol = OProto,
|
||||
handler = Handler,
|
||||
service = Service},
|
||||
Function) ->
|
||||
InParams = Service:function_info(Function, params_type),
|
||||
|
||||
{ok, Params} = thrift_protocol:read(IProto, InParams),
|
||||
Result = Handler:handle_function(Function, Params),
|
||||
|
||||
ReplyType = Service:function_info(Function, reply_type),
|
||||
|
||||
case Result of
|
||||
{reply, Reply} ->
|
||||
thrift_protocol:write(OProto, #protocol_message_begin{
|
||||
name = atom_to_list(Function) ++ "_result",
|
||||
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]).
|
||||
|
||||
|
||||
thrift_protocol:write(OProto, {{struct, [{0, ReplyType}]}, {Reply}}),
|
||||
thrift_protocol:write(OProto, message_end)
|
||||
end,
|
||||
ok.
|
||||
|
@ -19,7 +19,6 @@
|
||||
-define(SERVER, ?MODULE).
|
||||
|
||||
-record(state, {listen_socket, acceptor, service}).
|
||||
-record(handler, {module}).
|
||||
|
||||
%%====================================================================
|
||||
%% API
|
||||
@ -42,8 +41,7 @@ start_link(Port, Service, HandlerModule) when is_integer(Port), is_atom(HandlerM
|
||||
%% {stop, Reason}
|
||||
%% Description: Initiates the server
|
||||
%%--------------------------------------------------------------------
|
||||
init({Port, Service, HandlerModule}) ->
|
||||
Handler = #handler{module = HandlerModule},
|
||||
init({Port, Service, Handler}) ->
|
||||
{ok, Socket} = gen_tcp:listen(Port,
|
||||
[binary,
|
||||
{packet, 0},
|
||||
@ -109,7 +107,7 @@ code_change(_OldVsn, State, _Extra) ->
|
||||
%%--------------------------------------------------------------------
|
||||
|
||||
acceptor(ListenSocket, Service, Handler)
|
||||
when is_port(ListenSocket), is_record(Handler, handler) ->
|
||||
when is_port(ListenSocket), is_atom(Handler) ->
|
||||
{ok, Socket} = gen_tcp:accept(ListenSocket),
|
||||
error_logger:info_msg("Accepted client"),
|
||||
|
||||
|
@ -3,4 +3,4 @@
|
||||
-export([behaviour_info/1]).
|
||||
|
||||
behaviour_info(callbacks) ->
|
||||
[{service_info, 1}].
|
||||
[{function_info, 2}].
|
||||
|
Loading…
Reference in New Issue
Block a user