89649a5de99714f48abecf4ea45666690be995ea
[OpenSRF.git] / src / java / org / opensrf / Stack.java
1 package org.opensrf;
2 import org.opensrf.net.xmpp.XMPPMessage;
3 import org.opensrf.util.*;
4 import java.util.Date;
5 import java.util.List;
6 import java.util.Iterator;
7
8
9 public class Stack {
10
11     public static void processXMPPMessage(XMPPMessage msg) {
12
13         if(msg == null) return;
14
15         /** fetch this session from the cache */
16         Session ses = Session.findCachedSession(msg.getThread());
17
18         if(ses == null) {
19             /** inbound client request, create a new server session */
20             return;
21         }
22
23         /** parse the JSON message body, which should result in a list of OpenSRF messages */
24         List msgList; 
25
26         try {
27             msgList = new JSONReader(msg.getBody()).readArray();
28         } catch(JSONException e) {
29             /** XXX LOG error */
30             e.printStackTrace();
31             return;
32         }
33
34         Iterator itr = msgList.iterator();
35
36         OSRFObject obj = null;
37         long start = new Date().getTime();
38
39         /** cycle through the messages and push them up the stack */
40         while(itr.hasNext()) {
41
42             /** Construct a Message object from the parsed generic OSRFObject */
43             obj = (OSRFObject) itr.next();
44
45             processOSRFMessage(
46                 ses, 
47                 new Message(
48                     obj.getInt("threadTrace"),
49                     obj.getString("type"),
50                     obj.get("payload")
51                 )
52             );
53         }
54
55         /** LOG the duration */
56     }
57
58     private static void processOSRFMessage(Session ses, Message msg) {
59         if( ses instanceof ClientSession ) 
60             processResponse((ClientSession) ses, msg);
61         else
62             processRequest((ServerSession) ses, msg);
63     }
64
65     /** 
66      * Process a server response
67      */
68     private static void processResponse(ClientSession session, Message msg) {
69         String type = msg.getType();
70         if(msg.RESULT.equals(type)) {
71             session.pushResponse(msg);
72             return;
73         }
74
75         if(msg.STATUS.equals(type)) {
76
77             OSRFObject obj = (OSRFObject) msg.getPayload();
78             Status stat = new Status(obj.getString("status"), obj.getInt("statusCode"));
79             int statusCode = stat.getStatusCode();
80             String status = stat.getStatus();
81
82             if(statusCode == stat.COMPLETE) {
83                 session.setRequestComplete(msg.getId());
84             }
85         }
86     }
87
88     /**
89      * Process a client request
90      */
91     private static void processRequest(ServerSession session, Message msg) {
92     }
93 }