You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by jv...@apache.org on 2011/04/13 11:17:21 UTC

svn commit: r1091719 - in /mina/branches/3.0/core/src/main/java/org/apache/mina/transport/tcp: NioSelectorProcessor.java NioSocketSession.java

Author: jvermillard
Date: Wed Apr 13 09:17:21 2011
New Revision: 1091719

URL: http://svn.apache.org/viewvc?rev=1091719&view=rev
Log:
creating session for an accepted connection

Modified:
    mina/branches/3.0/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java
    mina/branches/3.0/core/src/main/java/org/apache/mina/transport/tcp/NioSocketSession.java

Modified: mina/branches/3.0/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java
URL: http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java?rev=1091719&r1=1091718&r2=1091719&view=diff
==============================================================================
--- mina/branches/3.0/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java (original)
+++ mina/branches/3.0/core/src/main/java/org/apache/mina/transport/tcp/NioSelectorProcessor.java Wed Apr 13 09:17:21 2011
@@ -57,8 +57,7 @@ public class NioSelectorProcessor implem
 
     private Logger log;
 
-    // Object[] is {ServerSocketChannel,IoServer}
-    private Map<SocketAddress, Object[]> serverSocketChannels = new ConcurrentHashMap<SocketAddress,Object[]>();
+    private Map<SocketAddress, ServerSocketChannel> serverSocketChannels = new ConcurrentHashMap<SocketAddress,ServerSocketChannel>();
 
     public NioSelectorProcessor(String name, SelectorStrategy strategy) {
         this.strategy = strategy;
@@ -68,7 +67,8 @@ public class NioSelectorProcessor implem
     private Selector selector;
 
     // new binded server to add to the selector
-    private final Queue<ServerSocketChannel> serversToAdd = new ConcurrentLinkedQueue<ServerSocketChannel>();
+    // {ServerSocketChannel, IoServer}
+    private final Queue<Object[]> serversToAdd = new ConcurrentLinkedQueue<Object[]>();
 
     // server to remove of the selector
     private final Queue<ServerSocketChannel> serversToRemove = new ConcurrentLinkedQueue<ServerSocketChannel>();
@@ -84,9 +84,9 @@ public class NioSelectorProcessor implem
      * 
      * @param serverChannel
      */
-    private void add(ServerSocketChannel serverChannel) {
-        log.debug("adding a server channel " + serverChannel);
-        serversToAdd.add(serverChannel);
+    private void add(ServerSocketChannel serverChannel, IoServer server) {
+        log.debug("adding a server channel {} for server {}", serverChannel,server);
+        serversToAdd.add(new Object[]{serverChannel,server});
         wakeupWorker();
     }
 
@@ -112,13 +112,13 @@ public class NioSelectorProcessor implem
 
         serverSocketChannel.socket().bind(address);
         serverSocketChannel.configureBlocking(false);
-        serverSocketChannels.put(address, new Object[]{serverSocketChannel,server});
-        add(serverSocketChannel);
+        serverSocketChannels.put(address, serverSocketChannel);
+        add(serverSocketChannel, server);
     }
 
     @Override
     public void unbind(SocketAddress address) throws IOException {
-        ServerSocketChannel channel = (ServerSocketChannel)serverSocketChannels.get(address)[0];
+        ServerSocketChannel channel = serverSocketChannels.get(address);
         channel.socket().close();
         channel.close();
         serverSocketChannels.remove(channel);
@@ -129,6 +129,7 @@ public class NioSelectorProcessor implem
 
     @Override
     public void createSession(IoService service, Object clientSocket) {
+        log.debug("create session");
         SocketChannel socketChannel = (SocketChannel) clientSocket;
         NioSocketSession session = new NioSocketSession((NioTcpServer) service, socketChannel);
         // TODO : configure & register
@@ -173,9 +174,10 @@ public class NioSelectorProcessor implem
                     // pop new server sockets for accepting
                     if (serversToAdd.size() > 0) {
                         while (!serversToAdd.isEmpty()) {
-                            ServerSocketChannel channel = serversToAdd.poll();
+                            Object[] tmp = serversToAdd.poll();
+                            ServerSocketChannel channel = (ServerSocketChannel)tmp[0];
                             SelectionKey key = channel.register(selector, SelectionKey.OP_ACCEPT);
-                            key.attach(channel);
+                            key.attach(tmp);
                         }
                     }
 

Modified: mina/branches/3.0/core/src/main/java/org/apache/mina/transport/tcp/NioSocketSession.java
URL: http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/transport/tcp/NioSocketSession.java?rev=1091719&r1=1091718&r2=1091719&view=diff
==============================================================================
--- mina/branches/3.0/core/src/main/java/org/apache/mina/transport/tcp/NioSocketSession.java (original)
+++ mina/branches/3.0/core/src/main/java/org/apache/mina/transport/tcp/NioSocketSession.java Wed Apr 13 09:17:21 2011
@@ -19,7 +19,8 @@
  */
 package org.apache.mina.transport.tcp;
 
-import java.net.SocketAddress;
+import java.net.InetSocketAddress;
+import java.net.Socket;
 import java.nio.channels.SocketChannel;
 
 import org.apache.mina.CloseFuture;
@@ -35,23 +36,49 @@ import org.apache.mina.transport.tcp.nio
  */
 public class NioSocketSession extends AbstractIoSession {
     
+    private SocketChannel channel;
+    
     NioSocketSession(NioTcpServer service,SocketChannel channel) {
         super(service);
         
     }
 
-    @Override
-    public SocketAddress getRemoteAddress() {
-        // TODO Auto-generated method stub
-        return null;
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public InetSocketAddress getRemoteAddress() {
+        if (channel == null) {
+            return null;
+        }
+        Socket socket = channel.socket();
+        
+        if (socket == null) {
+            return null;
+        }
+
+        return (InetSocketAddress) socket.getRemoteSocketAddress();
     }
 
+    /**
+     * {@inheritDoc}
+     */
     @Override
-    public SocketAddress getLocalAddress() {
-        // TODO Auto-generated method stub
-        return null;
+    public InetSocketAddress getLocalAddress() {
+        if ( channel == null ) {
+            return null;
+        }
+        
+        Socket socket = channel.socket();
+        
+        if ( socket == null ) {
+            return null;
+        }
+        
+        return (InetSocketAddress) socket.getLocalSocketAddress();
     }
 
+
     @Override
     public boolean isConnected() {
         // TODO Auto-generated method stub