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

📄 defaultiofilterchain.java

📁 mina是以Java实现的一个开源的网络程序框架
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        Entry head = this.head;        callNextMessageSent(head, session, request);    }    private void callNextMessageSent(Entry entry, IoSession session,            WriteRequest writeRequest) {        try {            IoFilter filter = entry.getFilter();            NextFilter nextFilter = entry.getNextFilter();            filter.messageSent(nextFilter, session,                    writeRequest);        } catch (Throwable e) {            fireExceptionCaught(e);        }    }    public void fireExceptionCaught(Throwable cause) {        Entry head = this.head;        callNextExceptionCaught(head, session, cause);    }    private void callNextExceptionCaught(Entry entry, IoSession session,            Throwable cause) {        // Notify the related future.        ConnectFuture future = (ConnectFuture) session                .removeAttribute(SESSION_CREATED_FUTURE);        if (future == null) {            try {                IoFilter filter = entry.getFilter();                NextFilter nextFilter = entry.getNextFilter();                filter.exceptionCaught(nextFilter,                        session, cause);            } catch (Throwable e) {                logger                        .warn(                                "Unexpected exception from exceptionCaught handler.",                                e);            }        } else {            // Please note that this place is not the only place that            // calls ConnectFuture.setException().            session.close(true);            future.setException(cause);        }    }    public void fireFilterWrite(WriteRequest writeRequest) {        Entry tail = this.tail;        callPreviousFilterWrite(tail, session, writeRequest);    }    private void callPreviousFilterWrite(Entry entry, IoSession session,            WriteRequest writeRequest) {        try {            IoFilter filter = entry.getFilter();            NextFilter nextFilter = entry.getNextFilter();            filter.filterWrite(nextFilter, session, writeRequest);        } catch (Throwable e) {            writeRequest.getFuture().setException(e);            fireExceptionCaught(e);        }    }    public void fireFilterClose() {        Entry tail = this.tail;        callPreviousFilterClose(tail, session);    }    private void callPreviousFilterClose(Entry entry, IoSession session) {        try {            IoFilter filter = entry.getFilter();            NextFilter nextFilter = entry.getNextFilter();            filter.filterClose(nextFilter, session);        } catch (Throwable e) {            fireExceptionCaught(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) {        return getEntry(filter) != null;    }    public boolean contains(Class<? extends IoFilter> filterType) {        return getEntry(filterType) != null;    }    @Override    public String toString() {        StringBuilder buf = new StringBuilder();        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();    }    @Override    protected void finalize() throws Throwable {        try {            this.clear();        } finally {            super.finalize();        }    }    private class HeadFilter extends IoFilterAdapter {        @SuppressWarnings("unchecked")        @Override        public void filterWrite(NextFilter nextFilter, IoSession session,                WriteRequest writeRequest) throws Exception {            AbstractIoSession s = (AbstractIoSession) session;            // Maintain counters.            if (writeRequest.getMessage() instanceof IoBuffer) {                IoBuffer buffer = (IoBuffer) writeRequest.getMessage();                // I/O processor implementation will call buffer.reset()                // it after the write operation is finished, because                // the buffer will be specified with messageSent event.                buffer.mark();                int remaining = buffer.remaining();                if (remaining == 0) {                    // Zero-sized buffer means the internal message                    // delimiter.                    s.increaseScheduledWriteMessages();                } else {                    s.increaseScheduledWriteBytes(remaining);                }            } else {                s.increaseScheduledWriteMessages();            }            s.getWriteRequestQueue().offer(s, writeRequest);            if (!s.isWriteSuspended()) {                s.getProcessor().flush(s);            }        }        @SuppressWarnings("unchecked")        @Override        public void filterClose(NextFilter nextFilter, IoSession session)                throws Exception {            ((AbstractIoSession) session).getProcessor().remove(((AbstractIoSession) session));        }    }    private static class TailFilter extends IoFilterAdapter {        @Override        public void sessionCreated(NextFilter nextFilter, IoSession session)                throws Exception {            try {                session.getHandler().sessionCreated(session);            } finally {                // Notify the related future.                ConnectFuture future = (ConnectFuture) session                        .removeAttribute(SESSION_CREATED_FUTURE);                if (future != null) {                    future.setSession(session);                }            }        }        @Override        public void sessionOpened(NextFilter nextFilter, IoSession session)                throws Exception {            session.getHandler().sessionOpened(session);        }        @Override        public void sessionClosed(NextFilter nextFilter, IoSession session)                throws Exception {            AbstractIoSession s = (AbstractIoSession) session;            try {                s.getHandler().sessionClosed(session);            } finally {                try {                    s.getWriteRequestQueue().dispose(session);                } finally {                    try {                        s.getAttributeMap().dispose(session);                    } finally {                        try {                            // Remove all filters.                            session.getFilterChain().clear();                        } finally {                            if (s.getConfig().isUseReadOperation()) {                                s.offerClosedReadFuture();                            }                        }                    }                }            }        }        @Override        public void sessionIdle(NextFilter nextFilter, IoSession session,                IdleStatus status) throws Exception {            session.getHandler().sessionIdle(session, status);        }        @Override        public void exceptionCaught(NextFilter nextFilter, IoSession session,                Throwable cause) throws Exception {            AbstractIoSession s = (AbstractIoSession) session;            try {                s.getHandler().exceptionCaught(s, cause);            } finally {                if (s.getConfig().isUseReadOperation()) {                    s.offerFailedReadFuture(cause);                }            }        }        @Override        public void messageReceived(NextFilter nextFilter, IoSession session,                Object message) throws Exception {            AbstractIoSession s = (AbstractIoSession) session;            if (!(message instanceof IoBuffer)) {                s.increaseReadMessages(System.currentTimeMillis());            } else if (!((IoBuffer) message).hasRemaining()) {                s.increaseReadMessages(System.currentTimeMillis());            }            try {                session.getHandler().messageReceived(s, message);            } finally {                if (s.getConfig().isUseReadOperation()) {                    s.offerReadFuture(message);                }            }        }        @Override        public void messageSent(NextFilter nextFilter, IoSession session,                WriteRequest writeRequest) throws Exception {            session.getHandler()                    .messageSent(session, writeRequest.getMessage());        }        @Override        public void filterWrite(NextFilter nextFilter, IoSession session,                WriteRequest writeRequest) throws Exception {            nextFilter.filterWrite(session, writeRequest);        }        @Override        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 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,                        WriteRequest writeRequest) {                    Entry nextEntry = EntryImpl.this.nextEntry;                    callNextMessageSent(nextEntry, session, writeRequest);                }                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 toString() {                	return EntryImpl.this.nextEntry.name;                }            };        }        public String getName() {            return name;        }        public IoFilter getFilter() {            return filter;        }        private void setFilter(IoFilter filter) {            if (filter == null) {                throw new NullPointerException("filter");            }            this.filter = filter;        }        public NextFilter getNextFilter() {            return nextFilter;        }        @Override        public String toString() {        	StringBuilder sb = new StringBuilder();        	        	// Add the current filter        	sb.append("('").append(getName()).append('\'');        	        	// Add the previous filter         	sb.append(", prev: '");        	if (prevEntry != null) {                sb.append(prevEntry.name);                sb.append(':');                sb.append(prevEntry.getFilter().getClass().getSimpleName());        	} else {            	sb.append("null");        	}        	        	// Add the next filter         	sb.append("', next: '");        	if (nextEntry != null) {                sb.append(nextEntry.name);                sb.append(':');                sb.append(nextEntry.getFilter().getClass().getSimpleName());        	} else {            	sb.append("null");        	}        	        	sb.append("')");            return sb.toString();        }        public void addAfter(String name, IoFilter filter) {            DefaultIoFilterChain.this.addAfter(getName(), name, filter);        }        public void addBefore(String name, IoFilter filter) {            DefaultIoFilterChain.this.addBefore(getName(), name, filter);        }        public void remove() {            DefaultIoFilterChain.this.remove(getName());        }        public void replace(IoFilter newFilter) {            DefaultIoFilterChain.this.replace(getName(), newFilter);        }    }}

⌨️ 快捷键说明

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