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