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
diff --git a/lib/alterl/src/thrift_processor.erl b/lib/alterl/src/thrift_processor.erl
index fd6972d..546bcfe 100644
--- a/lib/alterl/src/thrift_processor.erl
+++ b/lib/alterl/src/thrift_processor.erl
@@ -36,35 +36,57 @@
             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.