1#!/usr/bin/env ruby
2
3#
4# Licensed to the Apache Software Foundation (ASF) under one
5# or more contributor license agreements. See the NOTICE file
6# distributed with this work for additional information
7# regarding copyright ownership. The ASF licenses this file
8# to you under the Apache License, Version 2.0 (the
9# "License"); you may not use this file except in compliance
10# with the License. You may obtain a copy of the License at
11#
12#   http://www.apache.org/licenses/LICENSE-2.0
13#
14# Unless required by applicable law or agreed to in writing,
15# software distributed under the License is distributed on an
16# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17# KIND, either express or implied. See the License for the
18# specific language governing permissions and limitations
19# under the License.
20#
21
22$:.push('gen-rb')
23$:.unshift '../../lib/rb/lib'
24
25require 'thrift'
26
27require 'calculator'
28require 'shared_types'
29
30class CalculatorHandler
31  def initialize()
32    @log = {}
33  end
34
35  def ping()
36    puts "ping()"
37  end
38
39  def add(n1, n2)
40    print "add(", n1, ",", n2, ")\n"
41    return n1 + n2
42  end
43
44  def calculate(logid, work)
45    print "calculate(", logid, ", {", work.op, ",", work.num1, ",", work.num2,"})\n"
46    if work.op == Operation::ADD
47      val = work.num1 + work.num2
48    elsif work.op == Operation::SUBTRACT
49      val = work.num1 - work.num2
50    elsif work.op == Operation::MULTIPLY
51      val = work.num1 * work.num2
52    elsif work.op == Operation::DIVIDE
53      if work.num2 == 0
54        x = InvalidOperation.new()
55        x.whatOp = work.op
56        x.why = "Cannot divide by 0"
57        raise x
58      end
59      val = work.num1 / work.num2
60    else
61      x = InvalidOperation.new()
62      x.whatOp = work.op
63      x.why = "Invalid operation"
64      raise x
65    end
66
67    entry = SharedStruct.new()
68    entry.key = logid
69    entry.value = "#{val}"
70    @log[logid] = entry
71
72    return val
73
74  end
75
76  def getStruct(key)
77    print "getStruct(", key, ")\n"
78    return @log[key]
79  end
80
81  def zip()
82    print "zip\n"
83  end
84
85end
86
87handler = CalculatorHandler.new()
88processor = Calculator::Processor.new(handler)
89transport = Thrift::ServerSocket.new(9090)
90transportFactory = Thrift::BufferedTransportFactory.new()
91server = Thrift::SimpleServer.new(processor, transport, transportFactory)
92
93puts "Starting the server..."
94server.serve()
95puts "done."
96