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

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

?? eventdispatcher.java

?? stun的java實現(xiàn)
?? JAVA
字號:

/*
 * Stun4j, the OpenSource Java Solution for NAT and Firewall Traversal.
 *
 * Distributable under LGPL license.
 * See terms of license at gnu.org.
 */
package net.java.stun4j.stack;

import java.util.*;

import net.java.stun4j.*;

/**
 * This is a utility class used for dispatching incoming request events. We use
 * this class mainly (and probably solely) for its ability to handle listener
 * proxies  (i.e. listeners interested in requests recevied on a particular
 * NetAccessPoint only).
 *
 * @author Emil Ivov
 */
public class EventDispatcher
{

    /**
     * All property change listeners registered so far.
     */
    private Vector requestListeners;

    /**
     * Hashtable for managing property change listeners registered for specific
     * properties. Maps property names to PropertyChangeSupport objects.
     */
    private Hashtable requestListenersChildren;

    /**
     * Constructs an <code>EventDispatcher</code> object.
     */
    public EventDispatcher()
    {
    }

    /**
     * Add a RequestListener to the listener list. The listener is registered
     * for requests coming from no matter which NetAccessPoint.
     *
     * @param listener  The ReuqestListener to be added
     */
    public synchronized void addRequestListener(RequestListener listener)
    {
        if (requestListeners == null)
        {
            requestListeners = new Vector();
        }

        requestListeners.addElement(listener);
    }

    /**
     * Add a RequestListener for a specific NetAccessPoint. The listener
     * will be invoked only when a call on fireRequestReceived is issued for
     * that specific NetAccessPoint.
     *
     * @param descriptor  The NETAP descriptor that we're interested in.
     * @param listener  The ConfigurationChangeListener to be added
     */

    public synchronized void addRequestListener(
        NetAccessPointDescriptor descriptor,
        RequestListener listener)
    {
        if (requestListenersChildren == null)
        {
            requestListenersChildren = new Hashtable();
        }
        EventDispatcher child = (EventDispatcher) requestListenersChildren.get(
            descriptor);
        if (child == null)
        {
            child = new EventDispatcher();
            requestListenersChildren.put(descriptor, child);
        }
        child.addRequestListener(listener);
    }

    /**
     * Remove a RquestListener from the listener list.
     * This removes a RequestListener that was registered
     * for all NetAccessPoints and would not remove lsiteners registered for
     * specific NetAccessPointDescriptors.
     *
     * @param listener The RequestListener to be removed
     */
    public synchronized void removeRequestListener(
        RequestListener listener)
    {

        if (requestListeners == null)
        {
            return;
        }
        requestListeners.removeElement(listener);
    }

    /**
     * Remove a RequestListener for a specific NetAccessPointDescriptor. This
     * would only remove the listener for the specified NetAccessPointDescriptor
     * and would not remove it if it was also registered as a wildcard listener.
     *
     * @param apDescriptor  The NetAPDescriptor that was listened on.
     * @param listener  The RequestListener to be removed
     */
    public synchronized void removeRequestListener(
        NetAccessPointDescriptor apDescriptor,
        RequestListener listener)
    {
        if (requestListenersChildren == null)
        {
            return;
        }
        EventDispatcher child =
            (EventDispatcher)requestListenersChildren.get( apDescriptor );

        if (child == null)
        {
            return;
        }
        child.removeRequestListener(listener);
    }


    /**
     * Dispatch a StunMessageEvent to any registered listeners.
     *
     * @param evt  The request event to be delivered.
     */
    public void fireMessageEvent(StunMessageEvent evt)
    {
        NetAccessPointDescriptor apDescriptor = evt.getSourceAccessPoint();
        if (requestListeners != null)
        {
            Iterator iterator = requestListeners.iterator();
            while (iterator.hasNext())
            {
                RequestListener target =
                    (RequestListener) iterator.next();
                target.requestReceived(evt);
            }
        }

        if (requestListenersChildren != null && apDescriptor != null)
        {
            EventDispatcher child = (EventDispatcher) requestListenersChildren.
                                                            get(apDescriptor);
            apDescriptor.getAddress().toString();

            Enumeration enumer = requestListenersChildren.elements();
            while (enumer.hasMoreElements())
            {
                Object item = (Object) enumer.nextElement();

            }

            if (child != null)
            {
                child.fireMessageEvent(evt);
            }
        }
    }

    /**
     * Check if there are any listeners for a specific NetAccessPointDescriptor.
     * (Generic listeners count as well)
     *
     * @param apDescriptor  the NetAccessPointDescriptor.
     * @return true if there are one or more listeners for the specified
     * NetAccessPointDescriptor
     */
    public synchronized boolean hasRequestListeners(
        NetAccessPointDescriptor apDescriptor)
    {
        if(requestListeners != null && !requestListeners.isEmpty())
        {
            // there is a generic listener
            return true;
        }
        if (requestListenersChildren != null)
        {
            EventDispatcher child = (EventDispatcher)
                requestListenersChildren.get(apDescriptor);
            if (child != null && child.requestListeners != null)
            {
                return!child.requestListeners.isEmpty();
            }
        }
        return false;
    }

    /**
     * Removes (absolutely all listeners for this event dispatcher).
     */
    public void removeAllListeners()
    {
        if(requestListeners != null)
            requestListeners.removeAllElements();
        requestListenersChildren = null;
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人99免费视频| 欧美日韩免费视频| 中文字幕av免费专区久久| 日本在线播放一区二区三区| 欧美日韩一区在线观看| 亚洲在线免费播放| 欧美亚洲一区二区在线观看| 亚洲影视在线播放| 欧美日韩国产一区| 日韩中文字幕亚洲一区二区va在线 | 亚洲天天做日日做天天谢日日欢| 久久不见久久见免费视频7 | 成人性生交大片免费看视频在线 | 色综合久久天天| 中文字幕一区二区三区乱码在线| 成人免费的视频| 亚洲女人****多毛耸耸8| 99久久久免费精品国产一区二区| 欧美国产成人在线| 91免费国产视频网站| 亚洲综合网站在线观看| 欧美日韩精品一区二区在线播放| 天堂蜜桃一区二区三区| 欧美变态口味重另类| 国产大片一区二区| 亚洲图片另类小说| 欧美美女网站色| 激情丁香综合五月| 久久久久久久久久久久久夜| 国产一区二区精品久久| 精品日韩一区二区三区| 国产1区2区3区精品美女| **欧美大码日韩| 欧美裸体一区二区三区| 成人永久aaa| 一区二区三区美女视频| 欧美一区二区美女| 国产一区二区网址| 亚洲精品视频免费观看| 欧美一区二区网站| 国产91精品精华液一区二区三区| 一区二区三区国产| 亚洲精品一区二区三区四区高清 | 色综合久久天天| 青青青爽久久午夜综合久久午夜| 久久精品一区二区三区四区| 色嗨嗨av一区二区三区| 日韩电影免费在线观看网站| 国产精品久线在线观看| 3d成人动漫网站| 久久99深爱久久99精品| 中文字幕日韩一区二区| 欧美不卡在线视频| 在线观看亚洲成人| 国产精品资源在线看| 亚洲一区二区视频在线| 精品欧美久久久| 在线视频亚洲一区| 国产a视频精品免费观看| 日日夜夜精品视频天天综合网| 国产亚洲视频系列| 91精品国产高清一区二区三区| 99re在线视频这里只有精品| 九色综合狠狠综合久久| 国产精品久线在线观看| 91.com视频| heyzo一本久久综合| 久久er99热精品一区二区| 亚洲影视资源网| 国产精品人人做人人爽人人添| 欧美一区二区三区在线观看| 在线免费av一区| 成人一区二区三区| 国内久久精品视频| 日本不卡一二三区黄网| 樱花影视一区二区| 国产精品国产自产拍高清av | 国产一区二区0| 日韩国产成人精品| 亚洲电影激情视频网站| 亚洲另类色综合网站| 日本一区二区三区电影| 欧美大胆一级视频| 欧美色偷偷大香| 在线观看日韩电影| 色噜噜狠狠成人中文综合 | 成人一级片网址| 国产精品亚洲第一区在线暖暖韩国| 免费日韩伦理电影| 日本va欧美va瓶| 亚洲综合在线视频| 久久久精品日韩欧美| 精品99一区二区| 26uuu国产一区二区三区| 日韩久久久久久| 日韩欧美亚洲另类制服综合在线 | 色视频一区二区| 99精品久久久久久| 99r国产精品| 91免费版pro下载短视频| 一本一道波多野结衣一区二区| 国产一区二区不卡在线| 天天综合日日夜夜精品| 亚洲午夜一区二区| 亚洲一区二区三区国产| 亚洲国产一区二区三区青草影视| 亚洲午夜在线电影| 日韩av午夜在线观看| 久久精品国产色蜜蜜麻豆| 久久国产麻豆精品| 狠狠色2019综合网| 国产v综合v亚洲欧| www.欧美日韩| 91久久精品网| 91精品国产乱码久久蜜臀| 欧美成人a在线| 亚洲欧洲日韩在线| 午夜精品爽啪视频| 国产一区二三区| 99riav一区二区三区| 欧美日韩一区二区三区视频| 精品久久久久久久一区二区蜜臀| 久久久www成人免费毛片麻豆| 亚洲同性gay激情无套| 日欧美一区二区| 国产不卡免费视频| 欧美色综合影院| 久久久国产精品麻豆| 亚洲精品国久久99热| 日本免费在线视频不卡一不卡二| 国产精品538一区二区在线| 色美美综合视频| 欧美成人一区二区三区在线观看| 国产精品色眯眯| 午夜欧美大尺度福利影院在线看| 国产精品乡下勾搭老头1| 色婷婷av一区二区三区之一色屋| 日韩一区二区免费电影| 中文无字幕一区二区三区| 亚洲高清中文字幕| 国产a久久麻豆| 欧美一区二区三区日韩视频| 国产精品乱子久久久久| 秋霞成人午夜伦在线观看| av在线这里只有精品| 日韩精品一区二区三区swag | 在线不卡中文字幕播放| 久久久国际精品| 亚洲va中文字幕| 99精品在线观看视频| 精品久久久久久亚洲综合网| 亚洲在线观看免费| 粉嫩久久99精品久久久久久夜| 91精品国产aⅴ一区二区| 中文字幕一区免费在线观看| 日韩中文欧美在线| 91香蕉视频污在线| 国产亚洲一区二区三区四区 | 婷婷一区二区三区| 91免费看`日韩一区二区| 久久久久久麻豆| 五月婷婷综合在线| 色综合天天综合网天天看片| 国产亚洲综合在线| 久久99精品久久久久| 欧美一区二区视频在线观看2022| 亚洲乱码国产乱码精品精可以看| 粉嫩av一区二区三区在线播放| 亚洲精品一区在线观看| 日韩av二区在线播放| 日韩欧美在线影院| 国产伦精品一区二区三区免费| 久久精品欧美一区二区三区不卡| 国产精品白丝jk白祙喷水网站| 久久久三级国产网站| 国产成人精品免费| 国产精品视频免费| 91网站在线观看视频| 一区二区三区四区乱视频| 欧美狂野另类xxxxoooo| 蜜臀av性久久久久蜜臀aⅴ| 精品国产99国产精品| 国产精品一区二区在线看| 国产精品国模大尺度视频| 91麻豆免费看| 日韩福利电影在线| 精品国产乱码久久| 成人黄色av网站在线| 亚洲在线成人精品| 欧美刺激脚交jootjob| 成人一区二区三区中文字幕| 一区二区三区不卡视频| 欧美一区二区观看视频| 国产一区二区剧情av在线| 亚洲视频在线一区| 欧美一级一区二区| 成人国产在线观看| 日产国产欧美视频一区精品| 国产欧美精品一区二区色综合| 欧美性做爰猛烈叫床潮|