summaryrefslogtreecommitdiff
path: root/tutorial/perl
diff options
context:
space:
mode:
authorT Jake Luciani <jake@apache.org>2009-11-12 03:01:33 +0000
committerT Jake Luciani <jake@apache.org>2009-11-12 03:01:33 +0000
commit0c5c234b58802c36013b0d69b237ec3f098ebfd5 (patch)
tree0e4b315ae9259b4ec5e6bf669e9a2f8052f77cc8 /tutorial/perl
parentf2b8f750b3adf3db50fa38af5462e758a38cdc65 (diff)
downloadthrift-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.pl124
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 $@;
+ }
+}
+