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

📄 udpserviceimpl.java

📁 一个实用工具类
💻 JAVA
字号:
/* * Copyright (C) butor.com. All rights reserved. * * This software is published under the terms of the GNU Library General * Public License (GNU LGPL), a copy of which has been included with this * distribution in the LICENSE.txt file.  */package org.butor.net.udp;import java.net.SocketException;import java.util.Hashtable;import org.butor.config.Config;import org.butor.config.lowlevel.IProperties;import org.butor.fwService.FwServiceImpl;import org.butor.log.Log;import org.butor.net.udp.service.IUDPSocketReceiver;import org.butor.net.udp.service.UDPSocketReceiver;import org.butor.resourcePool.threadPoolService.ThreadPool;/** * This service starts a thread that listens on the UDP port * specified by udp_port in the main config file.  The datagram's * content must be composed of a org.butor.web.listener name followed by a space * and the command to pass to that org.butor.web.listener.  The command is then * passed to the appropriate org.butor.web.listener. * * @author Filipe Mateus */public class UDPServiceImpl	extends FwServiceImpl	implements IUDPService, IUDPSocketReceiver {		/**	 * Table of listeners accessible by service id.	 */	protected Hashtable f_listeners = new Hashtable();	protected UDPSocketReceiver f_udpReceiver;	protected int f_udpPort;	protected int f_bufferLen;		/* 	 * Send message to all registered listeners if not in single 	 * org.butor.web.listener mode. If in single org.butor.web.listener mode then send message 	 * to the specified org.butor.web.listener only.	 */	protected boolean f_singleListenerMode = false;		/**	 * Adds the specified udp org.butor.web.listener to receive datagram events.	 * 	 * @param org.butor.web.listener Object that will receive datagram events.	 */	public void registerUdpMessageListener(IUDPMessageListener listener) {		String name = listener.getUdpMessageListenerName();		Log.logStr(			Log.LOG_LEVEL_LOW,			this,			Log.LOG_TYPE_INFO,			"registerListener()",			"registering " + name);		synchronized(f_listeners) {			if (f_listeners.containsKey(name)) {				Log.logStr(					this,					Log.LOG_TYPE_WARN,					"registerListener()",					name + " already registered");				return;			}					f_listeners.put(name, listener);		}	}	/**	 * Remove the specified udp org.butor.web.listener.	 * 	 * @param org.butor.web.listener Object that will be unregistered.	 */	public void unregisterUdpMessageListener(IUDPMessageListener listener) {		String name = listener.getUdpMessageListenerName();		Log.logStr(			Log.LOG_LEVEL_LOW,			this,			Log.LOG_TYPE_INFO,			"unregisterListener()",			"registering " + name);		synchronized(f_listeners) {			if (!f_listeners.containsKey(name)) {				Log.logStr(					this,					Log.LOG_TYPE_WARN,					"unregisterListener()",					name + " was not registered!");				return;			}					f_listeners.remove(name);		}	}	/**	 * Gets the Hashtable containing the list of listeners.	 * key: Listener name, value: IUDPListener object.	 */	public Hashtable getListeners() {		return f_listeners;	}	/**	 * Get registered org.butor.web.listener.	 * 	 * @param name String, org.butor.web.listener name.	 * 	 * @return IAdminMessageHandler	 */	public IUDPMessageListener getUdpMessageListener(String name) {		if (name == null) {			Log.logStr(this, Log.LOG_TYPE_ERROR, "getUdpMessageListener()", 				"Got null org.butor.web.listener name!");			return null;		}				synchronized(f_listeners) {			return (IUDPMessageListener)f_listeners.get(name);		}	}	/**	 * 	 */	public void init() {		Log.logStr(this, Log.LOG_TYPE_INFO, "init()", "...");				// get service config.		IProperties serviceProps = Config.getPropertyList(			FwServiceImpl.PROPERTY_PREFIX_SERVICE +getServiceName());			if (serviceProps == null) {			Log.logStr(				this,				Log.LOG_TYPE_ERROR,				"init()",				"Missing property list [" 					+ FwServiceImpl.PROPERTY_PREFIX_SERVICE +getServiceName()					+ "]");				return;							} else {			f_udpPort = serviceProps.getPropertyInt(UDPService.PROPERTY_LISTEN_PORT, 0);			f_bufferLen = serviceProps.getPropertyInt(UDPService.PROPERTY_BUFFER_LENGTH, 0);			/* 			 * Send message to all registered listeners if not in single 			 * org.butor.web.listener mode. If in single org.butor.web.listener mode then send message 			 * to the specified org.butor.web.listener only.			 */			f_singleListenerMode = serviceProps.getPropertyBoolean(UDPService.PROPERTY_SINGLE_LISTENER_MODE, true);		}				try {			f_udpReceiver = new UDPSocketReceiver(f_udpPort, f_bufferLen, this);					} catch (SocketException e) {			Log.logStr(this, Log.LOG_TYPE_ERROR, "init()", 			"Can't start because of error: " +e.getMessage());			return;		}	}	/**	 * 	 */	public void isAlive() {		Log.logStr(Log.LOG_LEVEL_FULL, this, Log.INFO, "isAlive", "I'm alive ...");	}	/**	 * Splits the org.butor.web.listener name from the command and invokes	 * the appropriate org.butor.web.listener.	 *	 * @param command Raw content of the received datagram containing	 *					the org.butor.web.listener's name followed by the command.	 */	public void handleUDPMessage(String udpMessage) {		UDPMessageDispatcher dispatcher = new UDPMessageDispatcher(udpMessage);		ThreadPool.run(dispatcher);	}	/**	 * 	 */	public void shutdown() {		unregisterFromService();		if (f_udpReceiver != null) {			f_udpReceiver.shutdown();		}	}	/**	 * Tell if the service is started in single org.butor.web.listener mode.	 * 	 * message will be sent to all registered listeners if in single 	 * org.butor.web.listener mode. If not then message will be send to the 	 * specified org.butor.web.listener only.	 *	 * @return boolean.	 */	public boolean isSingleListenerMode() {		return f_singleListenerMode;	}		/**	 * Returns the port number on which datagrams are listened.	 * 	 * @return port number	 */		public int getListenPort() {		return f_udpPort;	}}

⌨️ 快捷键说明

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