Initial revision
[OpenSRF.git] / src / perlmods / OpenSRF / Application / Demo / Math.pm
1 package OpenSRF::Application::Demo::Math;
2 use base qw/OpenSRF::Application/;
3 use OpenSRF::Application;
4 use OpenSRF::Utils::Logger qw/:level/;
5 use OpenSRF::DomainObject::oilsResponse;
6 use OpenSRF::EX qw/:try/;
7 use strict;
8 use warnings;
9
10 sub DESTROY{}
11
12 our $log = 'OpenSRF::Utils::Logger';
13
14 #sub method_lookup {
15 #
16 #       my( $class, $method_name, $method_proto ) = @_;
17 #
18 #       if( $method_name eq "add" ) {
19 #               return \&add;
20 #       }
21
22 #       if( $method_name eq "sub" ) {
23 #               return \⊂
24 #       }
25 #
26 #       if( $method_name eq "mult" ) {
27 #               return \&mult;
28 #       }
29 #
30 #       if( $method_name eq "div" ) {
31 #               return \÷
32 #       }
33
34 #       return undef;
35 #
36 #}
37
38 sub send_request {
39
40         my $method_name = shift;
41         my @params = @_;
42
43         $log->debug( "Creating a client environment", DEBUG );
44         my $session = OpenSRF::AppSession->create( 
45                         "dbmath", sysname => 'math', secret => '12345' );
46
47         $log->debug( "Sending request to math server", INTERNAL );
48         
49         my $method = OpenSRF::DomainObject::oilsMethod->new( method => $method_name );
50         
51         $method->params( @params );
52         
53
54         my $req; 
55         my $resp;
56                 
57
58         try {
59
60                 for my $nn (0..1) {
61                         my $vv = $session->connect();
62                         if($vv) { last; }
63                         if( $nn and !$vv ) {
64                                 throw OpenSRF::EX::CRITICAL ("DBMath connect attempt timed out");
65                         }
66                 }
67
68                 $req = $session->request( $method );
69                 $resp = $req->recv(10); 
70
71         } catch OpenSRF::DomainObject::oilsAuthException with { 
72                 my $e = shift;
73                 $e->throw();
74         }; 
75
76         if ( defined($resp) and $resp and $resp->class->isa('OpenSRF::DomainObject::oilsResult') ){ 
77
78                 $log->debug( "Math server returned " . $resp->toString(1), INTERNAL );
79                 $req->finish;
80                 $session->finish;
81                 return $resp;
82
83         } else {
84
85                 if( $resp ) { $log->debug( "Math received \n".$resp->toString(), ERROR ); }
86                 else{ $log->debug( "Math received empty value", ERROR ); }
87                 $req->finish;
88                 $session->finish;
89                 throw OpenSRF::EX::ERROR ("Did not receive expected data from MathDB");
90
91         }
92 }
93
94
95 sub add_1_action { 1 };
96 sub add_1 {
97
98         my $client = shift;
99         my @args = @_;
100         return send_request( "add", @args );
101 }
102
103 sub sub_1_action { 1 };
104 sub sub_1 {
105         my $client = shift;
106         my @args = @_;
107         return send_request( "sub", @args );
108 }
109
110 sub mult_1_action { 1 };
111 sub mult_1 {
112         my $client = shift;
113         my @args = @_;
114         return send_request( "mult", @args );
115 }
116
117 sub div_1_action { 1 };
118 sub div_1 {
119         my $client = shift;
120         my @args = @_;
121         return send_request( "div", @args );
122 }
123
124
125 1;