📄 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 + -