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

📄 actualudpmessenger.java

📁 High performance DB query
💻 JAVA
字号:
/* * @(#)$Id: ActualUDPMessenger.java,v 1.3 2004/07/02 23:59:22 huebsch Exp $ * * Copyright (c) 2001-2004 Regents of the University of California. * All rights reserved. * * This file is distributed under the terms in the attached BERKELEY-LICENSE * file. If you do not find these files, copies can be found by writing to: * Computer Science Division, Database Group, Universite of California, * 617 Soda Hall #1776, Berkeley, CA 94720-1776. Attention: Berkeley License * * Copyright (c) 2003-2004 Intel Corporation. All rights reserved. * * This file is distributed under the terms in the attached INTEL-LICENSE file. * If you do not find these files, copies can be found by writing to: * Intel Research Berkeley, 2150 Shattuck Avenue, Suite 1300, * Berkeley, CA, 94704.  Attention:  Intel License Inquiry. */package runtime.services.network.udp;import execution.EndExecution;import java.net.InetSocketAddress;import java.nio.channels.DatagramChannel;import java.util.HashMap;import java.util.LinkedList;import java.util.Vector;import services.LocalNode;import services.network.Payload;import services.network.udp.UDPClient;import services.network.udp.UDPMessenger;/** * Class ActualUDPMessenger * */public class ActualUDPMessenger implements UDPMessenger {    private Object syncObject;    private Vector listeners;    private HashMap listenersClients, listenersTable, sendChannels;    private LinkedList queuedData;    private int objectInputBufferSize;    protected Object udpSync;    private ActualUDPThread runner;    /**     * Constructor ActualUDPMessenger     *     * @param syncObject     * @param sleepTime     * @param objectInputBufferSize     */    public ActualUDPMessenger(Object syncObject, long sleepTime,                              int objectInputBufferSize) {        this.syncObject = syncObject;        this.objectInputBufferSize = objectInputBufferSize;        this.listeners = new Vector();        this.listenersClients = new HashMap();        this.listenersTable = new HashMap();        this.sendChannels = new HashMap();        this.queuedData = new LinkedList();        // Setup thread to listen for new incoming data        runner = new ActualUDPThread(this, listeners, sendChannels, queuedData,                                     sleepTime, objectInputBufferSize);        runner.start();    }    /**     * Method send     *     * @param destination     * @param payload     */    public void send(InetSocketAddress destination, Payload payload) {        send(null, destination, payload);    }    /**     * Method send     *     * @param source     * @param destination     * @param payload     */    public void send(InetSocketAddress source, InetSocketAddress destination,                     Payload payload) {        QueuedData data = QueuedData.allocate(payload, source, destination);        queuedData.add(data);    }    /**     * Method listen     *     * @param portNumber     * @param client     * @return     */    public boolean listen(Integer portNumber, UDPClient client) {        // Retrieve existing listener if it exists        DatagramChannel theListener =            (DatagramChannel) listenersTable.get(portNumber);        if (theListener == null) {            try {                theListener = DatagramChannel.open();                InetSocketAddress listenSocket =                    new InetSocketAddress(LocalNode.myIPAddress,                                          portNumber.intValue());                theListener.socket().bind(listenSocket);                theListener.configureBlocking(false);                listeners.add(theListener);                listenersTable.put(portNumber, theListener);                listenersClients.put(portNumber, client);                sendChannels.put(listenSocket, theListener);                return true;            } catch (Exception exception) {                throw new RuntimeException(                    "UDPMESSENGER: Unable to listen on UDP port: " + portNumber                    + "(" + exception.getMessage() + ")");            }        } else {            return false;        }    }    /**     * Method release     *     * @param portNumber     */    public void release(Integer portNumber) {        DatagramChannel theListener =            (DatagramChannel) listenersTable.remove(portNumber);        if (theListener != null) {            listeners.remove(theListener);            listenersClients.remove(portNumber);            try {                theListener.close();            } catch (Exception e) {}        }    }    /**     * Method runEvent     *     * @param localPort     * @param remoteIPAddress     * @param data     */    protected void runEvent(int localPort, InetSocketAddress remoteIPAddress,                            Payload data) {        // run the event        synchronized (syncObject) {            try {                UDPClient client =                    (UDPClient) listenersClients.get(new Integer(localPort));                client.handleUDPNetwork(remoteIPAddress, data);            } catch (Exception exception) {                EndExecution.masterSync = exception;                runner.end();            }        }    }}

⌨️ 快捷键说明

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