## Uses of Interface
net.i2p.util.EventDispatcher

- Packages that use EventDispatcher
  Package | Description
  --- | ---
  net.i2p.i2ptunnel | Implementation of preconfigured tunnels for both clients and servers, with a comprehensive UI for tunnel management and configuration.
  net.i2p.i2ptunnel.irc | IRC-specific tunnel enhancements including protocol filters and DCC (Direct Client-to-Client) connection handlers for IRC client tunnels.
  net.i2p.i2ptunnel.socks | SOCKS protocol tunnel implementation for I2P, supporting SOCKS 4, 4a, and 5.
  net.i2p.i2ptunnel.streamr | Special-purpose tunnels for streaming UDP clients and servers, optimized for audio and video streaming applications.
  net.i2p.i2ptunnel.udpTunnel | UDP tunnel implementation for I2PTunnel.
  net.i2p.util | Core utility classes and helper functions used throughout the I2P router and applications.

- - ### Uses of EventDispatcher in net.i2p.i2ptunnel

    Classes in net.i2p.i2ptunnel that implement EventDispatcher
    Modifier and Type | Class and Description
    --- | ---
    `class` | `I2Ping` I2P ping utility for CLI use.
    `class` | `I2PTunnel` Manages I2PTunnelTasks and I2PSessions.
    `class` | `I2PTunnelClient` Standard I2P tunnel client for connecting to I2P destinations
    `class` | `I2PTunnelClientBase` Abstract base class for I2P client tunnels with common functionality.
    `class` | `I2PTunnelConnectClient` SSL tunnel through HTTP proxy using CONNECT method.
    `class` | `I2PTunnelHTTPBidirProxy` HTTP proxy reusing server's I2PSocketManager without outproxy capability.
    `class` | `I2PTunnelHTTPBidirServer` Bidirectional HTTP server tunnel combining server and client functionality.
    `class` | `I2PTunnelHTTPClient` HTTP proxy that tunnels requests through I2P.
    `class` | `I2PTunnelHTTPClientBase` Common things for HTTPClient and ConnectClient Retrofit over them in 0.8.2
    `class` | `I2PTunnelHTTPServer` HTTP server tunnel that filters headers and provides compression.
    `class` | `I2PTunnelIRCClient` IRC client tunnel with DCC support and filtering.
    `class` | `I2PTunnelIRCServer` IRC server tunnel that filters registration to pass client destination hash as hostname.
    `class` | `I2PTunnelServer` Base I2P tunnel server for handling incoming connections.
    `class` | `I2PTunnelTask` Base class for I2P tunnel servers and clients.

    Constructors in net.i2p.i2ptunnel with parameters of type EventDispatcher
    Constructor and Description
    `I2Ping(Logging l, boolean ownDest, EventDispatcher notifyThis, I2PTunnel tunnel)` tunnel.getOptions must contain "command".
    `I2PTunnelClient(int localPort, String destinations, Logging l, boolean ownDest, EventDispatcher notifyThis, I2PTunnel tunnel, String pkf)` As of 0.9.20 this is fast, and does NOT connect the manager to the router, or open the local socket.
    `I2PTunnelClientBase(int localPort, boolean ownDest, Logging l, EventDispatcher notifyThis, String handlerName, I2PTunnel tunnel)` The main constructor.
    `I2PTunnelClientBase(int localPort, boolean ownDest, Logging l, EventDispatcher notifyThis, String handlerName, I2PTunnel tunnel, String pkf)` Use this to build a client with a persistent private key.
    `I2PTunnelClientBase(int localPort, Logging l, I2PSocketManager sktMgr, I2PTunnel tunnel, EventDispatcher notifyThis, long clientId)` This constructor is used to add a client to an existing socket manager.
    `I2PTunnelConnectClient(int localPort, Logging l, boolean ownDest, String wwwProxy, EventDispatcher notifyThis, I2PTunnel tunnel)` As of 0.9.20 this is fast, and does NOT connect the manager to the router, or open the local socket.
    `I2PTunnelHTTPBidirProxy(int localPort, Logging l, I2PSocketManager sockMgr, I2PTunnel tunnel, EventDispatcher notifyThis, long clientId)` As of 0.9.20 this is fast, and does NOT connect the manager to the router, or open the local socket.
    `I2PTunnelHTTPBidirServer(InetAddress host, int port, int proxyport, File privkey, String privkeyname, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)` Creates a bidirectional HTTP server tunnel with a private key file.
    `I2PTunnelHTTPBidirServer(InetAddress host, int port, int proxyport, InputStream privData, String privkeyname, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)` Creates a bidirectional HTTP server tunnel with an input stream for the private key.
    `I2PTunnelHTTPBidirServer(InetAddress host, int port, int proxyport, String privData, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)` Creates a bidirectional HTTP server tunnel.
    `I2PTunnelHTTPClient(int localPort, Logging l, boolean ownDest, String wwwProxy, EventDispatcher notifyThis, I2PTunnel tunnel)` As of 0.9.20 this is fast, and does NOT connect the manager to the router, or open the local socket.
    `I2PTunnelHTTPClient(int localPort, Logging l, I2PSocketManager sockMgr, I2PTunnel tunnel, EventDispatcher notifyThis, long clientId)` This constructor always starts the tunnel (ignoring the i2cp.delayOpen option).
    `I2PTunnelHTTPClientBase(int localPort, boolean ownDest, Logging l, EventDispatcher notifyThis, String handlerName, I2PTunnel tunnel)`
    `I2PTunnelHTTPClientBase(int localPort, Logging l, I2PSocketManager sktMgr, I2PTunnel tunnel, EventDispatcher notifyThis, long clientId)` This constructor always starts the tunnel (ignoring the i2cp.delayOpen option).
    `I2PTunnelHTTPServer(InetAddress host, int port, File privkey, String privkeyname, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)`
    `I2PTunnelHTTPServer(InetAddress host, int port, InputStream privData, String privkeyname, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)`
    `I2PTunnelHTTPServer(InetAddress host, int port, String privData, String spoofHost, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)`
    `I2PTunnelIRCClient(int localPort, String destinations, Logging l, boolean ownDest, EventDispatcher notifyThis, I2PTunnel tunnel, String pkf)` As of 0.9.20 this is fast, and does NOT connect the manager to the router, or open the local socket.
    `I2PTunnelIRCServer(InetAddress host, int port, File privkey, String privkeyname, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)`
    `I2PTunnelServer(InetAddress host, int port, File privkey, String privkeyname, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)` Non-blocking
    `I2PTunnelServer(InetAddress host, int port, I2PSocketManager sktMgr, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)` Non-blocking
    `I2PTunnelServer(InetAddress host, int port, InputStream privData, String privkeyname, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)` Non-blocking
    `I2PTunnelServer(InetAddress host, int port, String privData, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)` Non-blocking
    `I2PTunnelTask(String name, EventDispatcher notifyThis, I2PTunnel tunnel)`

  - ### Uses of EventDispatcher in net.i2p.i2ptunnel.irc

    Classes in net.i2p.i2ptunnel.irc that implement EventDispatcher
    Modifier and Type | Class and Description
    --- | ---
    `class` | `DCCClientManager` Start, track, and expire the I2PTunnelDCCClients.
    `class` | `EventReceiver` An implementation of the EventDispatcher interface for receiving events via in-line notifyEvent() only.
    `class` | `I2PTunnelDCCClient` A standard client, using an existing socket manager.
    `class` | `I2PTunnelDCCServer` A standard server that only answers for registered ports, and each port can only be used once.

    Methods in net.i2p.i2ptunnel.irc that return EventDispatcher
    Modifier and Type | Method and Description
    --- | ---
    `EventDispatcher` | EventReceiver.`getEventDispatcher()`

    Methods in net.i2p.i2ptunnel.irc with parameters of type EventDispatcher
    Modifier and Type | Method and Description
    --- | ---
    `void` | EventReceiver.`attachEventDispatcher(EventDispatcher ev)`
    `void` | EventReceiver.`detachEventDispatcher(EventDispatcher ev)`

    Constructors in net.i2p.i2ptunnel.irc with parameters of type EventDispatcher
    Constructor and Description
    `DCCClientManager(I2PSocketManager sktMgr, Logging logging, EventDispatcher dispatch, I2PTunnel tunnel)` Create a new manager for DCC client tunnels.
    `I2PTunnelDCCClient(String dest, int localPort, int remotePort, Logging l, I2PSocketManager sktMgr, EventDispatcher notifyThis, I2PTunnel tunnel, long clientId)` As of 0.9.20 this is fast, and does NOT connect the manager to the router, or open the local socket.
    `I2PTunnelDCCServer(I2PSocketManager sktMgr, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)` There's no support for unsolicited incoming I2P connections, so there's no server host or port parameters.

  - ### Uses of EventDispatcher in net.i2p.i2ptunnel.socks

    Classes in net.i2p.i2ptunnel.socks that implement EventDispatcher
    Modifier and Type | Class and Description
    --- | ---
    `class` | `I2PSOCKSIRCTunnel` SOCKS tunnel specialized for IRC traffic with I2P filtering and security.
    `class` | `I2PSOCKSTunnel` SOCKS proxy server that routes TCP connections through I2P network.
    `class` | `SOCKSUDPTunnel` A Datagram Tunnel that can have multiple bidirectional ports on the UDP side.

    Constructors in net.i2p.i2ptunnel.socks with parameters of type EventDispatcher
    Constructor and Description
    `I2PSOCKSIRCTunnel(int localPort, Logging l, boolean ownDest, EventDispatcher notifyThis, I2PTunnel tunnel, String pkf)`
    `I2PSOCKSTunnel(int localPort, Logging l, boolean ownDest, EventDispatcher notifyThis, I2PTunnel tunnel, String pkf)` As of 0.9.20 this is fast, and does NOT connect the manager to the router, or open the local socket.

  - ### Uses of EventDispatcher in net.i2p.i2ptunnel.streamr

    Classes in net.i2p.i2ptunnel.streamr that implement EventDispatcher
    Modifier and Type | Class and Description
    --- | ---
    `class` | `StreamrConsumer` Streamr consumer that acts as an I2P client and UDP server, receiving data from I2P destinations and forwarding it to a configured UDP host/port
    `class` | `StreamrProducer` Streamr producer that acts as an I2P server and UDP client, receiving UDP data on a configured port and forwarding it through I2P

    Constructors in net.i2p.i2ptunnel.streamr with parameters of type EventDispatcher
    Constructor and Description
    `StreamrConsumer(InetAddress host, int port, String destination, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)` Creates a Streamr consumer that receives data from I2P and forwards it to a UDP destination.
    `StreamrProducer(int port, File privkey, String privkeyname, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)` Creates a Streamr producer that receives UDP data and forwards it through I2P.

  - ### Uses of EventDispatcher in net.i2p.i2ptunnel.udpTunnel

    Classes in net.i2p.i2ptunnel.udpTunnel that implement EventDispatcher
    Modifier and Type | Class and Description
    --- | ---
    `class` | `I2PTunnelUDPClientBase` Base client class that sets up an I2P Datagram client destination.
    `class` | `I2PTunnelUDPServerBase` Base client class that sets up an I2P Datagram server destination.

    Constructors in net.i2p.i2ptunnel.udpTunnel with parameters of type EventDispatcher
    Constructor and Description
    `I2PTunnelUDPClientBase(String destination, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)`
    `I2PTunnelUDPServerBase(File privkey, String privkeyname, Logging l, EventDispatcher notifyThis, I2PTunnel tunnel)`

  - ### Uses of EventDispatcher in net.i2p.util

    Classes in net.i2p.util that implement EventDispatcher
    Modifier and Type | Class and Description
    --- | ---
    `class` | `EventDispatcherImpl` An implementation of the EventDispatcher interface.

    Methods in net.i2p.util that return EventDispatcher
    Modifier and Type | Method and Description
    --- | ---
    `EventDispatcher` | EventDispatcher.`getEventDispatcher()` Get an object to be used to deliver events (usually `this`, but YMMV).
    `EventDispatcher` | EventDispatcherImpl.`getEventDispatcher()`

    Methods in net.i2p.util with parameters of type EventDispatcher
    Modifier and Type | Method and Description
    --- | ---
    `void` | EventDispatcher.`attachEventDispatcher(EventDispatcher iev)` Attach an EventDispatcher object to the events dispatching chain.
    `void` | EventDispatcherImpl.`attachEventDispatcher(EventDispatcher ev)`
    `void` | EventDispatcher.`detachEventDispatcher(EventDispatcher iev)` Detach the specified EventDispatcher object from the events dispatching chain.
    `void` | EventDispatcherImpl.`detachEventDispatcher(EventDispatcher ev)`