/* * JLibs: Common Utilities for Java * Copyright (C) 2009 Santhosh Kumar T <santhosh.tekuri@gmail.com> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package jlibs.nio; import jlibs.nio.listeners.ShutdownChannel; import java.io.IOException; import java.nio.channels.SelectableChannel; import java.nio.channels.SelectionKey; import static jlibs.nio.Debugger.IO; /** * @author Santhosh Kumar Tekuri */ public abstract class NBStream<T extends SelectableChannel> extends NBChannel<T>{ protected final SelectionKey selectionKey; protected final Socket transport; public NBStream(T selectable, SelectionKey selectionKey) throws IOException{ super(selectable); if(selectable==null){ transport = null; this.selectionKey = null; }else{ if(selectionKey==null) selectionKey = selectable.register(reactor.selector, 0, this); else selectionKey.attach(this); this.selectionKey = selectionKey; transport = new Socket(this, selectionKey); selectionKey.attach(this); } init(); } protected void init() throws IOException{} @Override protected void process(boolean timeout){ transport.process(timeout); } NBStream wakeupNext; void wakeup(){ reactor.wakeup(this); } @Trace(condition=IO) void wakeupNow(){ transport.wakeupNow(); } void closing(){} @Override public void close(){ if(isOpen()) ShutdownChannel.start(this); } @Override public long getTimeout(){ return SO_TIMEOUT; } /*-------------------------------------------------[ Options ]---------------------------------------------------*/ public static long SO_TIMEOUT; }