31 Ocak 2018 Çarşamba

AsynchronousFileChannel Sınıfı

open metodu
Şöyle yaparız.
Path somePath = Paths.get("test.txt");
AsynchronousFileChannel channel = AsynchronousFileChannel.open(somePath,
  StandardOpenOption.READ);
read metodu
Şöyle yaparız.
ByteBuffer buf = ...;
channel.read(buf, 0, null, new CompletionHandler<Integer, Object>() {
  @Override
  public void completed(Integer bytesRead, Object attachment) {
    ...
  }

  @Override
  public void failed(Throwable exc, Object attachment) {
    ...
  }
});
write metodu
Örnek ver

Netty ChannelInboundHandlers

Giriş
ChannelInboundHandler'dan kalıtan sınıflarda state saklanabilir.

ChannelInboundHandlerAdapter Sınıfı
channelActive metodu
Channel connected anlamına gelir. Şöyle yaparız.
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
  channels.add(ctx.channel());
  // ...
}
channelInactive metodu
Channel disconnected anlamına gelir. Şöyle yaparız.
@Override
public void channelInactive(final ChannelHandlerContext ctx) throws Exception {
  channels.remove(ctx.channel());
}
channelRead metodu
Okumaya hazır anlamına gelir.Şöyle yaparız.
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
  // ...

  for (Channel ch : channels1) {
    // Does `ch` represent the channel of the current sending client?
    if (ch.equals(ctx.channel())) {
      // Skip.
       continue;
    }

    // Send the message to the `ch` channel.
    // ...
  }

  // ...
}
channelReadComplete metodu
Okuma işlemi bitti anlamına gelir.

handlerAdded metodu
Açıklaması şöyle
A ChannelHandler has two life cycle listener methods: handlerAdded() and handlerRemoved(). You can perform an arbitrary (de)initialization task as long as it does not block for a long time.
Örnek ver

handlerRemoved metodu
Örnek ver

ByteToMessageDecoder Sınıfı
Netty Decoders yazısına taşıdım.

SimpleChannelInboundHandler Sınıfı
Giriş
ChannelInboundHandlerAdapter'dan kalıtır ve mesaj tipini tanımlamaya izin verir.

channelRead0 metodu
Şöyle yaparız.
public class MyBusinessLogicHandler extends SimpleChannelInboundHandler<MyModel>{
  public void channelRead0(ChannelHandlerContext ctx, Packet msg){
    Packet rslt = null;
    //Do some complicated business logic
    ctx.write(rslt);
  }
}


Netty Channels

Channel Arayüzü
Socket ile aynı aynı anlama gelir.
constructor
Şöyle yaparız.
Bootstrap b = new Bootstrap();

String host = ...; int port = ...;
b.group(new NioEventLoopGroup()).channel(NioSocketChannel.class)
  .remoteAddress(host, port).handler(new TelnetClientInitializer());
Channel ch = b.connect().sync().channel();
eventLoop metodu
Şöyle yaparız.
channel.eventLoop().schedule(this, 100, MILLISECONDS); 
remoteAddress metodu
Şöyle yaparız.
String remoteAddress = ctx.channel().remoteAddress().toString();
write metodu
Şöyle yaparız.
ChannelFuture f= null;
String str = ...;
f= ch.write(str);
writeAndFlush metodu
Şöyle yaparız.

ChannelFuture future = bootstrap.connect(hostAddress).await();
future.channel().writeAndFlush(buffer);
ChannelFuture Sınıfı
isSuccess metodu
Şöyle yaparız.
private void doConnect() {
  Bootstrap b = ...;
  b.connect().addListener((ChannelFuture f) -> {
    if (!f.isSuccess()) {
      long nextRetryDelay = nextRetryDelay(...);
      f.channel().eventLoop().schedule(nextRetryDelay, ..., () -> {
        doConnect();
      }); // or you can give up at some point by just doing nothing.
    }
  });
}
sync metodu
Future nesnesinin bitmesini bekler. Şöyle yaparız.
f = b.connect(host, port).sync();