package com.fourinone; import java.util.List; import java.util.ArrayList; public class MigrantWorker extends WorkerParallel implements ParkStatg { String host,workerType,workerjarname; int port; private int selfIndex=-1; private volatile boolean _interrupted; void waitWorkingByService(String workerType) { //publish service and reg heatbeat //try{ //Worker wk = new WorkerService(this); /*BeanContext.startWorker(workerType, this); ParkPatternExector.createWorkerTypeNode(workerType, nodevalue);*/ String[] wkcfg = ConfigContext.getWorkerConfig(); waitWorkingByService(wkcfg[0], Integer.parseInt(wkcfg[1]), workerType); //}catch(RemoteException e){ // System.out.println("waitWorking:"+e); //} } void waitWorkingByService(String host, int port, String workerType)//remove protected { //String[] wkcfg = ConfigContext.getWorkerConfig(); //startWorker(wkcfg[0], Integer.parseInt(wkcfg[1]), sn, mwk); this.host = host; this.port = port; this.workerType = workerType; //BeanContext.startWorker(host, port, workerType, this); BeanContext.startWorker(host, port, workerType, this, this.getClass().equals(MigrantWorker.class)); ParkPatternExector.createWorkerTypeNode(workerType, host+":"+port); } void waitWorkingByService(String parkhost, int parkport, String host, int port, String workerType) { this.host = host; this.port = port; this.workerType = workerType; BeanContext.startWorker(host, port, workerType, this, false); ParkPatternExector.createWorkerTypeNode(parkhost, parkport, workerType, host+":"+port); } void waitWorkingByPark(String workerType) { ObjectBean ob = ParkPatternExector.createWorkerTypeNode(workerType, "wk_pk"); while(true) { ObjectBean lastestOb = ParkPatternExector.getLastestObjectBean(ob); WareHouse whouse = doTask((WareHouse)lastestOb.toObject()); ob = ParkPatternExector.updateObjectBean(lastestOb, whouse); } } protected Workman[] getWorkerElse() { return getWorkerElse(this.workerType); } protected Workman[] getWorkerElse(String workerType) { /*List<Workman> wklist = new ArrayList<Workman>(); if(parallelPatternFlag!=1) { List<String[]> wslist = getWorkersService(host, port, workerType); for(String[] wsinfo:wslist) wklist.add(BeanContext.getWorkerElse(wsinfo[0], Integer.parseInt(wsinfo[1]), wsinfo[2])); } return wklist.toArray(new Workman[wklist.size()]);*/ return getWorkers(host, port, workerType); } protected Workman getWorkerIndex(int index) { return getWorkerIndex(this.workerType, index); } protected Workman getWorkerIndex(String workerType, int index) { //if(parallelPatternFlag!=1) //{ List<String[]> wslist = getWorkersService(workerType); if(index>=0&&index<wslist.size()) { String[] wsinfo = wslist.get(index); return BeanContext.getWorkman(wsinfo[0], Integer.parseInt(wsinfo[1]), wsinfo[2]); }else return null; //} //return null; } protected Workman[] getWorkerAll() { return getWorkerAll(this.workerType); } protected Workman[] getWorkerAll(String workerType) { return getWorkers(null, 0, workerType); } private Workman[] getWorkers(String host, int port, String workerType) { //System.out.println(host+":"+port); List<Workman> wklist = new ArrayList<Workman>(); if(parallelPatternFlag!=1) { List<String[]> wslist = getWorkersService(workerType); for(int i=0;i<wslist.size();i++) { String[] wsinfo = wslist.get(i); //System.out.println(wsinfo[0]+":"+wsinfo[1]); if(!wsinfo[0].equals(host)||Integer.parseInt(wsinfo[1])!=port) wklist.add(BeanContext.getWorkman(wsinfo[0], Integer.parseInt(wsinfo[1]), wsinfo[2])); else selfIndex = i; } } return wklist.toArray(new Workman[wklist.size()]); } protected int getSelfIndex() { if(selfIndex==-1) { List<String[]> wslist = getWorkersService(workerType); for(int i=0;i<wslist.size();i++) { String[] wsinfo = wslist.get(i); if(wsinfo[0].equals(host)&&Integer.parseInt(wsinfo[1])==port) return i; } } return selfIndex; } protected Workman getWorkerElse(String workerType, String host, int port) { if(this.host.equals(host)&&this.port==port) return null; List<String[]> wslist = getWorkersService(workerType); if(wslist!=null){ for(int i=0;i<wslist.size();i++) { String[] wsinfo = wslist.get(i); //System.out.println(wsinfo[0]+":"+wsinfo[1]); if(wsinfo[0].equals(host)&&Integer.parseInt(wsinfo[1])==port) return BeanContext.getWorkman(wsinfo[0], Integer.parseInt(wsinfo[1]), wsinfo[2]); } } return null; } synchronized boolean receiveMaterials(WareHouse inhouse) { return receive(inhouse); } protected boolean receive(WareHouse inhouse) { return true; } protected WareHouse doTask(WareHouse inhouse) { WareHouse outhouse = new WareHouse(); return outhouse; } protected boolean isInterrupted(){ return _interrupted; } void interrupted(boolean _interrupted){ this._interrupted = _interrupted; } public void setWorkerJar(String workerjarname){ this.workerjarname = workerjarname; } public String getWorkerJar(){ return workerjarname; } void setHost(String host){ this.host = host; } String getHost(){ return host; } void setWorkerType(String workerType){ this.workerType = workerType; } String getWorkerType(){ return workerType; } void setPort(int port){ this.port = port; } int getPort(){ return port; } void setSelfIndex(int selfIndex){ this.selfIndex = selfIndex; } /*int getSelfIndex(){ return selfIndex; }*/ public static void main(String[] args){ MigrantWorker mw = new MigrantWorker(); //System.out.println(args.length); if(args.length==4) mw.setWorkerJar(args[3]); mw.waitWorking(args[0],Integer.parseInt(args[1]),args[2]); } }