Author: jvermillard
Date: Wed Jan 10 03:18:35 2007
New Revision: 494787

URL: http://svn.apache.org/viewvc?view=rev&rev=494787
Log:
basic serial tests,
fixed the first batch of bugs

Added:
    mina/sandbox/jvermillard/serial/src/main/java/TestSerial.java
Modified:
    
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialConnector.java
    
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialFilterChain.java
    
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialSession.java

Added: mina/sandbox/jvermillard/serial/src/main/java/TestSerial.java
URL: 
http://svn.apache.org/viewvc/mina/sandbox/jvermillard/serial/src/main/java/TestSerial.java?view=auto&rev=494787
==============================================================================
--- mina/sandbox/jvermillard/serial/src/main/java/TestSerial.java (added)
+++ mina/sandbox/jvermillard/serial/src/main/java/TestSerial.java Wed Jan 10 
03:18:35 2007
@@ -0,0 +1,98 @@
+import java.nio.charset.Charset;
+
+import org.apache.log4j.BasicConfigurator;
+import org.apache.mina.common.ByteBuffer;
+import org.apache.mina.common.ConnectFuture;
+import org.apache.mina.common.IdleStatus;
+import org.apache.mina.common.IoHandler;
+import org.apache.mina.common.IoSession;
+import org.apache.mina.filter.codec.ProtocolCodecFactory;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.codec.ProtocolDecoder;
+import org.apache.mina.filter.codec.ProtocolEncoder;
+import org.apache.mina.filter.codec.textline.LineDelimiter;
+import org.apache.mina.filter.codec.textline.TextLineDecoder;
+import org.apache.mina.filter.codec.textline.TextLineEncoder;
+import org.apache.mina.transport.serial.SerialConnector;
+import org.apache.mina.transport.serial.SerialPortAddress;
+import org.apache.mina.transport.serial.SerialPortAddress.DataBits;
+import org.apache.mina.transport.serial.SerialPortAddress.FlowControl;
+import org.apache.mina.transport.serial.SerialPortAddress.Parity;
+import org.apache.mina.transport.serial.SerialPortAddress.StopBits;
+
+
+public class TestSerial {
+       public static void main(String[] args) {
+               BasicConfigurator.configure();
+               SerialConnector connector= new SerialConnector();
+               connector.setHandler(new IoHandler(){
+
+                       public void exceptionCaught(IoSession session, 
Throwable cause) throws Exception {
+                               System.err.println("Exception : ");
+                               cause.printStackTrace();
+                               
+                       }
+
+                       public void messageReceived(IoSession session, Object 
message) throws Exception {
+                               System.err.println("RCVD : "+message);
+                       }
+
+                       public void messageSent(IoSession session, Object 
message) throws Exception {
+                               System.err.println("SENT : "+message);
+                               
+                       }
+
+                       public void sessionClosed(IoSession session) throws 
Exception {
+                               System.err.println("Session closed");
+                               
+                       }
+
+                       public void sessionCreated(IoSession session) throws 
Exception {
+                               System.err.println("Session created");          
                
+                       }
+
+                       public void sessionIdle(IoSession session, IdleStatus 
status) throws Exception {
+                               // TODO Auto-generated method stub
+                               
+                       }
+
+                       public void sessionOpened(IoSession session) throws 
Exception {
+                               System.err.println("Session open");
+/*                             session.getFilterChain().addLast("codec", new 
ProtocolCodecFilter(new ProtocolCodecFactory() {
+                                       final ProtocolDecoder DECODER=new 
TextLineDecoder(Charset.defaultCharset(),LineDelimiter.AUTO);
+                                       final ProtocolEncoder ENCODER=new 
TextLineEncoder(Charset.defaultCharset(),LineDelimiter.UNIX);
+                                       
+                                       public ProtocolDecoder getDecoder() 
throws Exception {
+                                               return DECODER;
+                                       }
+                                       
+                                       public ProtocolEncoder getEncoder() 
throws Exception {
+                                               return ENCODER;
+                                       }
+                               } ));
+*/
+                               
+                       }
+                       
+               });
+               ConnectFuture future=connector.connect(new 
SerialPortAddress("/dev/ttyUSB0",38400,DataBits.DATABITS_8,StopBits.STOP_BITS_1,Parity.PARITY_NONE,FlowControl.FLOWCONTROL_NONE));
+               IoSession session=future.getSession();
+
+               try {
+                       Thread.sleep(1000);
+               } catch (InterruptedException e) {
+                       // TODO Auto-generated catch block
+                       e.printStackTrace();
+               }
+
+               session.write(ByteBuffer.wrap("Hello it's the serial 
communication !".getBytes()));
+               
+               try {
+                       Thread.sleep(5000);
+               } catch (InterruptedException e) {
+                       // TODO Auto-generated catch block
+                       e.printStackTrace();
+               }
+               session.close();
+       }
+}

Modified: 
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialConnector.java
URL: 
http://svn.apache.org/viewvc/mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialConnector.java?view=diff&rev=494787&r1=494786&r2=494787
==============================================================================
--- 
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialConnector.java
 (original)
+++ 
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialConnector.java
 Wed Jan 10 03:18:35 2007
@@ -12,6 +12,7 @@
 
 import org.apache.mina.common.ConnectFuture;
 import org.apache.mina.common.IoSessionConfig;
+import org.apache.mina.common.TransportType;
 import org.apache.mina.common.support.BaseIoConnector;
 import org.apache.mina.common.support.DefaultConnectFuture;
 import org.apache.mina.common.support.IoServiceListenerSupport;

Modified: 
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialFilterChain.java
URL: 
http://svn.apache.org/viewvc/mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialFilterChain.java?view=diff&rev=494787&r1=494786&r2=494787
==============================================================================
--- 
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialFilterChain.java
 (original)
+++ 
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialFilterChain.java
 Wed Jan 10 03:18:35 2007
@@ -23,8 +23,7 @@
                SerialSession s=(SerialSession)session;
                Queue<WriteRequest> queue = s.getWriteRequestQueue();
 
-               ( ( ByteBuffer ) writeRequest.getMessage() ).mark();
-        // SocketIoProcessor.doFlush() will reset it after write is finished
+               // SocketIoProcessor.doFlush() will reset it after write is 
finished
         // because the buffer will be passed with messageSent event. 
         ( ( ByteBuffer ) writeRequest.getMessage() ).mark();
         synchronized( queue )

Modified: 
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialSession.java
URL: 
http://svn.apache.org/viewvc/mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialSession.java?view=diff&rev=494787&r1=494786&r2=494787
==============================================================================
--- 
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialSession.java
 (original)
+++ 
mina/sandbox/jvermillard/serial/src/main/java/org/apache/mina/transport/serial/SerialSession.java
 Wed Jan 10 03:18:35 2007
@@ -102,7 +102,6 @@
                                }
                        }
                }
-
                return size;
        }
 
@@ -119,6 +118,11 @@
         filterChain.fireFilterClose( this );
     }
        
+    protected void write0( WriteRequest writeRequest )
+    {
+        filterChain.fireFilterWrite( this, writeRequest );
+    }
+
        /**
         * start handling streams
         * 
@@ -144,10 +148,12 @@
                                flushWrites();
 
                                // wait for more data
-                               try {
-                                       writeMonitor.wait();
-                               } catch (InterruptedException e) {
-                                       log.error("InterruptedException", e);
+                               synchronized (writeMonitor) {
+                                       try {
+                                               writeMonitor.wait();
+                                       } catch (InterruptedException e) {
+                                               
log.error("InterruptedException", e);
+                                       }                                       
                                }
                        }
                }
@@ -180,6 +186,7 @@
                        int writtenBytes = buf.remaining();
                        try {
                                outputStream.write(buf.array());
+                               buf.position(buf.position()+writtenBytes);
                                this.increaseWrittenBytes(writtenBytes);
                        } catch (IOException e) {
                                this.getFilterChain().fireExceptionCaught(this, 
e);
@@ -210,6 +217,8 @@
                                        } catch (InterruptedException e) {
                                                
log.error("InterruptedException", e);
                                        }
+                                       if(isClosing() || !isConnected())
+                                               break;
                                        int dataSize;
                                        try {
                                                dataSize = 
inputStream.available();
@@ -222,6 +231,7 @@
                                        // TODO : check if it's the good 
allocation way
                                        ByteBuffer buf = ByteBuffer.allocate( 
readBytes );
                                        buf.put(data,0,readBytes);
+                                       buf.flip();
                                        getFilterChain().fireMessageReceived( 
SerialSession.this, buf );
                                    }
                                        } catch (IOException e) {
@@ -254,6 +264,11 @@
                }
                
                port.close();
+               notifyWriteWorker();
+               synchronized (readReadyMonitor) {
+                       readReadyMonitor.notifyAll();   
+               }
+               
                
((SerialConnector)getService()).getListeners().fireSessionDestroyed(this);
        }
 }


Reply via email to