?? requesthandler.java
字號:
/* * @(#) RequestHandler.java * Copyright 2004 HWStudio. All rights reserved. */package hws.item.smart.utility.share;//導入核心Java類庫import java.io.File;import java.io.IOException;import java.io.StringReader;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.net.MalformedURLException;import java.util.Vector;//導入自定義Java類庫import hws.item.smart.misc.XMLConfig;import hws.item.smart.misc.PopToolkit;import hws.item.smart.panel.function.share.UploadPanel;import hws.item.smart.utility.chat.FriendsInfo;//導入第三方Java類庫import org.jdom.Element;import org.jdom.Document;import org.jdom.JDOMException;import org.jdom.input.SAXBuilder;import org.jdom.output.XMLOutputter;import org.apache.xmlrpc.XmlRpc;import org.apache.xmlrpc.XmlRpcClient;import org.apache.xmlrpc.XmlRpcRequest;import org.apache.xmlrpc.XmlRpcException;/** * 文件請求處理器 * * @version 0.1 2005-08-30 * @author Hwerz */public class RequestHandler extends Object { /*------------------------------------------------------------------------* * 屬性定義 * *------------------------------------------------------------------------*/ /** * 臨時路徑 */ private static final String DIR = "c:\\"; /** * 緩存大小 */ private static final int CACHE_SIZE = 50 * 1024; /*------------------------------------------------------------------------* * 公共方法 * *------------------------------------------------------------------------*/ /** * 文件請求 * * @param requestMsg 文件請求信息 */ public void request(String requestMsg) { (new ResponseRequestThread(requestMsg)).start(); } /*------------------------------------------------------------------------* * 私有方法 * *------------------------------------------------------------------------*/ /** * 生成請求URL * * @return 生成的請求URL * @param id 文件請求者ID */ private String genURL(String id) { StringBuffer url = new StringBuffer(); url.append("http://"); url.append(FriendsInfo.getFriendIP(id)); url.append(":"); int delta = Integer.parseInt(id); url.append(XMLConfig.getTransferPort() + delta); url.append("/"); return url.toString(); } /** * 生成XML-RPC請求消息 * * @return 生成的XML-RPC請求消息 * @param dir 指定的目錄 * @param file 指定的文件名 * @param size 指定的文件大小 * @param content 指定的文件內容 * @param first 是否是首次 */ private XmlRpcRequest genRequest(String dir, String file, long size, String content, boolean first) { //請求方法 StringBuffer method = new StringBuffer(); method.append(XMLConfig.getTransferClass()); method.append("."); method.append(XMLConfig.getTransferMethod()); //請求參數 Vector params = new Vector(); XMLOutputter outputter = new XMLOutputter(); Document document = genDocument(dir, file, size, content, first); params.addElement(outputter.outputString(document)); return new XmlRpcRequest(method.toString(), params); } /** * 生成XML文檔 * * @return 生成的XML文檔 * @param dir 指定的目錄 * @param file 指定的文件名 * @param size 指定的文件大小 * @param content 指定的文件內容 * @param first 是否是首次 */ private Document genDocument(String dir, String file, long size, String content, boolean first) { Element transfer = new Element("Transfer"); Element level1 = new Element("File"); level1.setAttribute("dir", dir); level1.setAttribute("file", file); level1.setAttribute("size", String.valueOf(size)); level1.setAttribute("content", content); level1.setAttribute("first", String.valueOf(first)); transfer.addContent(level1); return new Document(transfer); } /*------------------------------------------------------------------------* * 內部類 * *------------------------------------------------------------------------*/ /** * 響應請求進程 */ class ResponseRequestThread extends Thread { /** * 文件請求信息 */ private String requestMsg; /** * Create a new instance of this class * * @param msg 文件請求信息 */ public ResponseRequestThread(String msg) { super(); requestMsg = msg; } /** * 覆蓋超類Thread的方法 */ public void run() { try { SAXBuilder builder = new SAXBuilder(); StringReader reader = new StringReader(requestMsg); Document document = builder.build(reader); Element request = document.getRootElement(); Element requester = request.getChild("Requester"); String id = requester.getAttributeValue("id"); String dir = requester.getAttributeValue("dir"); String file = requester.getAttributeValue("file"); file = file.substring(1, file.length()); UploadPanel.getInstance().extractFile(file, new File(DIR)); int index = file.lastIndexOf("/"); if (index != -1) { file = file.substring(index + 1, file.length()); } File temp = new File(DIR + file); long length = temp.length(); FileInputStream fis = new FileInputStream(temp); XmlRpc.setDriver("org.apache.xerces.parsers.SAXParser"); XmlRpcClient client = new XmlRpcClient(genURL(id)); byte[] cache; int rest; while ((rest = fis.available()) > 0) { if (rest < CACHE_SIZE) { cache = new byte[rest]; } else { cache = new byte[CACHE_SIZE]; } if (fis.read(cache) == -1) { break; } String data = PopToolkit.encode(cache); boolean first = length == (long) rest; client.execute(genRequest(dir, file, length, data, first)); sleep(1000); } fis.close(); temp.delete(); } catch (JDOMException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (XmlRpcException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -