亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? statemachine.java

?? mina是以Java實現的一個開源的網絡程序框架
?? JAVA
字號:
/* *  Licensed to the Apache Software Foundation (ASF) under one *  or more contributor license agreements.  See the NOTICE file *  distributed with this work for additional information *  regarding copyright ownership.  The ASF licenses this file *  to you under the Apache License, Version 2.0 (the *  "License"); you may not use this file except in compliance *  with the License.  You may obtain a copy of the License at * *    http://www.apache.org/licenses/LICENSE-2.0 * *  Unless required by applicable law or agreed to in writing, *  software distributed under the License is distributed on an *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *  KIND, either express or implied.  See the License for the *  specific language governing permissions and limitations *  under the License. * */package org.apache.mina.statemachine;import java.util.Collection;import java.util.Collections;import java.util.HashMap;import java.util.LinkedList;import java.util.Map;import java.util.Stack;import org.apache.mina.statemachine.context.StateContext;import org.apache.mina.statemachine.event.Event;import org.apache.mina.statemachine.event.UnhandledEventException;import org.apache.mina.statemachine.transition.Transition;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * Represents a complete state machine. Contains a collection of {@link State} * objects connected by {@link Transition}s. Normally you wouldn't create  * instances of this class directly but rather use the  * {@link org.apache.mina.statemachine.annotation.State} annotation to define * your states and then let {@link StateMachineFactory} create a  * {@link StateMachine} for you. * * @author The Apache MINA Project (dev@mina.apache.org) * @version $Rev: 641052 $, $Date: 2008-03-25 23:22:35 +0100 (Tue, 25 Mar 2008) $ */public class StateMachine {    private static final Logger log = LoggerFactory.getLogger(StateMachine.class);    private static final String CALL_STACK = StateMachine.class.getName() + ".callStack";    private final State startState;    private final Map<String, State> states;    private final ThreadLocal<Boolean> processingThreadLocal = new ThreadLocal<Boolean>() {        protected Boolean initialValue() {            return Boolean.FALSE;        }    };    private final ThreadLocal<LinkedList<Event>> eventQueueThreadLocal = new ThreadLocal<LinkedList<Event>>() {        protected LinkedList<Event> initialValue() {            return new LinkedList<Event>();        }    };        /**     * Creates a new instance using the specified {@link State}s and start     * state.     *      * @param states the {@link State}s.     * @param startStateId the id of the start {@link State}.     */    public StateMachine(State[] states, String startStateId) {        this.states = new HashMap<String, State>();        for (State s : states) {            this.states.put(s.getId(), s);        }        this.startState = getState(startStateId);    }    /**     * Creates a new instance using the specified {@link State}s and start     * state.     *      * @param states the {@link State}s.     * @param startStateId the id of the start {@link State}.     */    public StateMachine(Collection<State> states, String startStateId) {        this(states.toArray(new State[0]), startStateId);    }        /**     * Returns the {@link State} with the specified id.     *      * @param id the id of the {@link State} to return.     * @return the {@link State}     * @throws NoSuchStateException if no matching {@link State} could be found.     */    public State getState(String id) throws NoSuchStateException {        State state = states.get(id);        if (state == null) {            throw new NoSuchStateException(id);        }        return state;    }    /**     * Returns an unmodifiable {@link Collection} of all {@link State}s used by     * this {@link StateMachine}.     *      * @return the {@link State}s.     */    public Collection<State> getStates() {        return Collections.unmodifiableCollection(states.values());    }        /**     * Processes the specified {@link Event} through this {@link StateMachine}.     * Normally you wouldn't call this directly but rather use     * {@link StateMachineProxyBuilder} to create a proxy for an interface of     * your choice. Any method calls on the proxy will be translated into     * {@link Event} objects and then fed to the {@link StateMachine} by the     * proxy using this method.     *      * @param event the {@link Event} to be handled.     */    public void handle(Event event) {        StateContext context = event.getContext();        synchronized (context) {            LinkedList<Event> eventQueue = eventQueueThreadLocal.get();            eventQueue.addLast(event);            if (processingThreadLocal.get()) {                /*                 * This thread is already processing an event. Queue this                  * event.                 */                if (log.isDebugEnabled()) {                    log.debug("State machine called recursively. Queuing event " + event                            + " for later processing.");                }            } else {                processingThreadLocal.set(true);                try {                    if (context.getCurrentState() == null) {                        context.setCurrentState(startState);                    }                    processEvents(eventQueue);                } finally {                    processingThreadLocal.set(false);                }            }        }    }    private void processEvents(LinkedList<Event> eventQueue) {        while (!eventQueue.isEmpty()) {            Event event = eventQueue.removeFirst();            StateContext context = event.getContext();            handle(context.getCurrentState(), event);        }    }        private void handle(State state, Event event) {        StateContext context = event.getContext();        for (Transition t : state.getTransitions()) {            if (log.isDebugEnabled()) {                log.debug("Trying transition " + t);            }            try {                if (t.execute(event)) {                    if (log.isDebugEnabled()) {                        log.debug("Transition " + t + " executed successfully.");                    }                    setCurrentState(context, t.getNextState());                    return;                }            } catch (BreakAndContinueException bace) {                if (log.isDebugEnabled()) {                    log.debug("BreakAndContinueException thrown in "                             + "transition " + t                            + ". Continuing with next transition.");                }            } catch (BreakAndGotoException bage) {                State newState = getState(bage.getStateId());                if (bage.isNow()) {                    if (log.isDebugEnabled()) {                        log.debug("BreakAndGotoException thrown in "                                 + "transition " + t + ". Moving to state "                                + newState.getId() + " now.");                    }                    setCurrentState(context, newState);                    handle(newState, event);                } else {                    if (log.isDebugEnabled()) {                        log.debug("BreakAndGotoException thrown in "                                 + "transition " + t + ". Moving to state "                                + newState.getId() + " next.");                    }                    setCurrentState(context, newState);                }                return;            } catch (BreakAndCallException bace) {                State newState = getState(bace.getStateId());                Stack<State> callStack = getCallStack(context);                State returnTo = bace.getReturnToStateId() != null                     ? getState(bace.getReturnToStateId())                     : context.getCurrentState();                callStack.push(returnTo);                if (bace.isNow()) {                    if (log.isDebugEnabled()) {                        log.debug("BreakAndCallException thrown in "                                 + "transition " + t + ". Moving to state "                                + newState.getId() + " now.");                    }                    setCurrentState(context, newState);                    handle(newState, event);                } else {                    if (log.isDebugEnabled()) {                        log.debug("BreakAndCallException thrown in "                                 + "transition " + t + ". Moving to state "                                + newState.getId() + " next.");                    }                    setCurrentState(context, newState);                }                return;            } catch (BreakAndReturnException bare) {                Stack<State> callStack = getCallStack(context);                State newState = callStack.pop();                if (bare.isNow()) {                    if (log.isDebugEnabled()) {                        log.debug("BreakAndReturnException thrown in "                                 + "transition " + t + ". Moving to state "                                + newState.getId() + " now.");                    }                    setCurrentState(context, newState);                    handle(newState, event);                } else {                    if (log.isDebugEnabled()) {                        log.debug("BreakAndReturnException thrown in "                                 + "transition " + t + ". Moving to state "                                + newState.getId() + " next.");                    }                    setCurrentState(context, newState);                }                return;            }        }        /*         * No transition could handle the event. Try with the parent state if         * there is one.         */        if (state.getParent() != null) {            handle(state.getParent(), event);        } else {            throw new UnhandledEventException(event);        }    }    private Stack<State> getCallStack(StateContext context) {        @SuppressWarnings("unchecked")        Stack<State> callStack = (Stack<State>) context.getAttribute(CALL_STACK);        if (callStack == null) {            callStack = new Stack<State>();            context.setAttribute(CALL_STACK, callStack);        }        return callStack;    }    private void setCurrentState(StateContext context, State newState) {        if (newState != null) {            if (log.isDebugEnabled()) {                if (newState != context.getCurrentState()) {                    log.debug("Leaving state " + context.getCurrentState().getId());                    log.debug("Entering state " + newState.getId());                }            }            context.setCurrentState(newState);        }    }    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕不卡的av| 亚洲国产成人自拍| 色综合天天在线| 国产成人精品免费视频网站| 国产揄拍国内精品对白| 国产一区二区剧情av在线| 免费成人在线网站| 国产一区二区在线电影| 成人综合在线观看| 色婷婷综合久久久中文一区二区| 色综合视频一区二区三区高清| 91高清在线观看| 欧美精品丝袜久久久中文字幕| 欧美一级精品大片| 久久久久国产免费免费| 中文字幕av一区二区三区| 国产精品理论在线观看| 亚洲精品乱码久久久久| 视频在线观看国产精品| 国产一区视频在线看| 高潮精品一区videoshd| 色综合婷婷久久| 制服视频三区第一页精品| 亚洲精品一线二线三线无人区| 国产精品黄色在线观看| 亚洲va国产天堂va久久en| 国产制服丝袜一区| 色婷婷综合久久| 日韩午夜精品视频| 国产精品国产馆在线真实露脸| 亚洲一卡二卡三卡四卡五卡| 激情图片小说一区| 99久久国产综合精品女不卡| 欧美精品丝袜中出| 中文字幕日韩精品一区| 免费在线观看日韩欧美| av色综合久久天堂av综合| 欧美日韩精品高清| 国产精品看片你懂得| 美腿丝袜一区二区三区| 99精品视频中文字幕| 日韩精品自拍偷拍| 亚洲精品成人悠悠色影视| 激情文学综合网| 欧美日韩成人一区| 亚洲色图一区二区三区| 国内精品久久久久影院一蜜桃| 欧美午夜在线观看| 国产精品免费视频网站| 久久精品国产网站| 欧美美女激情18p| 一区在线观看视频| 国产精品亚洲第一区在线暖暖韩国| 欧美日韩大陆一区二区| 亚洲日本中文字幕区| 国产河南妇女毛片精品久久久| 欧美日韩不卡在线| 亚洲一区二区偷拍精品| 福利电影一区二区| 91精品国产色综合久久| 亚洲午夜久久久久久久久电影网| 国产jizzjizz一区二区| 精品国产乱码久久久久久闺蜜| 一区二区三区四区av| 岛国精品在线观看| 久久久久久久综合狠狠综合| 日本aⅴ免费视频一区二区三区| 欧美日韩亚洲另类| 亚洲综合图片区| 欧美性生交片4| 亚洲国产精品久久久久秋霞影院| 91日韩一区二区三区| 日韩美女精品在线| 91美女福利视频| 亚洲男人的天堂在线aⅴ视频| 91免费国产视频网站| 亚洲女同一区二区| 在线观看精品一区| 午夜天堂影视香蕉久久| 欧美剧情片在线观看| 日韩精品乱码免费| 欧美成人国产一区二区| 国产成人亚洲精品青草天美| 国产精品午夜久久| 色综合久久88色综合天天免费| 亚洲人精品午夜| 欧美老肥妇做.爰bbww视频| 香蕉影视欧美成人| 欧美mv和日韩mv国产网站| 国产精品一二二区| 中文字幕在线播放不卡一区| 日本二三区不卡| 日韩av中文字幕一区二区| 精品国产自在久精品国产| 精品一区二区综合| 国产精品毛片a∨一区二区三区| 色网站国产精品| 首页国产丝袜综合| 国产亚洲精品aa午夜观看| 色婷婷综合在线| 日韩精品久久久久久| 欧美国产激情二区三区| 在线观看免费成人| 精品亚洲国产成人av制服丝袜| 国产精品黄色在线观看| 欧美日韩精品一区视频| 国产老女人精品毛片久久| 亚洲欧美电影院| 欧美成人aa大片| 在线影视一区二区三区| 麻豆精品一区二区三区| 中文字幕不卡三区| 91精品国产91久久久久久一区二区| 国产一区在线不卡| 亚洲福利视频导航| 欧美激情在线观看视频免费| 欧美日韩一区二区在线视频| 国产盗摄女厕一区二区三区| 亚洲成a人在线观看| 久久久www成人免费毛片麻豆| 91福利在线导航| 国产精品影视网| 日韩av电影天堂| 亚洲色大成网站www久久九九| 日韩精品中文字幕一区二区三区 | 亚洲品质自拍视频网站| 51午夜精品国产| 99re这里只有精品6| 精油按摩中文字幕久久| 亚洲黄色在线视频| 中文字幕欧美国产| 欧美一区二区三区白人| 在线精品视频免费播放| 成人av午夜影院| 国内不卡的二区三区中文字幕| 天天亚洲美女在线视频| 一区二区三区美女| 最新久久zyz资源站| 久久久精品国产免费观看同学| 欧美日韩成人在线| 欧美在线视频你懂得| 一本色道a无线码一区v| 成人一级视频在线观看| a级高清视频欧美日韩| 国产一区二区三区观看| 秋霞电影网一区二区| 亚洲成人自拍一区| 亚洲精品久久久蜜桃| 亚洲欧美日韩国产综合| 成人免费在线视频观看| 国产精品美女久久久久高潮| 日本一区二区三区在线观看| 精品国产一二三区| 久久综合色天天久久综合图片| 欧美一区二区人人喊爽| 在线不卡a资源高清| 91 com成人网| 日韩一卡二卡三卡四卡| 欧美大肚乱孕交hd孕妇| 亚洲精品一区二区三区99| www久久精品| 国产精品久久一级| 亚洲同性同志一二三专区| 日韩理论片网站| 亚洲一区二区av电影| 亚洲国产视频在线| 日韩高清在线观看| 国产在线精品视频| 成人免费高清视频在线观看| 成人综合在线视频| 色av成人天堂桃色av| 欧美美女一区二区在线观看| 欧美一级淫片007| 久久理论电影网| 亚洲精品乱码久久久久| 丝袜美腿高跟呻吟高潮一区| 精品在线观看视频| av电影在线不卡| 7777精品伊人久久久大香线蕉的| 日韩女优电影在线观看| 国产欧美日韩视频一区二区| 成人欧美一区二区三区视频网页| 夜夜精品浪潮av一区二区三区| 日本美女一区二区| 国产成人激情av| 欧美日韩免费一区二区三区| 日韩女优制服丝袜电影| 国产精品乱码一区二区三区软件| 亚洲影院久久精品| 国产一区二区剧情av在线| 91在线观看污| 精品久久久久一区| 亚洲综合色视频| 国产精品一级二级三级| 欧美在线你懂的| 国产日韩欧美a| 美女在线观看视频一区二区| 91在线观看地址| 久久久综合视频| 人人超碰91尤物精品国产|