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

📄 server.java

📁 JMule是一个基于Java开发
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* *  JMule - Java file sharing client *  Copyright (C) 2007-2008 JMule team ( jmule@jmule.org / http://jmule.org ) * *  Any parts of this program derived from other projects, or contributed *  by third-party developers are copyrighted by their respective authors. * *  This program is free software; you can redistribute it and/or *  modify it under the terms of the GNU General Public License *  as published by the Free Software Foundation; either version 2 *  of the License, or (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public License *  along with this program; if not, write to the Free Software *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. * */package org.jmule.core.edonkey.impl;import static org.jmule.core.edonkey.E2DKConstants.SERVER_UDP_PORT;import static org.jmule.core.edonkey.E2DKConstants.SL_DESCRIPTION;import static org.jmule.core.edonkey.E2DKConstants.SL_FILES;import static org.jmule.core.edonkey.E2DKConstants.SL_HARDFILES;import static org.jmule.core.edonkey.E2DKConstants.SL_PING;import static org.jmule.core.edonkey.E2DKConstants.SL_SERVERNAME;import static org.jmule.core.edonkey.E2DKConstants.SL_SOFTFILES;import static org.jmule.core.edonkey.E2DKConstants.SL_SRVMAXUSERS;import static org.jmule.core.edonkey.E2DKConstants.SL_USERS;import static org.jmule.core.edonkey.E2DKConstants.SL_VERSION;import static org.jmule.core.edonkey.E2DKConstants.TAG_TYPE_DWORD;import static org.jmule.core.edonkey.E2DKConstants.TAG_TYPE_STRING;import java.net.InetSocketAddress;import java.util.Date;import java.util.Random;import java.util.Timer;import java.util.TimerTask;import org.jmule.core.JMThread;import org.jmule.core.JMuleCore;import org.jmule.core.JMuleCoreFactory;import org.jmule.core.configmanager.ConfigurationManager;import org.jmule.core.configmanager.ConfigurationManagerFactory;import org.jmule.core.edonkey.E2DKConstants;import org.jmule.core.edonkey.ServerManager;import org.jmule.core.edonkey.ServerManagerFactory;import org.jmule.core.edonkey.packet.Packet;import org.jmule.core.edonkey.packet.PacketFactory;import org.jmule.core.edonkey.packet.UDPPacket;import org.jmule.core.edonkey.packet.UDPPacketFactory;import org.jmule.core.edonkey.packet.scannedpacket.ScannedPacket;import org.jmule.core.edonkey.packet.scannedpacket.ScannedUDPPacket;import org.jmule.core.edonkey.packet.scannedpacket.impl.JMServerFoundSourceSP;import org.jmule.core.edonkey.packet.scannedpacket.impl.JMServerIDChangeSP;import org.jmule.core.edonkey.packet.scannedpacket.impl.JMServerMessageSP;import org.jmule.core.edonkey.packet.scannedpacket.impl.JMServerSearchResultSP;import org.jmule.core.edonkey.packet.scannedpacket.impl.JMServerServerListSP;import org.jmule.core.edonkey.packet.scannedpacket.impl.JMServerStatusSP;import org.jmule.core.edonkey.packet.scannedpacket.impl.JMServerUDPDescSP;import org.jmule.core.edonkey.packet.scannedpacket.impl.JMServerUDPNewDescSP;import org.jmule.core.edonkey.packet.scannedpacket.impl.JMServerUDPStatusSP;import org.jmule.core.edonkey.packet.tag.Tag;import org.jmule.core.edonkey.packet.tag.TagException;import org.jmule.core.edonkey.packet.tag.TagList;import org.jmule.core.edonkey.packet.tag.impl.StandardTag;import org.jmule.core.net.JMConnection;import org.jmule.core.net.JMUDPConnection;import org.jmule.core.net.PacketScanner;import org.jmule.core.peermanager.PeerManagerFactory;import org.jmule.core.searchmanager.SearchManager;import org.jmule.core.searchmanager.SearchManagerFactory;import org.jmule.core.searchmanager.SearchRequest;import org.jmule.core.searchmanager.SearchResult;import org.jmule.core.searchmanager.SearchResultItemList;import org.jmule.core.sharingmanager.SharingManager;import org.jmule.util.Convert;/** * Created on 2007-Nov-07 * @author javajox * @author binary256 * @version $$Revision: 1.14 $$ * Last changed by $$Author: binary256_ $$ on $$Date: 2008/10/14 18:49:10 $$ */public class Server extends JMConnection {		private ClientID clientID = new ClientID(new byte[] { 0, 0, 0, 0 });	private UserHash userHash = ConfigurationManagerFactory.getInstance().getUserHash();	private TagList tagList = new TagList();		private boolean isConnected = false;	private ProcessPacketsThread processPacketsThread = null;		private boolean isStatic = false;		// UDP	private int challenge;	private long challenge_send_time;	private long last_udp_response = System.currentTimeMillis();		private Random random = new Random(); // challenge generator		// Search		private volatile SearchRequest lastSearchQuery;		private volatile SearchRequest nextSearchQuery;		private volatile boolean allowSearch = false;		private Timer server_timer;		private TimerTask search_task;		private TimerTask shared_files_offer_task;	public Server() {				super();	}	public Server(String IPAddress, int port) {		super(IPAddress, port);	}		public Server(ED2KServerLink serverLink) {				super(serverLink.getServerAddress(),serverLink.getServerPort());	}	public Server(String IPAddress, int port, TagList tagList) {		super(IPAddress, port);		this.tagList = tagList;		}	public void start() {	}	public void stop() {			}	private void startSearchTask() {				search_task = new TimerTask() {			int failed_count = 0;						public void run() {								if (failed_count == 5) {										search_task = null;										this.cancel();										return;				}								if (!allowSearch) {										return;									}								if (nextSearchQuery==null) {										failed_count++;										return ;				}								failed_count = 0;								Packet searchQueryPacket = PacketFactory.getSearchPacket(nextSearchQuery.getSearchQuery().getQuery());								lastSearchQuery = nextSearchQuery;				nextSearchQuery = null;								sendPacket(searchQueryPacket);			}};					server_timer.purge();		server_timer.scheduleAtFixedRate(search_task, new Date(System.currentTimeMillis()), ConfigurationManager.SEARCH_QUERY_CHECK_INTERVAL);			}		private void stopServerTimer() {		if (server_timer != null)			server_timer.cancel();	}		private void startSharedFilesOfferTask() {		shared_files_offer_task = new TimerTask() {			SharingManager manager = JMuleCoreFactory.getSingleton().getSharingManager();			public void run() {				if (manager.getUnsharedFiles().size()!=0)					offerFiles();			}		};		server_timer.purge();		server_timer.scheduleAtFixedRate(shared_files_offer_task, new Date(System.currentTimeMillis()), ConfigurationManager.SHARED_FILES_PUBLISH_INTERVAL);	}		public ED2KServerLink getServerLink() {				return new ED2KServerLink(getAddress(),getPort());			}		public byte[] getServerIPAddress() {		return getRemoteIPAddress();	}	public ClientID getClientID() {				return clientID;			}	private void setClientID(ClientID clientID) {				this.clientID = clientID;			}	protected void processPackets() {				if ((processPacketsThread == null) || (!processPacketsThread.isAlive())) {						processPacketsThread = new ProcessPacketsThread();					processPacketsThread.start();					}			}	public String toString() {				return this.getAddress() + " : " + this.getPort();			}	public void disconnect() {				this.allowSearch = false;				stopServerTimer();				super.disconnect();			}		public void connect() {				notify_server_event(TCP_SOCKET_CONNECTING);				super.connect();	}	public boolean allowSearch() {				return this.allowSearch && (this.getStatus() == TCP_SOCKET_CONNECTED);			}	public void searchFiles(SearchRequest searchQuery) {				nextSearchQuery = searchQuery;				if (search_task==null)						startSearchTask();	}	public void requestSources(FileHash fileHash, long fileSize) {				sendPacket(PacketFactory.getSourcesRequestPacket(fileHash,fileSize));	}	public void callBackRequest(ClientID clientID) {				super.sendPacket(PacketFactory.getCallBackRequestPacket(clientID));			}	private void offerFiles() {				super.sendPacket(PacketFactory.getOfferFilesPacket(clientID));			}		public void processPacket(ScannedUDPPacket packet) {		processPacket((ScannedPacket)packet);	}		private void processPacket(ScannedPacket packet) {				if (packet instanceof JMServerIDChangeSP) {						JMServerIDChangeSP scannedPacket = (JMServerIDChangeSP) packet;			setClientID(scannedPacket.getClientID());						allowSearch = true;						isConnected = true;						server_timer = new Timer();						JMuleCore core = JMuleCoreFactory.getSingleton();						core.getSharingManager().resetUnsharedFiles();						boolean update_server_list = core.getConfigurationManager().getBooleanParameter(										 ConfigurationManager.SERVER_LIST_UPDATE_ON_CONNECT_KEY, false);						if (update_server_list)				sendPacket(PacketFactory.getGetServerListPacket());						notify_server_event(TCP_SOCKET_CONNECTED);						startSharedFilesOfferTask();						return;					}		if (packet instanceof JMServerStatusSP) {						JMServerStatusSP scannedPacket = (JMServerStatusSP) packet;			setNumFiles(scannedPacket.getNumFiles());						setNumUsers(scannedPacket.getNumUsers());			return;		}		if (packet instanceof JMServerMessageSP) {						JMServerMessageSP scannedPacket = (JMServerMessageSP) packet;						String server_message = scannedPacket.getServerMessage().toLowerCase();			for(String msg : E2DKConstants.SERVER_ERROR_MESSAGES) {				msg = msg.toLowerCase();				if (server_message.equals(msg)) {					disconnect();					return ;				}			}						ServerManagerFactory.getInstance().serverMessage(this, scannedPacket.getServerMessage());			return;					}				if (packet instanceof JMServerServerListSP) {			ServerManager server_manager = JMuleCoreFactory.getSingleton().getServerManager();			JMServerServerListSP scanned_packet = (JMServerServerListSP) packet;			for(Server server : scanned_packet)				server_manager.addServer(server);			return ;		}		if (packet instanceof JMServerSearchResultSP) {						JMServerSearchResultSP scannedPacket = (JMServerSearchResultSP) packet;			SearchManager search_manager = SearchManagerFactory.getInstance();						SearchResultItemList search_result_item_list = scannedPacket.getSearchResultItemList();						SearchResult search_result = new SearchResult(search_result_item_list,lastSearchQuery,this);						search_manager.addResult(search_result);						this.allowSearch = true;						return;					}		if (packet instanceof JMServerFoundSourceSP) {			

⌨️ 快捷键说明

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