package com.fourinone; import java.net.URI; public class FttpMigrantWorker extends MigrantWorker { //fw.waitWorking("fttp", "comuptername"); static final String FTTPSN = "fttp_"; static final int FTTPPORT = 2121; void waitWorkingByService(String host, int port, String workerType)//remove protected { this.host = host; this.port = port; this.workerType = workerType; BeanContext.startFttpWorker(host, port, workerType, this); ParkPatternExector.createWorkerTypeNode(workerType, host+":"+port); } public boolean receive(WareHouse inhouse) { String fp = inhouse.getString("filepath"); //System.out.println("fp:"+fp); byte[] fbs = (byte[])inhouse.getObj("filebytes"); boolean wr=true; FileAdapter fa = new FileAdapter(fp); try{ if(fbs==null) fa.createFile(); else fa.getWriter().writeSafety(fbs); }catch(FileException fe){ LogUtil.info("[FttpMigrantWorker]", "[receive]", fe.getMessage()); wr = false; } fa.close(); return wr; } public boolean copy(String frompath, long every, URI tofttppath){//every 8m /*System.out.println("tofttppath:"+tofttppath); System.out.println("this.host:"+this.host); System.out.println("this.port:"+this.port); System.out.println("tofttppath.getHost:"+tofttppath.getHost()); System.out.println("tofttppath.getPort:"+tofttppath.getPort());*/ boolean r=true; FileAdapter fa = new FileAdapter(frompath); if(this.host.equals(tofttppath.getHost())&&this.port==getFttpPort(tofttppath)){ if(fa.isDirectory()||fa.length()!=fa.copyTo(tofttppath.getPath(),every)) r=false; }else{ Workman wm = getWorkerElse(FTTPSN, tofttppath.getHost(), getFttpPort(tofttppath)); //just for file WareHouse inhouse = new WareHouse("filepath", tofttppath.getPath()); byte[] bts = null; long begin=0; while((bts=fa.getReader(begin, every).readAll())!=null){//readAllSafety inhouse.setObj("filebytes",bts); if(!wm.receive(inhouse)){ r=false; break; } begin+=bts.length; } if(begin==0&&fa.isFile()&&r){ inhouse.setObj("filebytes",bts); r=wm.receive(inhouse); } } fa.close(); return r; } public WareHouse doTask(WareHouse inhouse) { //throws nosuchmethod exception return null; } private int getFttpPort(URI fttppath){ return fttppath.getPort()==-1?FTTPPORT:fttppath.getPort(); } public static void main(String[] args) { FttpMigrantWorker fw = new FttpMigrantWorker(); //fw.waitWorking("localhost",Integer.parseInt(args[1]),"fttp"); fw.waitWorking("localhost",2121,FttpMigrantWorker.FTTPSN);//default port } }