Rev 30 | Blame | Compare with Previous | Last modification | View Log | RSS feed
#!/usr/bin/perl## 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.#use strict;use lib '../gen-perl';use Thrift::Socket;use Thrift::Server;use tutorial::Calculator;package CalculatorHandler;use base qw(tutorial::CalculatorIf);sub new {my $classname = shift;my $self = {};return bless($self,$classname);}sub ping{print "ping()\n";}sub add{my($self, $n1, $n2) = @_;printf("add(%d,%d)\n", $n1, $n2);return $n1 + $n2;}sub calculate{my($self, $logid, $work) = @_;my $op = $work->{op};my $num1 = $work->{num1};my $num2 = $work->{num2};printf("calculate(%d, %d %d %d)\n", $logid, $num1, $num2, $op);my $val;if ($op == tutorial::Operation::ADD) {$val = $num1 + $num2;} elsif ($op == tutorial::Operation::SUBTRACT) {$val = $num1 - $num2;} elsif ($op == tutorial::Operation::MULTIPLY) {$val = $num1 * $num2;} elsif ($op == tutorial::Operation::DIVIDE) {if ($num2 == 0){my $x = new tutorial::InvalidOperation;$x->what($op);$x->why('Cannot divide by 0');die $x;}$val = $num1 / $num2;} else {my $x = new tutorial::InvalidOperation;$x->what($op);$x->why('Invalid operation');die $x;}my $log = new shared::SharedStruct;$log->key($logid);$log->value(int($val));$self->{log}->{$logid} = $log;return $val;}sub getStruct{my($self, $key) = @_;printf("getStruct(%d)\n", $key);return $self->{log}->{$key};}sub zip{my($self) = @_;print "zip()\n";}eval {my $handler = new CalculatorHandler;my $processor = new tutorial::CalculatorProcessor($handler);my $serversocket = new Thrift::ServerSocket(9090);my $forkingserver = new Thrift::ForkingServer($processor, $serversocket);print "Starting the server...\n";$forkingserver->serve();print "done.\n";}; if ($@) {if ($@ =~ m/TException/ and exists $@->{message}) {my $message = $@->{message};my $code = $@->{code};my $out = $code . ':' . $message;die $out;} else {die $@;}}