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