You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ha...@apache.org on 2002/02/27 15:47:36 UTC

cvs commit: jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/test BeepClientTest.java BeepServerTest.java

hammant     02/02/27 06:47:36

  Modified:    altrmi   build.xml tests2.xml
  Added:       altrmi/lib beepcore.jar
               altrmi/src/java/org/apache/commons/altrmi/client/impl/beep
                        BEEPHostContext.java BEEPInvocationHandler.java
               altrmi/src/java/org/apache/commons/altrmi/server/impl/beep
                        AltrmiBEEPServerProfile.java
                        BEEPServerConnection.java CompleteBEEPServer.java
                        ServerBEEPReadWriter.java
               altrmi/src/java/org/apache/commons/altrmi/test
                        BeepClientTest.java BeepServerTest.java
  Log:
  prototype BEEP usage
  
  Revision  Changes    Path
  1.8       +4 -1      jakarta-commons-sandbox/altrmi/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/altrmi/build.xml,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- build.xml	1 Feb 2002 00:17:00 -0000	1.7
  +++ build.xml	27 Feb 2002 14:47:36 -0000	1.8
  @@ -3,7 +3,7 @@
   
   <!--
           "Alternative (to) RMI" component of the Jakarta Commons Subproject
  -        $Id: build.xml,v 1.7 2002/02/01 00:17:00 hammant Exp $
  +        $Id: build.xml,v 1.8 2002/02/27 14:47:36 hammant Exp $
   -->
   
   
  @@ -81,6 +81,9 @@
     <path id="compile.classpath">
       <pathelement location="${build.home}/classes"/>
       <pathelement location="${commons-collections.jar}"/>
  +    <fileset dir="lib">
  +      	<include name="*.jar" />
  +    </fileset>
     </path>
   
   <!-- ========== Test Execution Defaults =================================== -->
  
  
  
  1.2       +40 -5     jakarta-commons-sandbox/altrmi/tests2.xml
  
  Index: tests2.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/altrmi/tests2.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- tests2.xml	18 Feb 2002 21:40:28 -0000	1.1
  +++ tests2.xml	27 Feb 2002 14:47:36 -0000	1.2
  @@ -3,7 +3,7 @@
   
   <!--
           "Alt (to) RMI" component of the Jakarta Commons Subproject
  -        $Id: tests2.xml,v 1.1 2002/02/18 21:40:28 hammant Exp $
  +        $Id: tests2.xml,v 1.2 2002/02/27 14:47:36 hammant Exp $
   -->
   
   
  @@ -48,7 +48,7 @@
     
     <path id="testB1.classpath">
       <pathelement location="${build.home}/classes"/>
  -    <pathelement location="${build.home}/classes3"/>
  +    <pathelement location="${build.home}/classes2"/>
     </path>    
       
     <path id="testB2.classpath">
  @@ -57,9 +57,22 @@
     
     <path id="testC1.classpath">
       <pathelement location="${build.home}/classes"/>
  -    <pathelement location="D:/jdk1.4/lib/tools.jar"/>
  +    <pathelement location="${build.home}/classes2"/>
  +    <!-- beep libraries -->
  +    <fileset dir="lib">
  +      	<include name="*.jar" />
  +    </fileset>
  +
     </path>
  -  
  +  <path id="testC2.classpath">
  +    <pathelement location="${build.home}/classes"/>
  +    <!-- beep libraries -->
  +    <fileset dir="lib">
  +      	<include name="*.jar" />
  +    </fileset>
  +
  +  </path>
  +
     
     
     
  @@ -110,7 +123,14 @@
           <pathelement location="${build.home}/classes"/>
         </classpath>
       </altrmiinterfaces>          
  -  
  +   <altrmiinterfaces genname="Hello" srcgendir="${build.home}/genjava" 
  +        classgendir="${build.home}/classes2" 
  +        classesorinterfaces="org.apache.commons.altrmi.test.TestInterface" 
  +        additionalfacades="org.apache.commons.altrmi.test.TestInterface2">
  +      <classpath>
  +        <pathelement location="${build.home}/classes"/>
  +      </classpath>
  +    </altrmiinterfaces>        
     </target>
     
     <target name="procon-serve">
  @@ -128,5 +148,20 @@
         <arg value="ObjectStream"/>
       </java>      
     </target>  
  +
  +  <target name="beep-serve" >
  +    <java classname="org.apache.commons.altrmi.test.BeepServerTest" fork="true">
  +      <classpath refid="testC1.classpath"/>
  +      <arg value="S"/>
  +    </java>      
  +  </target>  
  +
  + <target name="beep-client" depends="generate">
  +    <java classname="org.apache.commons.altrmi.test.BeepClientTest" fork="true">
  +      <classpath refid="testC2.classpath"/>
  +      <arg value="S"/>
  +    </java>      
  +  </target>  
  +
   
   </project>
  
  
  
  1.1                  jakarta-commons-sandbox/altrmi/lib/beepcore.jar
  
  	<<Binary file>>
  
  
  1.1                  jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/client/impl/beep/BEEPHostContext.java
  
  Index: BEEPHostContext.java
  ===================================================================
  
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.commons.altrmi.client.impl.beep;
  
  
  
  import org.apache.commons.altrmi.client.impl.AbstractHostContext;
  import org.apache.commons.altrmi.common.AltrmiConnectionException;
  
  import java.net.Socket;
  
  
  /**
   * Class BEEPHostContext 
   *
   *
   * @author Vinay Chandrasekharan<a href="mailto:vinay_chandran@users.surceforge.net">vinay_chandran@users.surceforge.net</a>
   * @version $Revision: 1.1 $
   */
  public class BEEPHostContext extends AbstractHostContext 
  {
  
      /**
       * Constructor BEEPHostContext 
       *
       *
       * @param host
       * @param port
       *
       * @throws AltrmiConnectionException
       *
       */
      public BEEPHostContext(String host, int port) throws AltrmiConnectionException 
  	{
          super(new BEEPInvocationHandler(host, port));
      }
  
    
  }
  
  
  
  1.1                  jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/client/impl/beep/BEEPInvocationHandler.java
  
  Index: BEEPInvocationHandler.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.commons.altrmi.client.impl.beep;
  
  import java.io.*;
  
  
  import org.apache.commons.altrmi.common.AltrmiConnectionException;
  import org.apache.commons.altrmi.common.AltrmiRequest;
  import org.apache.commons.altrmi.common.AltrmiReply;
  import org.apache.commons.altrmi.common.SerializationHelper;
  import org.apache.commons.altrmi.client.impl.stream.StreamInvocationHandler;
  import org.apache.commons.altrmi.client.impl.stream.ClientStreamReadWriter;
  
  
  import org.beepcore.beep.core.BEEPError;
  import org.beepcore.beep.core.BEEPException;
  import org.beepcore.beep.core.BEEPInterruptedException;
  import org.beepcore.beep.core.ByteDataStream;
  import org.beepcore.beep.core.Channel;
  import org.beepcore.beep.core.MessageListener;
  import org.beepcore.beep.core.Message;
  import org.beepcore.beep.core.DataStream;
  import org.beepcore.beep.core.ProfileRegistry;
  import org.beepcore.beep.core.Session;
  import org.beepcore.beep.core.StringDataStream;
  import org.beepcore.beep.core.ReplyListener;
  import org.beepcore.beep.lib.NullReplyListener;
  import org.beepcore.beep.lib.MessageQueue;
  import org.beepcore.beep.profile.ProfileConfiguration;
  import org.beepcore.beep.transport.tcp.AutomatedTCPSessionCreator;
  
  
  
  
  /**
   * Class BEEPInvocationHandler
   *
   *
   * @author Vinay Chandrasekharan<a href="mailto:vinay_chandran@users.surceforge.net">vinay_chandran@users.surceforge.net</a>
   * @version $Revision: 1.1 $
   */
  public class BEEPInvocationHandler extends StreamInvocationHandler 
  {
  	public static final String ALTRMI_SERVER_URI="http://jakarta.apache.org/commons/profiles/AltrmiServer";
      private String mHost;
      private int mPort;
  	private Session session;
  	private Channel channel;
  
      /**
       * Constructor BEEPInvocationHandler
       *
       *
       * @param host
       * @param port
       *
       * @throws AltrmiConnectionException
       *
       */
      public BEEPInvocationHandler(String host, int port)
              throws AltrmiConnectionException 
  	{
          mHost = host;
          mPort = port;
          try 
  		{
  			//TODO:
  			// Change here if the client needs to enable callbacks
  			// Client will have a profiles too advertise
              session = AutomatedTCPSessionCreator.initiate(mHost, mPort,new ProfileRegistry());
          } 
  		catch (BEEPException e) 
  		{
          	e.printStackTrace();
  			throw new AltrmiConnectionException("BEEPInvocationHandler construction failed"+e.getMessage());
          }
  		
          
          try 
  		{
              channel = session.startChannel(ALTRMI_SERVER_URI);
          } 
  		catch (BEEPError e) 
  		{
  			String errMsg="";
  			
              if (e.getCode() == 550) 
  				errMsg="BEEPInvocationHandler: Error the listener peer does not support ALTRMIServerProfile";
  			else 
  				errMsg="BEEPInvocationHandler: Error while communicating with the peer code["+
  						e.getCode() + "] msg[ " + e.getMessage() + "]";
              System.err.println(errMsg);						
  			throw new AltrmiConnectionException(errMsg);
          } 
  		catch (BEEPException e) 
  		{
  			String errMsg="BEEPInvocationHandler: Error starting channel (" +
                                 e.getMessage() + ")";
              System.err.println(errMsg);
  			throw new AltrmiConnectionException(errMsg);
          }
  		
  
  
  		ClientBEEPReadWriter  beepReadWriter =(ClientBEEPReadWriter )createClientStreamReadWriter();
  		channel.setDataListener(beepReadWriter.mQueue);
  		setObjectReadWriter(beepReadWriter);
  		
      }
  
      public BEEPInvocationHandler(String host, int port,String profileClassName,String profileURI)
              throws AltrmiConnectionException 
      {
      	//TODO: Client can decide the profiles and thus the decide on the way
  		// callbacks must be handled ...Is this flexibility needed ??
  		this(host,port);	//change
      }
  
      /**
       * Method tryReconnect
       *
       *
       * @return connected or not.
       */
      protected boolean tryReconnect() 
  	{
  		return false;
      }
  
      protected ClientStreamReadWriter createClientStreamReadWriter()
      {
  		return new ClientBEEPReadWriter (channel);
      }
  	
  	
  	/**
  	*  Class ClientBEEPReadWriter :
  	*	Write REQUESTs and reads the RESPONSE back from the server.
  	*/
  	private class ClientBEEPReadWriter extends ClientStreamReadWriter  //implements MessageListener
  	{
  	
  		private Channel channel;
  		private ReplyListener  replyListener;
  		Object lock = new Object();
  	    private boolean m_isLocked=true;
  		byte[] byteArray;
  		MessageQueue mQueue;
  		ClientBEEPReadWriter (Channel channel)
  		{
  			this.channel=channel;
  			replyListener= NullReplyListener.getListener();
  			mQueue=new MessageQueue();
  		}
  		
  	    protected synchronized AltrmiReply postRequest(AltrmiRequest altrmiRequest)
              throws IOException, ClassNotFoundException 
  		{
  			writeRequest(altrmiRequest);
  	        return readReply();
  		}
  
  	    private void writeRequest(AltrmiRequest altrmiRequest) throws IOException 
  		{
  
  	        byte[] aBytes = SerializationHelper.getBytesFromInstance(altrmiRequest);
  			try
  			{
  		        channel.sendMSG(new ByteDataStream(aBytes),replyListener);
  			}
  			catch(BEEPException be)
  			{
  				throw new IOException(be.getMessage());
  			}
  			
  	    }
  
  	    private AltrmiReply readReply() throws IOException, ClassNotFoundException 
  		{
  			try
  			{
  				 receive();
  				 return (AltrmiReply) SerializationHelper.getInstanceFromBytes(byteArray);
  			}
  			catch(Exception e)
  			{
  			e.printStackTrace();
  			throw new IOException(e.getMessage());
  		
  			}
  		
  	    }
  		
  		
  
  	public void receive() throws BEEPError
      {
  		try
  		{
  			Message message=mQueue.getNextMessage();
  			message.sendRPY(new StringDataStream("OK"));		
  			DataStream ds =  message.getDataStream();
  			InputStream is =  ds.getInputStream();
  			byte[] buf = new byte[4096];
  		    ByteArrayOutputStream data = new ByteArrayOutputStream();
  			
  			
  			while (true) 
  			{
  		          try 
  				  {
  		              int n = is.read(buf);
  		              if (n == -1)
  		                  break;
  		              data.write(buf, 0, n);
  		          } 
  				  catch (IOException e) 
  				  {
  				  	  e.printStackTrace();
  		              message.getChannel().getSession().terminate(e.getMessage());
  		              return;
  		          }
  			}
  			byteArray=data.toByteArray();
  		}
  		catch(Exception e)
  		{
  			e.printStackTrace();
  			throw new BEEPError(BEEPError.CODE_GENERAL_SYNTAX_ERROR,e.getMessage());
  
  		}
  	}
  } //end of inner class
  
  
  
  
  }
  
  
  
  1.1                  jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/server/impl/beep/AltrmiBEEPServerProfile.java
  
  Index: AltrmiBEEPServerProfile.java
  ===================================================================
  
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.commons.altrmi.server.impl.beep;
  
  import org.apache.commons.altrmi.server.impl.AbstractServer;
  
  import org.beepcore.beep.core.BEEPError;
  import org.beepcore.beep.core.BEEPException;
  import org.beepcore.beep.core.Channel;
  import org.beepcore.beep.core.CloseChannelException;
  import org.beepcore.beep.core.StartChannelListener;
  import org.beepcore.beep.core.Message;
  import org.beepcore.beep.core.MessageListener;
  import org.beepcore.beep.core.Session;
  import org.beepcore.beep.core.StartChannelException;
  import org.beepcore.beep.core.StartChannelListener;
  import org.beepcore.beep.lib.MessageQueue;
  import org.beepcore.beep.profile.Profile;
  import org.beepcore.beep.profile.ProfileConfiguration;
  
  import java.util.Vector;
  
  /**
   * Class AltrmiBEEPProfile
   *
   *
   * @author Vinay Chandrasekharan
   * @version $Revision: 1.1 $
   */
  public class AltrmiBEEPServerProfile
  	implements Profile, StartChannelListener
  {
  	private AbstractServer abstractServer;
  	public static final String ALTRMI_SERVER_URI="http://jakarta.apache.org/commons/profiles/AltrmiServer";
  
  	public void setAbstractServer(AbstractServer abstractServer)
  	{
  		this.abstractServer=abstractServer;
  	}
  	public StartChannelListener init(String uri, ProfileConfiguration config)
          throws BEEPException
      {
          return this;
      }
  
      public void startChannel(Channel channel, String encoding, String data)
              throws StartChannelException
      {
  		ServerBEEPReadWriter beepReadWriter = new ServerBEEPReadWriter(channel);
  		BEEPServerConnection beepServerConnectoin =  new BEEPServerConnection(abstractServer,beepReadWriter);
  	    channel.setDataListener(beepReadWriter.mQueue);	
  		//spawning BEEP channel
  		Thread beepConnectionThread= new Thread(beepServerConnectoin);
  		beepConnectionThread.start();
      }
  
      public void closeChannel(Channel channel) throws CloseChannelException
      {
          channel.setDataListener(null);
          channel.setAppData(null);
      }
  
      public boolean advertiseProfile(Session session)
      {
          return true;
      }
  
     
  	
  
  }
  
  
  
  1.1                  jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/server/impl/beep/BEEPServerConnection.java
  
  Index: BEEPServerConnection.java
  ===================================================================
  
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.commons.altrmi.server.impl.beep;
  
  
  
  import org.apache.commons.altrmi.common.AltrmiRequest;
  import org.apache.commons.altrmi.common.AltrmiReply;
  import org.apache.commons.altrmi.common.EndConnectionReply;
  import org.apache.commons.altrmi.server.AltrmiServerConnection;
  import org.apache.commons.altrmi.server.impl.AbstractServer;
  import org.apache.commons.altrmi.server.impl.StreamServerConnection;
  import org.apache.commons.altrmi.server.impl.ServerStreamReadWriter;
  
  import java.io.ObjectInputStream;
  import java.io.ObjectOutputStream;
  import java.io.IOException;
  import java.io.OutputStream;
  import java.io.InputStream;
  
  import java.net.Socket;
  import java.net.SocketException;
  
  
  /**
   * Class BEEPServerConnection
   *
   *
   * @author Vinay Chandrasekharan
   * @version $Revision: 1.1 $
   */
  public class BEEPServerConnection extends StreamServerConnection{
  
      
  
      /**
       * Constructor StreamServerConnection
       *
       *
       * @param abstractServer
       * @param readWriter
       *
       */
      public BEEPServerConnection (AbstractServer abstractServer,
                                    ServerStreamReadWriter readWriter)
  	{
  		super(abstractServer,readWriter);
      }
  
     
      /**
       * Method killConnection
       *
       *
       */
      public void killConnection() {
      }
  
    
  
    
  }
  
  
  
  1.1                  jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/server/impl/beep/CompleteBEEPServer.java
  
  Index: CompleteBEEPServer.java
  ===================================================================
  
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.commons.altrmi.server.impl.beep;
  
  import java.net.InetAddress;
  import org.apache.commons.altrmi.server.impl.AbstractServer;
  
  import org.beepcore.beep.core.BEEPException;
  import org.beepcore.beep.core.ProfileRegistry;
  import org.beepcore.beep.core.Session;
  import org.beepcore.beep.profile.ProfileConfiguration;
  import org.beepcore.beep.transport.tcp.AutomatedTCPSessionCreator;
  
  /**
   * Class CompleteBEEPServer
   *
   *
   * @author Vinay Chandrasekharan
   * @version $Revision: 1.1 $
   */
  
  
  public class CompleteBEEPServer extends AbstractServer
  {
  	private static final String profileClassName="org.apache.commons.altrmi.server.impl.beep.AltrmiBEEPServerProfile";  
  	private ProfileRegistry mProfileRegistry;
  	private ProfileConfiguration profileConfig;
      private Thread mThread;
  	private int mPort;
  	/**
  	* 	Constructor 
  	*/
  	public CompleteBEEPServer(int port) throws Exception
  	{
  		mPort=port;
  		AltrmiBEEPServerProfile abp;
  	    try 
  		{
  	        abp = (AltrmiBEEPServerProfile) Class.forName(profileClassName).newInstance();
  			abp.setAbstractServer(this);
  	    } 
  		catch (InstantiationException e) 
  		{
  	        throw new Exception("Class " + profileClassName + " returned an error");
  	    } 
  		catch (IllegalAccessException e) 
  		{
  	        throw new Exception("Class " + profileClassName + " cannot be constructed.");
  	    } 
  		catch (ClassNotFoundException e) 
  		{
  	        throw new Exception("Class " + profileClassName + " not found");
  	    }
  		catch (ClassCastException e) 
  		{
  	        throw new Exception("class " + profileClassName + " does not " +
  	        "implement the org.beepcore.beep.profile.Profile interface");
  	    }
  	    profileConfig = new ProfileConfiguration();
  		mProfileRegistry =  new ProfileRegistry();
  		mProfileRegistry.addStartChannelListener( AltrmiBEEPServerProfile.ALTRMI_SERVER_URI,
  	               abp.init( AltrmiBEEPServerProfile.ALTRMI_SERVER_URI, profileConfig), null );
  		
  		
  			
  	}
  
  
  	/**
       * Method start
       *
       */
      public void start() {
  
          mState = STARTED;
  
          getThread().start();
      }
  
      /**
       * Method stop
       *
       */
      public void stop() {
  
          mState = SHUTTINGDOWN;
  
          getThread().interrupt();
  
          mState = STOPPED;
      }
  
      private Thread getThread() {
  
          if (mThread == null) {
              mThread = new BeepSeesionDeamon(this);
          }
  
          return mThread;
      }
  	
  	
  	
  	/**
  	*  Incoming Beep session deamon thread
  	*/
  	
  	private class BeepSeesionDeamon extends Thread
  	{
  	    private CompleteBEEPServer beepServer;
  	    
  	    BeepSeesionDeamon( CompleteBEEPServer beepServer) 
  		{
  	        super( "CompleteBEEPServer.BeepSessionDaemon Thread");
  	        this.beepServer= beepServer;
  	    }
  	    
  	    public void run() 
  		{
  	        while (true) 
  			{
  	            try 
  				{
  					System.out.println("Listening at port["+beepServer.mPort+"]");				
  	                // Loop listening for new Sessions
  	                Session session =
  						AutomatedTCPSessionCreator.listen(beepServer.mPort,beepServer.mProfileRegistry);
  
  	            } 
  				catch (BEEPException e) 
  				{
  	            	e.printStackTrace();
  	            }  
  				catch (Throwable e) 
  				{
  					System.out.println("BeepSessionDaemon Thread killed");
  					e.printStackTrace();
  	                break;
  	            }
  	        }
  	    }
  	}
  	
  }
  
  
  
  1.1                  jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/server/impl/beep/ServerBEEPReadWriter.java
  
  Index: ServerBEEPReadWriter.java
  ===================================================================
  
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.commons.altrmi.server.impl.beep;
  
  
  
  import org.apache.commons.altrmi.common.AltrmiRequest;
  import org.apache.commons.altrmi.common.AltrmiReply;
  import org.apache.commons.altrmi.common.SerializationHelper;
  import org.apache.commons.altrmi.server.impl.ServerStreamReadWriter ;
  
  
  import org.beepcore.beep.core.BEEPException;
  import org.beepcore.beep.core.BEEPError;
  import org.beepcore.beep.core.Channel;
  
  import org.beepcore.beep.core.Message;
  import org.beepcore.beep.lib.MessageQueue;
  import org.beepcore.beep.core.MessageListener;
  
  import org.beepcore.beep.core.StringDataStream;
  import org.beepcore.beep.core.DataStream;
  import org.beepcore.beep.core.ByteDataStream;
  import org.beepcore.beep.core.ReplyListener;
  import org.beepcore.beep.lib.NullReplyListener;
  
  import java.util.*;
  import java.io.*;
  import java.io.DataOutputStream;
  import java.io.IOException;
  import java.io.BufferedOutputStream;
  
  
  /**
   * Class ServerBEEPReadWriter 
   *
   *
   * @author Vinay Chandrasekharan
   * @version $Revision: 1.1 $
   */
  public class ServerBEEPReadWriter extends ServerStreamReadWriter //implements MessageListener
  {
  
     
  	Channel channel;
  	int byteArraySize=0;
  	byte[] byteArray ;
  	Object lock =  new Object();
      private boolean m_isLocked=true;
  	private ReplyListener replyListener;
  	
  	public MessageQueue mQueue;
      protected ServerBEEPReadWriter  (Channel channel) 
      {
  		this.channel=channel;
  		replyListener= NullReplyListener.getListener();
  		mQueue=new MessageQueue();
      }
  	
  	protected void initialize()
  	{
  	
  	}
      protected synchronized AltrmiRequest writeReplyAndGetRequest(AltrmiReply altrmiReply)
              throws IOException, ClassNotFoundException 
  	{
  	    if (altrmiReply != null) 
  		{
              writeReply(altrmiReply);
          }
          return readRequest();
      }
  
      private void writeReply(AltrmiReply altrmiReply) throws IOException 
  	{
          byte[] aBytes = SerializationHelper.getBytesFromInstance(altrmiReply);
  		try
  		{
  	       channel.sendMSG(new ByteDataStream(aBytes),replyListener);
  		}
  		catch(BEEPException be)
  		{
  			throw new IOException(be.getMessage());
  		}
      }
  
      private AltrmiRequest readRequest() throws IOException, ClassNotFoundException 
  	{
  		try
  		{
  			receive();
       		return (AltrmiRequest) SerializationHelper.getInstanceFromBytes(byteArray);
  		}
  		catch(Exception e)
  		{
  			e.printStackTrace();
  			throw new IOException(e.getMessage());
  
  		}
  
  	}
  
  
  
  	public void receive() throws BEEPError
      {
  		try
  		{
  			Message message=mQueue.getNextMessage();
  			message.sendRPY(new StringDataStream("OK"));
  			DataStream ds =  message.getDataStream();
  			InputStream is =  ds.getInputStream();
  			byte[] buf = new byte[4096];
  	        ByteArrayOutputStream data = new ByteArrayOutputStream();
  			while (true) 
  			{
  	              try 
  				  {
  	                  int n = is.read(buf);
  	                  
  	                  if (n == -1)
  	                      break;
  	                  data.write(buf, 0, n);
  	              } 
  				  catch (IOException e) 
  				  {
  	                  message.getChannel().getSession().terminate(e.getMessage());
  	                  return;
  	              }
  			}
  			byteArray=data.toByteArray();
  		}
  		catch(Exception e)
  		{
  			e.printStackTrace();
  			throw new BEEPError(BEEPError.CODE_GENERAL_SYNTAX_ERROR,e.getMessage());
  
  		}
  
      }
  
  
  
  
  
  
  
  }
  
  
  
  1.1                  jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/test/BeepClientTest.java
  
  Index: BeepClientTest.java
  ===================================================================
  
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.commons.altrmi.test;
  
  
  
  import org.apache.commons.altrmi.client.AltrmiHostContext;
  import org.apache.commons.altrmi.client.AltrmiFactory;
  import org.apache.commons.altrmi.common.AltrmiConnectionException;
  import org.apache.commons.altrmi.client.impl.beep.BEEPHostContext;
  import org.apache.commons.altrmi.client.impl.ServerClassAltrmiFactory;
  import org.apache.commons.altrmi.client.impl.ClientClassAltrmiFactory;
  
  import java.io.IOException;
  
  
  /**
   * Class BeepClient
   *
   *
   * @author Vinay Chandrasekharan 
   */
  public class BeepClientTest {
  
      /**
       * Method main
       *
       *
       * @param args
       *
       * @throws Exception
       *
       */
      public static void main(String[] args) throws Exception {
  
          System.out.println("BEEP Profile Based Altrmi Client");
  
          AltrmiHostContext arhc;
  
          arhc = new BEEPHostContext("127.0.0.1", 1236);
        
          AltrmiFactory af = null;
  
          if (args[0].equals("S")) {
              af = new ServerClassAltrmiFactory(false);
          } else {
              af = new ClientClassAltrmiFactory(false);
          }
  
          af.setHostContext(arhc);
  
          //list
          System.out.println("Listing Published Objects At Server...");
  
          String[] listOfPublishedObjectsOnServer = af.list();
  
          for (int i = 0; i < listOfPublishedObjectsOnServer.length; i++) {
              System.out.println("..[" + i + "]:" + listOfPublishedObjectsOnServer[i]);
          }
  
          TestInterface ti = (TestInterface) af.lookup("Hello");
  
  		new TestClient(ti);
          af.close();
  
      }
  }
  
  
  
  1.1                  jakarta-commons-sandbox/altrmi/src/java/org/apache/commons/altrmi/test/BeepServerTest.java
  
  Index: BeepServerTest.java
  ===================================================================
  
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.commons.altrmi.test;
  
  
  
  import org.apache.commons.altrmi.server.impl.beep.CompleteBEEPServer;
  import org.apache.commons.altrmi.server.impl.classretrievers.JarFileClassRetriever;
  import org.apache.commons.altrmi.server.impl.AbstractServer;
  import org.apache.commons.altrmi.server.PublicationDescription;
  
  import java.io.IOException;
  
  
  /**
   * Class BeepServerTest
   *
   *
   * @author Vinay Chandrasekharan
   */
  public class BeepServerTest {
  
      /**
       * Method main
       *
       *
       * @param args
       *
       * @throws Exception
       *
       */
      public static void main(String[] args) throws Exception {
  
          System.out.println("BEEP Profile Based Server");
  
          AbstractServer as;
  
            as = new CompleteBEEPServer(1236);
  
          if (args[0].equals("S")) {
              as.setClassRetriever(new JarFileClassRetriever("build/classes2"));
          }
  
        	TestInterfaceImpl ti = new TestInterfaceImpl();
          PublicationDescription pd = new PublicationDescription(TestInterface.class, TestInterface2.class);
          as.publish(ti, "Hello", pd);
          as.start();    }
  }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>