blob: c924589b10019e8899ae56c6a67f83fa219500e1 [file] [log] [blame]
Christopher Piro094823a2007-07-18 00:26:12 +00001-module(server).
2
3-include("thrift.hrl").
4-include("transport/tSocket.hrl").
5-include("protocol/tBinaryProtocol.hrl").
6
7-include("server/tErlServer.hrl").
8-include("transport/tErlAcceptor.hrl").
9
10-include("calculator.hrl").
11
12-export([start/0, stop/1, ping/0, add/2, calculate/2, getStruct/1, zip/0]).
13
14ping() ->
15 io:format("ping()~n",[]),
16 {ok, nil}.
17
18add(N1, N2) ->
19 io:format("add(~p,~p)~n",[N1,N2]),
20 {ok, N1+N2}.
21
22calculate(Logid, Work) ->
23 { Op, Num1, Num2 } = { Work#work.op, Work#work.num1, Work#work.num2 },
24 io:format("calculate(~p, {~p,~p,~p})~n", [Logid, Op, Num1, Num2]),
25 case Op of
26 ?ADD -> {ok, Num1 + Num2};
27 ?SUBTRACT -> {ok, Num1 - Num2};
28 ?MULTIPLY -> {ok, Num1 * Num2};
29 ?DIVIDE ->
30 if Num2 == 0 -> {error, #invalidOperation{what=Op, why="Cannot divide by 0"}};
31 true -> {ok, Num1 / Num2}
32 end;
33 true ->
34 {error, #invalidOperation{what=Op, why="Invalid operation"}}
35 end.
36
37getStruct(Key) ->
38 io:format("getStruct(~p)~n", [Key]),
39 {ok, get(Key)}.
40
41zip() ->
42 io:format("zip~n").
43
44%%
45
46start() ->
47 Handler = ?MODULE, % cpiro: or generated handler?
48 Processor = calculator,
49 Port = 9090,
50
51 TF = tBufferedTransportFactory:new(),
52 PF = tBinaryProtocolFactory:new(),
53
54 ServerTransport = tErlAcceptor,
55 ServerFlavor = tErlServer,
56
57 Server = oop:start_new(ServerFlavor, [Port, Handler, Processor, ServerTransport, TF, PF]),
58
59 ?R0(Server, effectful_serve),
60
61 Server.
62
63stop(Server) ->
64 ?C0(Server, stop),
65 ok.
66