]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Evergreen/staff_client/chrome/content/evergreen/util/ses.js
user_request is now optionally async'able. Aggressive async of patron select in...
[working/Evergreen.git] / Evergreen / staff_client / chrome / content / evergreen / util / ses.js
1 sdump('D_TRACE','Loading ses.js\n');
2
3 //////////////////////////////////////////////////////////////////////////////
4 // Sessions, Requests, Methods, Oh My
5
6 // These wrap Bill's RemoteRequest.js
7
8 function user_request(app,name,params,f) {
9         if (f) {
10
11                 user_async_request(app,name,params,f);
12                 return [];
13
14         } else {
15                 sdump('D_SES','=-=-=-=-= user_request("'+app+'","'+name+'",'+js2JSON(params)+')\n');
16                 var request = new RemoteRequest( app, name );
17                 for(var index in params) {
18                         request.addParam(params[index]);
19                 }
20                 request.send(true);
21                 var result = [];
22                 result.push( request.getResultObject() );
23                 sdump('D_SES_RESULT','=-=-= result = ' + js2JSON(result[0]) + '\n');
24                 return result;
25         }
26 }
27
28 function user_async_request(app,name,params,func) {
29         sdump('D_SES','=-=-=-=-= user_async_request("'+app+'","'+name+'",'+js2JSON(params)+',func)\n');
30         sdump('D_SES_FUNC','func = ' + func + '\n');
31         var request = new RemoteRequest( app, name );
32         for(var index in params) {
33                 request.addParam(params[index]);
34         }
35         request.setCompleteCallback(func);
36         request.send();
37 }
38
39 function sample_func(request) {
40         var result = [];
41         result.push( request.getResultObject() );
42         /* This callback would be called within the code for the Request object, so you would never see
43         a return value.  Instead, you should _do_ something with the data. */
44         return result;
45 }
46
47 //////////////////////////////////////////////////////////////////////////////
48 // The functions below were wrappers for the old jabber way of doing things
49
50 function handle_session(app) {
51         //if( ses == null || ! AppSession.transport_handle.connected() ) {
52         sdump('D_TRACE','Calling new AppSession : ' + timer_elapsed('cat') + '\n');
53                 ses = new AppSession( app );
54                 sdump('D_SES', 'after AppSession ses = ' + (ses.state) + '\n' );
55                 if( ! ses.connect() ) { 
56                         sdump('D_SES', 'after ses.connect ses = ' + js2JSON(ses.state) + '\n' );
57                         throw( "Connect timed out!" ); 
58                 }
59                 sdump('D_SES', 'after ses.connect ses = ' + js2JSON(ses.state) + '\n' );
60         sdump('D_TRACE','Finished new AppSession : ' + timer_elapsed('cat') + '\n');
61         //}
62 }
63
64 function handle_request(ses,meth) {
65
66
67         sdump('D_TRACE','Entering handle_request : ' + timer_elapsed('cat') + '\n');
68         sdump('D_SES','Calling new AppRequest : ' + timer_elapsed('cat') + '\n');
69
70         var req = new AppRequest( ses, meth );
71
72         sdump('D_SES','Finished new AppRequest : ' + timer_elapsed('cat') + '\n');
73         sdump('D_SES','Calling new req.make_request() : ' + timer_elapsed('cat') + '\n');
74
75         req.make_request();
76
77         sdump('D_SES', 'after req.make_request ses = ' + js2JSON(ses.state) + '\n' );
78         sdump('D_SES','Finished new req.make_request() : ' + timer_elapsed('cat') + '\n');
79
80         var result = new Array(); var resp;
81
82         sdump('D_SES','Looping on req.recv and resp.getContent(): ' + timer_elapsed('cat') + '\n');
83
84         while (resp = req.recv( 30000 ) ) {
85                 sdump('D_SES', '\tafter req.recv ses = ' + js2JSON(ses.state) + ' : req.is_complete = ' + req.is_complete + '\n' );
86                 var r = resp.getContent();
87                 if (r != 'keepalive') {
88                         result.push( r );
89                 }
90         }
91
92         sdump('D_SES','Finished with req.recv and resp.getContent(): ' + timer_elapsed('cat') + '\n');
93
94         if (result.length == 0) {
95                 if ( req.is_complete ) {
96                         result.push("NO RESPONSE, REQUEST COMPLETE");
97                         sdump('D_SES',"NO RESPONSE, REQUEST COMPLETE\n");
98                 } else {
99                         result.push("NO RESPONSE, REQUEST TIMEOUT");
100                         sdump('D_SES',"NO RESPONSE, REQUEST TIMEOUT\n");
101                 }
102         }
103         req.finish();
104         sdump('D_SES', 'after req.finish() ses = ' + js2JSON(ses.state) + '\n' );
105         sdump('D_SES','Exiting handle_request : ' + timer_elapsed('cat') + '\n');
106         return result;  
107 }
108
109 function _user_request(app,name,params) {
110
111         sdump('D_SES','Entering user_request : ' + timer_elapsed('cat') + '\n');
112         sdump('D_SES','app='+app+' name='+name+'\n');
113         try {
114
115                 handle_session(app);
116
117                 var meth;
118                 if (name) {
119                         meth = new oilsMethod( name, params );
120                 } else {
121                         throw('No method name to execute.');
122                 }
123
124                 var result = handle_request(ses,meth);
125                 
126                 if (ses) { 
127                         sdump('D_SES','ses.disconnect\n'); 
128                         ses.disconnect(); 
129                         sdump('D_SES', 'after ses.disconnect() ses = ' + js2JSON(ses.state) + '\n' );
130                         ses.destroy();
131                         sdump('D_SES', 'after ses.destroy() ses = ' + js2JSON(ses.state) + '\n' );
132                 }
133
134                 sdump('D_SES','Exiting user_request : ' + timer_elapsed('cat') + '\n');
135                 return result;
136
137         } catch( E ) { 
138                 sdump('D_SES','Exiting user_request : ' + timer_elapsed('cat') + '\n');
139                 alert( pretty_print( js2JSON(E) ) ); 
140                 return null;
141         }
142
143 }
144