#!/usr/bin/env ruby # frozen_string_literal: true # # 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" 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.whatOp = work.op x.why = "Cannot divide by 0" raise x end val = work.num1 / work.num2 else x = InvalidOperation.new x.whatOp = work.op x.why = "Invalid operation" raise x end entry = SharedStruct.new entry.key = logid entry.value = val.to_s @log[logid] = entry val end def getStruct(key) print "getStruct(", key, ")\n" @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."