6db285e43838bb6f891c1514abdebfcd9a22f619
[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         if(msg.RESULT.equals(msg.getType())) {
70             session.pushResponse(msg);
71             return;
72         }
73     }
74
75     /**
76      * Process a client request
77      */
78     private static void processRequest(ServerSession session, Message msg) {
79     }
80 }