Author: jvermillard
Date: Wed Apr 13 08:40:49 2011
New Revision: 1091702

URL: http://svn.apache.org/viewvc?rev=1091702&view=rev
Log:
saving IoServer for session creation

Modified:
    
mina/branches/3.0/core/src/main/java/org/apache/mina/service/SelectorProcessor.java
    
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/nio/NioTcpServer.java

Modified: 
mina/branches/3.0/core/src/main/java/org/apache/mina/service/SelectorProcessor.java
URL: 
http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/service/SelectorProcessor.java?rev=1091702&r1=1091701&r2=1091702&view=diff
==============================================================================
--- 
mina/branches/3.0/core/src/main/java/org/apache/mina/service/SelectorProcessor.java
 (original)
+++ 
mina/branches/3.0/core/src/main/java/org/apache/mina/service/SelectorProcessor.java
 Wed Apr 13 08:40:49 2011
@@ -23,6 +23,9 @@ package org.apache.mina.service;
 import java.io.IOException;
 import java.net.SocketAddress;
 
+import org.apache.mina.IoServer;
+import org.apache.mina.IoService;
+
 /**
  * A processor in charge of a group of client session and server sockets.
  *
@@ -33,16 +36,17 @@ public interface SelectorProcessor {
     
     /**
      * create a session for a freshly accepted client socket
+     * @param service
      * @param clientChannel
      */
-    void createSession(Object clientSocket);
+    void createSession(IoService service,Object clientSocket);
     
     /**
      * Bind and start processing this new server address
      * @param address local address to bind
      * @throws IOException exception thrown if any problem occurs while binding
      */
-    void bindAndAcceptAddress(SocketAddress address) throws IOException;
+    void bindAndAcceptAddress(IoServer server, SocketAddress address) throws 
IOException;
     
     /**
      * Stop processing and unbind this server address

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=1091702&r1=1091701&r2=1091702&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 08:40:49 2011
@@ -32,9 +32,12 @@ import java.util.Queue;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentLinkedQueue;
 
+import org.apache.mina.IoServer;
+import org.apache.mina.IoService;
 import org.apache.mina.IoSession;
 import org.apache.mina.service.SelectorProcessor;
 import org.apache.mina.service.SelectorStrategy;
+import org.apache.mina.transport.tcp.nio.NioTcpServer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -54,7 +57,8 @@ public class NioSelectorProcessor implem
 
     private Logger log;
 
-    private Map<SocketAddress, ServerSocketChannel> serverSocketChannels = new 
ConcurrentHashMap<SocketAddress, ServerSocketChannel>();
+    // Object[] is {ServerSocketChannel,IoServer}
+    private Map<SocketAddress, Object[]> serverSocketChannels = new 
ConcurrentHashMap<SocketAddress,Object[]>();
 
     public NioSelectorProcessor(String name, SelectorStrategy strategy) {
         this.strategy = strategy;
@@ -80,7 +84,7 @@ public class NioSelectorProcessor implem
      * 
      * @param serverChannel
      */
-    public void add(ServerSocketChannel serverChannel) {
+    private void add(ServerSocketChannel serverChannel) {
         log.debug("adding a server channel " + serverChannel);
         serversToAdd.add(serverChannel);
         wakeupWorker();
@@ -103,18 +107,18 @@ public class NioSelectorProcessor implem
     }
 
     @Override
-    public void bindAndAcceptAddress(SocketAddress address) throws IOException 
{
+    public void bindAndAcceptAddress(IoServer server, SocketAddress address) 
throws IOException {
         ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
 
         serverSocketChannel.socket().bind(address);
         serverSocketChannel.configureBlocking(false);
-        serverSocketChannels.put(address, serverSocketChannel);
+        serverSocketChannels.put(address, new 
Object[]{serverSocketChannel,server});
         add(serverSocketChannel);
     }
 
     @Override
     public void unbind(SocketAddress address) throws IOException {
-        ServerSocketChannel channel = serverSocketChannels.get(address);
+        ServerSocketChannel channel = 
(ServerSocketChannel)serverSocketChannels.get(address)[0];
         channel.socket().close();
         channel.close();
         serverSocketChannels.remove(channel);
@@ -124,9 +128,10 @@ public class NioSelectorProcessor implem
     }
 
     @Override
-    public void createSession(Object clientSocket) {
+    public void createSession(IoService service, Object clientSocket) {
         SocketChannel socketChannel = (SocketChannel) clientSocket;
-        
+        NioSocketSession session = new NioSocketSession((NioTcpServer) 
service, socketChannel);
+        // TODO : configure & register
     }
 
     /**
@@ -141,7 +146,7 @@ public class NioSelectorProcessor implem
         public void run() {
             if (selector == null) {
                 log.debug("opening a new selector");
-                
+
                 try {
                     selector = Selector.open();
                 } catch (IOException e) {
@@ -156,7 +161,7 @@ public class NioSelectorProcessor implem
                         while (!serversToRemove.isEmpty()) {
                             ServerSocketChannel channel = 
serversToRemove.poll();
                             SelectionKey key = serverKey.remove(channel);
-                            
+
                             if (key == null) {
                                 log.error("The server socket was already 
removed of the selector");
                             } else {
@@ -169,12 +174,11 @@ public class NioSelectorProcessor implem
                     if (serversToAdd.size() > 0) {
                         while (!serversToAdd.isEmpty()) {
                             ServerSocketChannel channel = serversToAdd.poll();
-                            SelectionKey key = channel.register(selector,
-                                    SelectionKey.OP_ACCEPT);
+                            SelectionKey key = channel.register(selector, 
SelectionKey.OP_ACCEPT);
                             key.attach(channel);
                         }
                     }
-                    
+
                     log.debug("selecting...");
                     int readyCount = selector.select(SELECT_TIMEOUT);
                     log.debug("... done selecting : {}", readyCount);
@@ -185,14 +189,11 @@ public class NioSelectorProcessor implem
                             if (key.isAcceptable()) {
                                 log.debug("acceptable new client");
                                 // accepted connection
-                                SocketChannel newClientChannel = 
((ServerSocketChannel) key
-                                        .attachment()).accept();
+                                SocketChannel newClientChannel = 
((ServerSocketChannel) ((Object[])key.attachment())[0]).accept();
                                 log.debug("client accepted");
                                 // and give it's to the strategy
-                                strategy.getSelectorForNewSession(
-                                        NioSelectorProcessor.this)
-                                        .createSession(newClientChannel);
-
+                                
strategy.getSelectorForNewSession(NioSelectorProcessor.this).createSession( 
(IoServer)(((Object[])key.attachment())[1]),
+                                        newClientChannel);
                             }
                         }
                     }

Modified: 
mina/branches/3.0/core/src/main/java/org/apache/mina/transport/tcp/nio/NioTcpServer.java
URL: 
http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/transport/tcp/nio/NioTcpServer.java?rev=1091702&r1=1091701&r2=1091702&view=diff
==============================================================================
--- 
mina/branches/3.0/core/src/main/java/org/apache/mina/transport/tcp/nio/NioTcpServer.java
 (original)
+++ 
mina/branches/3.0/core/src/main/java/org/apache/mina/transport/tcp/nio/NioTcpServer.java
 Wed Apr 13 08:40:49 2011
@@ -75,7 +75,7 @@ public class NioTcpServer extends Abstra
                 addresses.add(address);
                 NioSelectorProcessor processor = (NioSelectorProcessor) 
strategy
                         .getSelectorForBindNewAddress();
-                processor.bindAndAcceptAddress(address);
+                processor.bindAndAcceptAddress(this,address);
             }
         }
     }


Reply via email to