⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractiofilterchain.java

📁 apache 的一个socket框架
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        try {            entry.getFilter().exceptionCaught(entry.getNextFilter(), session,                    cause);        } catch (Throwable e) {            SessionLog.warn(session,                    "Unexpected exception from exceptionCaught handler.", e);        }    }    public void fireFilterWrite(IoSession session, WriteRequest writeRequest) {        Entry tail = this.tail;        callPreviousFilterWrite(tail, session, writeRequest);    }    private void callPreviousFilterWrite(Entry entry, IoSession session,            WriteRequest writeRequest) {        try {            entry.getFilter().filterWrite(entry.getNextFilter(), session,                    writeRequest);        } catch (Throwable e) {            fireExceptionCaught(session, e);        }    }    public void fireFilterClose(IoSession session) {        Entry tail = this.tail;        callPreviousFilterClose(tail, session);    }    private void callPreviousFilterClose(Entry entry, IoSession session) {        try {            entry.getFilter().filterClose(entry.getNextFilter(), session);        } catch (Throwable e) {            fireExceptionCaught(session, e);        }    }    public List<Entry> getAll() {        List<Entry> list = new ArrayList<Entry>();        EntryImpl e = head.nextEntry;        while (e != tail) {            list.add(e);            e = e.nextEntry;        }        return list;    }    public List<Entry> getAllReversed() {        List<Entry> list = new ArrayList<Entry>();        EntryImpl e = tail.prevEntry;        while (e != head) {            list.add(e);            e = e.prevEntry;        }        return list;    }    public boolean contains(String name) {        return getEntry(name) != null;    }    public boolean contains(IoFilter filter) {        EntryImpl e = head.nextEntry;        while (e != tail) {            if (e.getFilter() == filter) {                return true;            }            e = e.nextEntry;        }        return false;    }    public boolean contains(Class<? extends IoFilter> filterType) {        EntryImpl e = head.nextEntry;        while (e != tail) {            if (filterType.isAssignableFrom(e.getFilter().getClass())) {                return true;            }            e = e.nextEntry;        }        return false;    }    public String toString() {        StringBuffer buf = new StringBuffer();        buf.append("{ ");        boolean empty = true;        EntryImpl e = head.nextEntry;        while (e != tail) {            if (!empty) {                buf.append(", ");            } else {                empty = false;            }            buf.append('(');            buf.append(e.getName());            buf.append(':');            buf.append(e.getFilter());            buf.append(')');            e = e.nextEntry;        }        if (empty) {            buf.append("empty");        }        buf.append(" }");        return buf.toString();    }    protected void finalize() throws Throwable {        try {            this.clear();        } finally {            super.finalize();        }    }    protected abstract void doWrite(IoSession session, WriteRequest writeRequest)            throws Exception;    protected abstract void doClose(IoSession session) throws Exception;    private class HeadFilter extends IoFilterAdapter {        public void sessionCreated(NextFilter nextFilter, IoSession session) {            nextFilter.sessionCreated(session);        }        public void sessionOpened(NextFilter nextFilter, IoSession session) {            nextFilter.sessionOpened(session);        }        public void sessionClosed(NextFilter nextFilter, IoSession session) {            nextFilter.sessionClosed(session);        }        public void sessionIdle(NextFilter nextFilter, IoSession session,                IdleStatus status) {            nextFilter.sessionIdle(session, status);        }        public void exceptionCaught(NextFilter nextFilter, IoSession session,                Throwable cause) {            nextFilter.exceptionCaught(session, cause);        }        public void messageReceived(NextFilter nextFilter, IoSession session,                Object message) {            nextFilter.messageReceived(session, message);        }        public void messageSent(NextFilter nextFilter, IoSession session,                Object message) {            nextFilter.messageSent(session, message);        }        public void filterWrite(NextFilter nextFilter, IoSession session,                WriteRequest writeRequest) throws Exception {            if (session.getTransportType().getEnvelopeType().isAssignableFrom(                    writeRequest.getMessage().getClass())) {                doWrite(session, writeRequest);            } else {                throw new IllegalStateException(                        "Write requests must be transformed to "                                + session.getTransportType().getEnvelopeType()                                + ": " + writeRequest);            }        }        public void filterClose(NextFilter nextFilter, IoSession session)                throws Exception {            doClose(session);        }    }    private static class TailFilter extends IoFilterAdapter {        public void sessionCreated(NextFilter nextFilter, IoSession session)                throws Exception {            session.getHandler().sessionCreated(session);        }        public void sessionOpened(NextFilter nextFilter, IoSession session)                throws Exception {            try {                session.getHandler().sessionOpened(session);            } finally {                // Notify the related ConnectFuture                // if the session is created from SocketConnector.                ConnectFuture future = (ConnectFuture) session                        .removeAttribute(CONNECT_FUTURE);                if (future != null) {                    future.setSession(session);                }            }        }        public void sessionClosed(NextFilter nextFilter, IoSession session)                throws Exception {            try {                session.getHandler().sessionClosed(session);            } finally {                // Remove all filters.                session.getFilterChain().clear();            }        }        public void sessionIdle(NextFilter nextFilter, IoSession session,                IdleStatus status) throws Exception {            session.getHandler().sessionIdle(session, status);        }        public void exceptionCaught(NextFilter nextFilter, IoSession session,                Throwable cause) throws Exception {            session.getHandler().exceptionCaught(session, cause);        }        public void messageReceived(NextFilter nextFilter, IoSession session,                Object message) throws Exception {            try {                session.getHandler().messageReceived(session, message);            } finally {                ByteBufferUtil.releaseIfPossible(message);            }        }        public void messageSent(NextFilter nextFilter, IoSession session,                Object message) throws Exception {            try {                session.getHandler().messageSent(session, message);            } finally {                ByteBufferUtil.releaseIfPossible(message);            }        }        public void filterWrite(NextFilter nextFilter, IoSession session,                WriteRequest writeRequest) throws Exception {            nextFilter.filterWrite(session, writeRequest);        }        public void filterClose(NextFilter nextFilter, IoSession session)                throws Exception {            nextFilter.filterClose(session);        }    }    private class EntryImpl implements Entry {        private EntryImpl prevEntry;        private EntryImpl nextEntry;        private final String name;        private final IoFilter filter;        private final NextFilter nextFilter;        private EntryImpl(EntryImpl prevEntry, EntryImpl nextEntry,                String name, IoFilter filter) {            if (filter == null) {                throw new NullPointerException("filter");            }            if (name == null) {                throw new NullPointerException("name");            }            this.prevEntry = prevEntry;            this.nextEntry = nextEntry;            this.name = name;            this.filter = filter;            this.nextFilter = new NextFilter() {                public void sessionCreated(IoSession session) {                    Entry nextEntry = EntryImpl.this.nextEntry;                    callNextSessionCreated(nextEntry, session);                }                public void sessionOpened(IoSession session) {                    Entry nextEntry = EntryImpl.this.nextEntry;                    callNextSessionOpened(nextEntry, session);                }                public void sessionClosed(IoSession session) {                    Entry nextEntry = EntryImpl.this.nextEntry;                    callNextSessionClosed(nextEntry, session);                }                public void sessionIdle(IoSession session, IdleStatus status) {                    Entry nextEntry = EntryImpl.this.nextEntry;                    callNextSessionIdle(nextEntry, session, status);                }                public void exceptionCaught(IoSession session, Throwable cause) {                    Entry nextEntry = EntryImpl.this.nextEntry;                    callNextExceptionCaught(nextEntry, session, cause);                }                public void messageReceived(IoSession session, Object message) {                    Entry nextEntry = EntryImpl.this.nextEntry;                    callNextMessageReceived(nextEntry, session, message);                }                public void messageSent(IoSession session, Object message) {                    Entry nextEntry = EntryImpl.this.nextEntry;                    callNextMessageSent(nextEntry, session, message);                }                public void filterWrite(IoSession session,                        WriteRequest writeRequest) {                    Entry nextEntry = EntryImpl.this.prevEntry;                    callPreviousFilterWrite(nextEntry, session, writeRequest);                }                public void filterClose(IoSession session) {                    Entry nextEntry = EntryImpl.this.prevEntry;                    callPreviousFilterClose(nextEntry, session);                }            };        }        public String getName() {            return name;        }        public IoFilter getFilter() {            return filter;        }        public NextFilter getNextFilter() {            return nextFilter;        }        public String toString() {            return "(" + getName() + ':' + filter + ')';        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -