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

📄 requesthandler.java

📁 该系统是一个基于p2p的即时聊天系统
💻 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 + -