implemented enough of the stack/session logic to make stateless requests and receive...
[OpenSRF.git] / src / java / org / opensrf / Session.java
index 2eb9aa9..01f1d21 100644 (file)
@@ -3,6 +3,7 @@ import org.opensrf.util.JSONWriter;
 import org.opensrf.net.xmpp.*;
 import java.util.Map;
 import java.util.HashMap;
 import org.opensrf.net.xmpp.*;
 import java.util.Map;
 import java.util.HashMap;
+import java.util.Arrays;
 
 public abstract class Session {
 
 
 public abstract class Session {
 
@@ -28,7 +29,7 @@ public abstract class Session {
      * In other words, each session has a unique thread, and all messages 
      * in that session will carry this thread around as an indicator.
      */
      * In other words, each session has a unique thread, and all messages 
      * in that session will carry this thread around as an indicator.
      */
-    protected String thread;
+    private String thread;
 
     public Session() {
         connectState = ConnectState.DISCONNECTED;
 
     public Session() {
         connectState = ConnectState.DISCONNECTED;
@@ -37,20 +38,20 @@ public abstract class Session {
     /**
      * Sends a Message to our remoteNode.
      */
     /**
      * Sends a Message to our remoteNode.
      */
-    public void send(Message omsg) throws XMPPException {
+    public void send(Message omsg) throws SessionException {
 
         /** construct the XMPP message */
         XMPPMessage xmsg = new XMPPMessage();
         xmsg.setTo(remoteNode);
         xmsg.setThread(thread);
 
         /** construct the XMPP message */
         XMPPMessage xmsg = new XMPPMessage();
         xmsg.setTo(remoteNode);
         xmsg.setThread(thread);
-        xmsg.setBody(new JSONWriter(omsg).write());
+        xmsg.setBody(new JSONWriter(Arrays.asList(new Message[] {omsg})).write());
         XMPPSession ses = XMPPSession.getGlobalSession();
 
         try {
             XMPPSession.getGlobalSession().send(xmsg);
         } catch(XMPPException e) {
         XMPPSession ses = XMPPSession.getGlobalSession();
 
         try {
             XMPPSession.getGlobalSession().send(xmsg);
         } catch(XMPPException e) {
-            /* XXX log.. what else? */
             connectState = ConnectState.DISCONNECTED;
             connectState = ConnectState.DISCONNECTED;
+            throw new SessionException("Error sending message to " + remoteNode, e);
         }
     }
 
         }
     }
 
@@ -59,12 +60,12 @@ public abstract class Session {
      * all received messages to the stack for processing
      * @param millis The number of milliseconds to wait for a message to arrive
      */
      * all received messages to the stack for processing
      * @param millis The number of milliseconds to wait for a message to arrive
      */
-    public static void waitForMessage(long millis) {
+    public static void waitForMessage(long millis) throws SessionException {
         try {
             Stack.processXMPPMessage(
                 XMPPSession.getGlobalSession().recv(millis));
         } catch(XMPPException e) {
         try {
             Stack.processXMPPMessage(
                 XMPPSession.getGlobalSession().recv(millis));
         } catch(XMPPException e) {
-            /* XXX log.. what else? */
+            throw new SessionException("Error waiting for message", e);
         }
     }
 
         }
     }
 
@@ -94,4 +95,37 @@ public abstract class Session {
     public String getRemoteNode() {
         return remoteNode;
     }
     public String getRemoteNode() {
         return remoteNode;
     }
+
+
+    /**
+     * Get thread.
+     * @return thread as String.
+     */
+    public String getThread() {
+        return thread;
+    }
+    
+    /**
+     * Set thread.
+     * @param thread the value to set.
+     */
+    public void setThread(String thread) {
+        this.thread = thread;
+    }
+    
+    /**
+     * Get connectState.
+     * @return connectState as ConnectState.
+     */
+    public ConnectState getConnectState() {
+        return connectState;
+    }
+    
+    /**
+     * Set connectState.
+     * @param connectState the value to set.
+     */
+    public void setConnectState(ConnectState connectState) {
+        this.connectState = connectState;
+    }
 }
 }