Search in sources :

Example 1 with CachedAioThread

use of com.generallycloud.baseio.component.CachedAioThread in project baseio by generallycloud.

the class AioSocketChannelConnector method connect.

@Override
protected void connect(InetSocketAddress socketAddress) throws IOException {
    AsynchronousChannelGroup group = context.getAsynchronousChannelGroup();
    final AsynchronousSocketChannel _channel = AsynchronousSocketChannel.open(group);
    _channel.connect(socketAddress, this, new CompletionHandler<Void, AioSocketChannelConnector>() {

        @Override
        public void completed(Void result, AioSocketChannelConnector connector) {
            CachedAioThread aioThread = (CachedAioThread) Thread.currentThread();
            AioSocketChannel channel = new AioSocketChannel(aioThread, _channel, 1);
            connector.finishConnect(channel.getSession(), null);
            aioThread.getReadCompletionHandler().completed(0, channel);
        }

        @Override
        public void failed(Throwable exc, AioSocketChannelConnector connector) {
            connector.finishConnect((UnsafeSocketSession) getSession(), exc);
        }
    });
    wait4connect();
}
Also used : CachedAioThread(com.generallycloud.baseio.component.CachedAioThread) AsynchronousSocketChannel(java.nio.channels.AsynchronousSocketChannel) UnsafeSocketSession(com.generallycloud.baseio.component.UnsafeSocketSession) AsynchronousChannelGroup(java.nio.channels.AsynchronousChannelGroup) AioSocketChannel(com.generallycloud.baseio.component.AioSocketChannel)

Example 2 with CachedAioThread

use of com.generallycloud.baseio.component.CachedAioThread in project baseio by generallycloud.

the class AioSocketChannelAcceptor method bind.

@Override
protected void bind(InetSocketAddress socketAddress) throws IOException {
    AioSocketChannelContext context = (AioSocketChannelContext) getContext();
    AsynchronousChannelGroup group = context.getAsynchronousChannelGroup();
    final FixedAtomicInteger channelIds = new FixedAtomicInteger(1, Integer.MAX_VALUE);
    serverSocketChannel = AsynchronousServerSocketChannel.open(group);
    serverSocketChannel.bind(socketAddress);
    serverSocketChannel.accept(null, new CompletionHandler<AsynchronousSocketChannel, Void>() {

        @Override
        public void completed(AsynchronousSocketChannel _channel, Void attachment) {
            // 接受下一个连接
            serverSocketChannel.accept(null, this);
            int channelId = channelIds.getAndIncrement();
            CachedAioThread aioThread = (CachedAioThread) Thread.currentThread();
            AioSocketChannel channel = new AioSocketChannel(aioThread, _channel, channelId);
            channel.fireOpend();
            aioThread.getReadCompletionHandler().completed(0, channel);
        }

        @Override
        public void failed(Throwable exc, Void attachment) {
            logger.error(exc.getMessage(), exc);
        }
    });
}
Also used : AioSocketChannelContext(com.generallycloud.baseio.component.AioSocketChannelContext) CachedAioThread(com.generallycloud.baseio.component.CachedAioThread) AsynchronousSocketChannel(java.nio.channels.AsynchronousSocketChannel) FixedAtomicInteger(com.generallycloud.baseio.concurrent.FixedAtomicInteger) AsynchronousChannelGroup(java.nio.channels.AsynchronousChannelGroup) AioSocketChannel(com.generallycloud.baseio.component.AioSocketChannel)

Aggregations

AioSocketChannel (com.generallycloud.baseio.component.AioSocketChannel)2 CachedAioThread (com.generallycloud.baseio.component.CachedAioThread)2 AsynchronousChannelGroup (java.nio.channels.AsynchronousChannelGroup)2 AsynchronousSocketChannel (java.nio.channels.AsynchronousSocketChannel)2 AioSocketChannelContext (com.generallycloud.baseio.component.AioSocketChannelContext)1 UnsafeSocketSession (com.generallycloud.baseio.component.UnsafeSocketSession)1 FixedAtomicInteger (com.generallycloud.baseio.concurrent.FixedAtomicInteger)1