|  | #!/usr/bin/env ruby | 
|  |  | 
|  | # | 
|  | # Licensed to the Apache Software Foundation (ASF) under one | 
|  | # or more contributor license agreements. See the NOTICE file | 
|  | # distributed with this work for additional information | 
|  | # regarding copyright ownership. The ASF licenses this file | 
|  | # to you under the Apache License, Version 2.0 (the | 
|  | # "License"); you may not use this file except in compliance | 
|  | # with the License. You may obtain a copy of the License at | 
|  | # | 
|  | #   http://www.apache.org/licenses/LICENSE-2.0 | 
|  | # | 
|  | # Unless required by applicable law or agreed to in writing, | 
|  | # software distributed under the License is distributed on an | 
|  | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | 
|  | # KIND, either express or implied. See the License for the | 
|  | # specific language governing permissions and limitations | 
|  | # under the License. | 
|  | # | 
|  |  | 
|  | $:.push('../gen-rb') | 
|  | $:.unshift '../../lib/rb/lib' | 
|  |  | 
|  | require 'thrift' | 
|  |  | 
|  | require 'calculator' | 
|  | require 'shared_types' | 
|  |  | 
|  | class CalculatorHandler | 
|  | def initialize() | 
|  | @log = {} | 
|  | end | 
|  |  | 
|  | def ping() | 
|  | puts "ping()" | 
|  | end | 
|  |  | 
|  | def add(n1, n2) | 
|  | print "add(", n1, ",", n2, ")\n" | 
|  | return n1 + n2 | 
|  | end | 
|  |  | 
|  | def calculate(logid, work) | 
|  | print "calculate(", logid, ", {", work.op, ",", work.num1, ",", work.num2,"})\n" | 
|  | if work.op == Operation::ADD | 
|  | val = work.num1 + work.num2 | 
|  | elsif work.op == Operation::SUBTRACT | 
|  | val = work.num1 - work.num2 | 
|  | elsif work.op == Operation::MULTIPLY | 
|  | val = work.num1 * work.num2 | 
|  | elsif work.op == Operation::DIVIDE | 
|  | if work.num2 == 0 | 
|  | x = InvalidOperation.new() | 
|  | x.what = work.op | 
|  | x.why = "Cannot divide by 0" | 
|  | raise x | 
|  | end | 
|  | val = work.num1 / work.num2 | 
|  | else | 
|  | x = InvalidOperation.new() | 
|  | x.what = work.op | 
|  | x.why = "Invalid operation" | 
|  | raise x | 
|  | end | 
|  |  | 
|  | entry = SharedStruct.new() | 
|  | entry.key = logid | 
|  | entry.value = "#{val}" | 
|  | @log[logid] = entry | 
|  |  | 
|  | return val | 
|  |  | 
|  | end | 
|  |  | 
|  | def getStruct(key) | 
|  | print "getStruct(", key, ")\n" | 
|  | return @log[key] | 
|  | end | 
|  |  | 
|  | def zip() | 
|  | print "zip\n" | 
|  | end | 
|  |  | 
|  | end | 
|  |  | 
|  | handler = CalculatorHandler.new() | 
|  | processor = Calculator::Processor.new(handler) | 
|  | transport = Thrift::ServerSocket.new(9090) | 
|  | transportFactory = Thrift::BufferedTransportFactory.new() | 
|  | server = Thrift::SimpleServer.new(processor, transport, transportFactory) | 
|  |  | 
|  | puts "Starting the server..." | 
|  | server.serve() | 
|  | puts "done." |