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