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