diff options
author | T Jake Luciani <jake@apache.org> | 2009-11-12 03:01:33 +0000 |
---|---|---|
committer | T Jake Luciani <jake@apache.org> | 2009-11-12 03:01:33 +0000 |
commit | 0c5c234b58802c36013b0d69b237ec3f098ebfd5 (patch) | |
tree | 0e4b315ae9259b4ec5e6bf669e9a2f8052f77cc8 /tutorial/perl | |
parent | f2b8f750b3adf3db50fa38af5462e758a38cdc65 (diff) | |
download | thrift-0c5c234b58802c36013b0d69b237ec3f098ebfd5.tar.gz |
THRIFT-619: Perl server and example
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@835206 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'tutorial/perl')
-rw-r--r-- | tutorial/perl/PerlServer.pl | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/tutorial/perl/PerlServer.pl b/tutorial/perl/PerlServer.pl new file mode 100644 index 000000000..a40ec69b9 --- /dev/null +++ b/tutorial/perl/PerlServer.pl @@ -0,0 +1,124 @@ +#!/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 $@; + } +} + |