# HG changeset patch # User ichikitakahiro # Date 1552640466 -32400 # Node ID 30f3525e8b15a4786a4edba4c5501dae18370736 # Parent 5647450a26ca558eac4ec170fd3fa2710e653534# Parent 176d0b94c1c5395f1cd86f0a0b9d85db312b684d マージ diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/codegear/CodeGear.java --- a/src/main/java/christie/codegear/CodeGear.java Fri Mar 15 17:55:35 2019 +0900 +++ b/src/main/java/christie/codegear/CodeGear.java Fri Mar 15 18:01:06 2019 +0900 @@ -5,9 +5,7 @@ import christie.annotation.Take; import christie.annotation.TakeFrom; import christie.datagear.*; -import christie.datagear.command.Command; -import christie.datagear.command.PeekCommand; -import christie.datagear.command.TakeCommand; +import christie.datagear.command.*; import christie.datagear.dg.DataGear; import java.lang.reflect.Field; @@ -24,8 +22,13 @@ private DataGearManager localDGM; private CodeGearExecutor cge; + protected abstract void run(CodeGearManager cgm); + public void setup(CodeGearManager cgm){ + setup(cgm, Thread.NORM_PRIORITY); + } + public void setup(CodeGearManager cgm, int priority){ this.cgm = cgm; this.cge = new CodeGearExecutor(this, this.cgm, priority); @@ -34,28 +37,30 @@ for (Field field : this.getClass().getDeclaredFields()) {//AnnotationからInputDataGearをセット if (field.isAnnotationPresent(Take.class)) { //Take ano = field.getAnnotation(Take.class); - setTakeCommand("local", field.getName(), new DataGear(field.getType())); + setCommand(CommandType.TAKE, "local", field.getName(), new DataGear(field.getType())); } else if (field.isAnnotationPresent(Peek.class)) { //Peek ano = field.getAnnotation(Peek.class); - setPeekCommand("local", field.getName(), new DataGear(field.getType())); + setCommand(CommandType.PEEK,"local", field.getName(), new DataGear(field.getType())); } else if (field.isAnnotationPresent(TakeFrom.class)) { TakeFrom ano = field.getAnnotation(TakeFrom.class); - setTakeCommand(ano.value(), field.getName(), new DataGear(field.getType())); + setCommand(CommandType.TAKE, ano.value(), field.getName(), new DataGear(field.getType())); } else if (field.isAnnotationPresent(PeekFrom.class)) { PeekFrom ano = field.getAnnotation(PeekFrom.class); - setPeekCommand(ano.value(), field.getName(), new DataGear(field.getType())); + setCommand(CommandType.PEEK,ano.value(), field.getName(), new DataGear(field.getType())); } } idg.finishInput(cgm, commandList); } - public void setTakeCommand(String toDgmName, String key, DataGear dg){ - commandList.add(new TakeCommand(this, cgm.cgmID, toDgmName, key, dg)); - } - - public void setPeekCommand(String toDgmName, String key, DataGear dg){ - commandList.add(new PeekCommand(this, cgm.cgmID, toDgmName, key, dg)); + public void setCommand(CommandType type, String toDgmName, String key, DataGear dg){ + Command command = new CommandBuilder().init(type).cg(this) + .cgmID(cgm.cgmID) + .toDgmName(toDgmName) + .key(key) + .dg(dg) + .build(); + commandList.add(command); } public DataGearManager getLocalDGM() { diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/codegear/CodeGearManager.java --- a/src/main/java/christie/codegear/CodeGearManager.java Fri Mar 15 17:55:35 2019 +0900 +++ b/src/main/java/christie/codegear/CodeGearManager.java Fri Mar 15 18:01:06 2019 +0900 @@ -24,15 +24,13 @@ public int localPort; public CodeGearManager(int cgmID, ThreadPoolExecutor exe, ConcurrentHashMap cgmList, int localPort) { - dgmList.put("local", localDGM); + this.dgmList.put("local", localDGM); this.cgmList = cgmList; - threadPoolExecutor = exe; + this.threadPoolExecutor = exe; this.cgmID = cgmID; this.localPort = localPort; - daemon = new ChristieDaemon(localPort, this); - daemon.listen(); - - + this.daemon = new ChristieDaemon(localPort, this); + this.daemon.listen(); } public LocalDataGearManager getLocalDGM(){ @@ -55,7 +53,7 @@ } public void submit(CodeGear cg){ - threadPoolExecutor.execute(PriorityThreadPoolExecutors.PriorityRunnable.of(cg.getCge(), cg.getCge().getPriority())); + threadPoolExecutor.execute(cg.getCge()); } public void setup(CodeGear cg){ diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/codegear/InputDataGear.java --- a/src/main/java/christie/codegear/InputDataGear.java Fri Mar 15 17:55:35 2019 +0900 +++ b/src/main/java/christie/codegear/InputDataGear.java Fri Mar 15 18:01:06 2019 +0900 @@ -18,7 +18,6 @@ * inputDataGearの待ち合わせの管理 */ public class InputDataGear { - public DataGears dataGears; public ConcurrentHashMap inputValue = new ConcurrentHashMap();//受け皿 public CodeGearManager cgm; public CodeGear cg; diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/codegear/PriorityThreadPoolExecutors.java --- a/src/main/java/christie/codegear/PriorityThreadPoolExecutors.java Fri Mar 15 17:55:35 2019 +0900 +++ b/src/main/java/christie/codegear/PriorityThreadPoolExecutors.java Fri Mar 15 18:01:06 2019 +0900 @@ -32,24 +32,19 @@ } private Runnable newComparableRunnableFor(Runnable runnable) { - return new ComparableRunnable(ensurePriorityRunnable(runnable)); + return new ComparableRunnable((CodeGearExecutor) runnable); } @Override protected RunnableFuture newTaskFor(Runnable runnable, T value) { - return new ComparableFutureTask<>(ensurePriorityRunnable(runnable), value); - } - - private PriorityRunnable ensurePriorityRunnable(Runnable runnable) { - return (runnable instanceof PriorityRunnable) ? (PriorityRunnable) runnable - : PriorityRunnable.of(runnable, DEFAULT_PRIORITY); + return new ComparableFutureTask<>((CodeGearExecutor)runnable, value); } private class ComparableFutureTask extends FutureTask implements ComparableTask { private Long sequentialOrder = instanceCounter.getAndIncrement(); - private HasPriority hasPriority; + private CodeGearExecutor hasPriority; - public ComparableFutureTask(PriorityRunnable priorityRunnable, T result) { + public ComparableFutureTask(CodeGearExecutor priorityRunnable, T result) { super(priorityRunnable, result); this.hasPriority = priorityRunnable; } @@ -67,12 +62,10 @@ private static class ComparableRunnable implements Runnable, ComparableTask { private Long instanceCount = instanceCounter.getAndIncrement(); - private HasPriority hasPriority; - private Runnable runnable; + private CodeGearExecutor runnable; - public ComparableRunnable(PriorityRunnable priorityRunnable) { + public ComparableRunnable(CodeGearExecutor priorityRunnable) { this.runnable = priorityRunnable; - this.hasPriority = priorityRunnable; } @Override @@ -82,7 +75,7 @@ @Override public int getPriority() { - return hasPriority.getPriority(); + return runnable.getPriority(); } @Override @@ -108,26 +101,4 @@ } - public interface HasPriority{ - int getPriority(); - } - - - public interface PriorityRunnable extends Runnable, HasPriority{ - - public static PriorityRunnable of(Runnable runnable, int priority) { - return new PriorityRunnable() { - @Override - public void run() { - runnable.run(); - } - - @Override - public int getPriority() { - return priority; - } - }; - } - } - } \ No newline at end of file diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/codegear/StartCodeGear.java --- a/src/main/java/christie/codegear/StartCodeGear.java Fri Mar 15 17:55:35 2019 +0900 +++ b/src/main/java/christie/codegear/StartCodeGear.java Fri Mar 15 18:01:06 2019 +0900 @@ -7,17 +7,19 @@ public abstract class StartCodeGear extends CodeGear{ static ConcurrentHashMap cgmList = new ConcurrentHashMap<>(); - //static LinkedBlockingQueue taskQueue = new LinkedBlockingQueue(); - /*static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(), // initial number of threads + /*static LinkedBlockingQueue taskQueue = new LinkedBlockingQueue(); + static ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(), // initial number of threads Runtime.getRuntime().availableProcessors(), Integer.MAX_VALUE, // keepAliveTime TimeUnit.SECONDS, taskQueue);*/ - static ThreadPoolExecutor threadPoolExecutor = PriorityThreadPoolExecutors.createThreadPool(Runtime.getRuntime().availableProcessors(), Integer.MAX_VALUE); + static ThreadPoolExecutor threadPoolExecutor = PriorityThreadPoolExecutors.createThreadPool(Runtime.getRuntime().availableProcessors(), + Integer.MAX_VALUE); static int cgmCount = 1; public StartCodeGear(CodeGearManager cgm){ cgm.setup(this); + } public static CodeGearManager createCGM(int localPort){ @@ -33,5 +35,4 @@ @Override protected void run(CodeGearManager cgm) {} - } diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/daemon/IncomingTcpConnection.java --- a/src/main/java/christie/daemon/IncomingTcpConnection.java Fri Mar 15 17:55:35 2019 +0900 +++ b/src/main/java/christie/daemon/IncomingTcpConnection.java Fri Mar 15 18:01:06 2019 +0900 @@ -4,10 +4,8 @@ import christie.codegear.CodeGearManager; import christie.datagear.*; -import christie.datagear.command.CommandType; +import christie.datagear.command.*; import christie.datagear.RemoteMessage; -import christie.datagear.command.RemotePeekCommand; -import christie.datagear.command.RemoteTakeCommand; import christie.datagear.dg.MessagePackDataGear; import org.msgpack.MessagePack; import org.msgpack.unpacker.Unpacker; @@ -53,9 +51,12 @@ case PUT: data = new byte[unpacker.readInt()]; connection.socket.getInputStream().read(data); + try { MessagePackDataGear dg = new MessagePackDataGear(data, Class.forName(msg.clazz)); + //System.out.println(Class.forName(msg.clazz)); cgm.getLocalDGM().put(msg.key, dg); + } catch (ClassNotFoundException e) { e.printStackTrace(); } @@ -63,14 +64,17 @@ break; case REMOTEPEEK: + case REMOTETAKE: try { - cgm.getLocalDGM().runCommand(new RemotePeekCommand(msg, connection)); + Command cm = new CommandBuilder().init(type).fromDgmName(msg.fromDgmName) + .key(msg.key) + .clazz(Class.forName(msg.clazz)) + .connection(connection).build(); + cgm.getLocalDGM().runCommand(cm); + } catch (ClassNotFoundException e) { e.printStackTrace(); } - break; - case REMOTETAKE: - cgm.getLocalDGM().runCommand(new RemoteTakeCommand(msg, connection)); break; case REPLY://待っていたwaitListに渡してcsにセット @@ -94,8 +98,6 @@ return; } catch (IOException e) { e.printStackTrace(); - } catch (ClassNotFoundException e) { - e.printStackTrace(); } } } diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/daemon/OutboundTcpConnection.java --- a/src/main/java/christie/daemon/OutboundTcpConnection.java Fri Mar 15 17:55:35 2019 +0900 +++ b/src/main/java/christie/daemon/OutboundTcpConnection.java Fri Mar 15 18:01:06 2019 +0900 @@ -16,10 +16,8 @@ Command cmd = connection.sendQueue.take(); switch (cmd.type) { case CLOSE: - connection.close(); - return; case FINISH: - System.exit(0); + cmd.execute(); return; default: break; diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/datagear/DataGearManager.java --- a/src/main/java/christie/datagear/DataGearManager.java Fri Mar 15 17:55:35 2019 +0900 +++ b/src/main/java/christie/datagear/DataGearManager.java Fri Mar 15 18:01:06 2019 +0900 @@ -1,6 +1,8 @@ package christie.datagear; +import christie.codegear.CodeGear; import christie.datagear.command.Command; +import christie.datagear.command.CommandBuilder; import christie.datagear.dg.DataGear; /** @@ -17,6 +19,4 @@ public abstract void close(); public abstract void shutdown(); - - } diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/datagear/DataGears.java --- a/src/main/java/christie/datagear/DataGears.java Fri Mar 15 17:55:35 2019 +0900 +++ b/src/main/java/christie/datagear/DataGears.java Fri Mar 15 18:01:06 2019 +0900 @@ -1,5 +1,8 @@ package christie.datagear; +import christie.codegear.CodeGear; +import christie.datagear.command.Command; +import christie.datagear.command.CommandType; import christie.datagear.dg.DataGear; import java.util.TreeMap; @@ -19,7 +22,7 @@ } } - public synchronized Object take(String key){ + public Object take(String key){ Object data = dataGears.get(key).poll().getData(); if (dataGears.get(key).isEmpty()) { @@ -33,6 +36,23 @@ return dataGears.get(key).peek().getData(); } + public synchronized Object getData(Command cm){ + switch (cm.type) { + case TAKE: + case REMOTETAKE: + return take(cm.key); + case PEEK: + case REMOTEPEEK: + return peek(cm.key); + } + + return null; + } + + public synchronized void setData(Command cm){ + put(cm.key, cm.dg); + } + public synchronized boolean containsKey(String key){ return dataGears.containsKey(key); } diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/datagear/LocalDataGearManager.java --- a/src/main/java/christie/datagear/LocalDataGearManager.java Fri Mar 15 17:55:35 2019 +0900 +++ b/src/main/java/christie/datagear/LocalDataGearManager.java Fri Mar 15 18:01:06 2019 +0900 @@ -3,6 +3,8 @@ import christie.datagear.command.*; import christie.datagear.dg.DataGear; +import static christie.datagear.command.CommandType.PUT; + /** * Created by e125769 on 12/7/17. */ @@ -13,75 +15,52 @@ put(key, dg); } - public void put(String key, DataGear dg){ - runCommand(new PutCommand(1, "local", key, dg)); + public void put(String key, DataGear dg) { + Command cm = new CommandBuilder().init(CommandType.PUT).cgmID(1) + .toDgmName("local") + .key(key) + .dg(dg) + .build(); + runCommand(cm); } public void runCommand(Command cm){ switch (cm.type) { case PUT: - dataGears.put(cm.key, cm.dg); + dataGears.setData(cm); - if (waitList.containsKey(cm.key)){//ここもsyncronized? + if (waitList.containsKey(cm.key)){ runCommand(waitList.getAndRemoveCommand(cm.key)); } break; case TAKE: + case REMOTETAKE: + case PEEK: + case REMOTEPEEK: if (dataGears.containsKey(cm.key)) { - takeAndSetData(cm); - cm.setInputs(); - } else { - waitList.add(cm); - } - - break; - case REMOTETAKE: - if (dataGears.containsKey(cm.key)) { - takeAndSetData(cm); - runCommand(new ReplyCommand(cm)); + setData(cm); + cm.execute(); } else { waitList.add(cm); } - - break; - case PEEK: - if (dataGears.containsKey(cm.key)) { - peekAndSetData(cm); - cm.setInputs(); - } else { - waitList.add(cm); - } - - break; - case REMOTEPEEK: - if (dataGears.containsKey(cm.key)) { - peekAndSetData(cm); - runCommand(new ReplyCommand(cm)); - } else { - waitList.add(cm); - } - break; case REPLY: - cm.connection.write(cm); + cm.execute(); break; } } + private void setData(Command cm){ + cm.setDg(dataGears.getData(cm)); + } @Override public void resolveWaitCommand(String key, DataGear dg) { } - private void takeAndSetData(Command cm){ - cm.setDg(dataGears.take(cm.key)); - } - private void peekAndSetData(Command cm){ - cm.setDg(dataGears.peek(cm.key)); - } @Override public void finish() { diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/datagear/RemoteDataGearManager.java --- a/src/main/java/christie/datagear/RemoteDataGearManager.java Fri Mar 15 17:55:35 2019 +0900 +++ b/src/main/java/christie/datagear/RemoteDataGearManager.java Fri Mar 15 18:01:06 2019 +0900 @@ -61,8 +61,9 @@ @Override public void put(String key, Object data) { - - Command cm = new PutCommand(0, null, key, new DataGear(data)); + Command cm = new CommandBuilder().init(CommandType.PUT).key(key) + .dg(new DataGear(data)) + .build(); // これ入れないと, connectionがnullの時があるのでしょうがなくwait. // コンストラクタで呼び出されるThreadをやめて実効すればいんだけどね... if(!connect) connectWait(); @@ -73,35 +74,41 @@ @Override public void runCommand(Command cm) { waitList.add(cm); - Command remoteCmd = null; + CommandType type = null; switch (cm.type) { case PEEK: - remoteCmd = new RemotePeekCommand(connection.name, cm, connection); + type = CommandType.REMOTEPEEK; break; case TAKE: - remoteCmd = new RemoteTakeCommand(connection.name, cm, connection); + type = CommandType.REMOTETAKE; break; } + Command remoteCmd = new CommandBuilder().init(type).fromDgmName(connection.name) + .key(cm.key) + .clazz(cm.clazz) + .connection(connection) + .build(); + connection.write(remoteCmd); } @Override public void resolveWaitCommand(String key, DataGear dg) { Command cm = waitList.getAndRemoveCommand(key); - cm.dg = dg; - cm.setInputs(); + cm.setDg(dg); + cm.execute(); } @Override public void finish() { - Command cmd = new FinishCommand(); + Command cmd = new CommandBuilder().init(CommandType.FINISH).build(); connection.sendCommand(cmd); } @Override public void close() { - Command cmd = new CloseCommand(); + Command cmd = new CommandBuilder().init(CommandType.CLOSE).connection(connection).build(); connection.sendCommand(cmd); } diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/datagear/command/CloseCommand.java --- a/src/main/java/christie/datagear/command/CloseCommand.java Fri Mar 15 17:55:35 2019 +0900 +++ b/src/main/java/christie/datagear/command/CloseCommand.java Fri Mar 15 18:01:06 2019 +0900 @@ -1,16 +1,23 @@ package christie.datagear.command; +import christie.daemon.Connection; + import java.nio.ByteBuffer; public class CloseCommand extends Command { - + public Connection connection = null;//for close - public CloseCommand() { - CommandType type = CommandType.CLOSE; + public CloseCommand(CommandBuilder cb) { + super(cb); } @Override public ByteBuffer convert() { return null; } + + @Override + public void execute() { + connection.close(); + } } diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/datagear/command/Command.java --- a/src/main/java/christie/datagear/command/Command.java Fri Mar 15 17:55:35 2019 +0900 +++ b/src/main/java/christie/datagear/command/Command.java Fri Mar 15 18:01:06 2019 +0900 @@ -3,36 +3,60 @@ import christie.codegear.CodeGear; import christie.daemon.Connection; import christie.datagear.RemoteMessage; -import christie.datagear.command.CommandType; import christie.datagear.dg.DataGear; import java.nio.ByteBuffer; public abstract class Command { public CommandType type; - public String key; - public String toDgmName;// for take + public String key = null; + public String toDgmName = null;// for take public String fromDgmName = "local";//for remotetake/reply - public int cgmID = 0;// for local meta + public Integer cgmID = -1;// for local meta public CodeGear cg = null;//for localtake public DataGear dg = null;//for put/localtake/reply public Class clazz = null;// for remote public Connection connection = null;//for reply + + public Command(CommandBuilder cb){ + this.type = cb.type; + this.key = cb.key; + this.toDgmName = cb.toDgmName; + this.fromDgmName = cb.fromDgmName; + this.cgmID = cb.cgmID; + this.cg = cb.cg; + this.dg = cb.dg; + this.clazz = cb.clazz; + this.connection = cb.connection; + } + + // instead of any Constoractor args + protected void checkNeedParam(CommandBuilder cb){ + + } + + public abstract void execute(); + //public abstract void run(Object dataGear); + //for remote public abstract ByteBuffer convert(); + //for remote public RemoteMessage createRemoteMessage(){ return new RemoteMessage(type.id, fromDgmName, key, clazz.getName()); } - public void setInputs(){ - cg.getIdg().setInputs(key, dg); + public void setDg(Object obj){ + this.dg.setData(obj); } - public void setDg(Object obj){ - this.dg.setData(obj); + @Override + public String toString() { + return "Command : type = " + type + ", key = " + key + " toDgmName = " + + toDgmName + " fromDgmName = " + fromDgmName + " cgmID = " + cgmID + + " cg = " + cg + " dg = " + dg + " clazz = " + clazz + " coonection = " + connection ; } //public void removeInputs(){ diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/datagear/command/CommandBuilder.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/christie/datagear/command/CommandBuilder.java Fri Mar 15 18:01:06 2019 +0900 @@ -0,0 +1,126 @@ +package christie.datagear.command; + +import christie.codegear.CodeGear; +import christie.daemon.Connection; +import christie.datagear.dg.DataGear; + +public class CommandBuilder { + protected CommandType type; // need + protected String key = null; + protected String toDgmName = null;// for take + protected String fromDgmName = "local";//for remotetake/reply + protected Integer cgmID = null;// for local meta + protected CodeGear cg = null;//for localtake + protected DataGear dg = null;//for put/localtake/reply + protected Class clazz = null;// for remote + protected Connection connection = null;//for reply + + private CommandFactory factory = new CommandFactory(); + + public CommandBuilder init(CommandType type){ + this.type = type; + this.key = null; + this.toDgmName = null; + this.fromDgmName = "local"; + this.cgmID = null; + this.cg = null; + this.dg = null; + this.clazz = null; + this.connection = null; + return this; + } + + + public CommandBuilder key(String key){ + this.key = key; + return this; + } + + public CommandBuilder toDgmName(String toDgmName){ + this.toDgmName = toDgmName; + return this; + } + + public CommandBuilder fromDgmName(String fromDgmName){ + this.fromDgmName = fromDgmName; + return this; + } + + public CommandBuilder cgmID(int cgmID){ + this.cgmID = cgmID; + return this; + } + + public CommandBuilder cg(CodeGear cg){ + this.cg = cg; + return this; + } + + public CommandBuilder dg(DataGear dg){ + this.dg = dg; + return this; + } + + public CommandBuilder clazz(Class clazz){ + this.clazz = clazz; + return this; + } + + public CommandBuilder connection(Connection connection){ + this.connection = connection; + return this; + } + + public Command build(){ + if(type == null) throw new NullPointerException(); + return factory.getCommand(type, this); + } + + private class CommandFactory{ + + public Command getCommand(CommandType type, CommandBuilder cb) { + switch (type) { + case PUT: + //check need param + + checkNull(cb.key, cb.dg); + return new PutCommand(cb); + case TAKE: + //check need param + checkNull(cb.cgmID, cb.cg, cb.toDgmName, cb.key, cb.dg); + return new TakeCommand(cb); + case PEEK: + checkNull(cb.cgmID, cb.cg, cb.toDgmName, cb.key, cb.dg); + return new PeekCommand(cb); + case REMOTETAKE: + if (cb.fromDgmName.equals("local")) throw new NullPointerException(); + checkNull(cb.key, cb.connection, cb.clazz); + return new RemoteTakeCommand(cb); + case REMOTEPEEK: + if (cb.fromDgmName.equals("local")) throw new NullPointerException(); + checkNull(cb.key, cb.connection, cb.clazz); + return new RemotePeekCommand(cb); + case REPLY: + if (cb.fromDgmName.equals("local")) throw new NullPointerException(); + checkNull(cb.key, cb.connection, cb.dg); + return new ReplyCommand(cb); + case CLOSE: + checkNull(cb.connection); + return new CloseCommand(cb); + case FINISH: + return new FinishCommand(cb); + } + return null; + } + + public void checkNull(Object... params){ + for(Object param: params){ + if(param == null){ + throw new NullPointerException(); + + } + } + } + } + +} diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/datagear/command/FinishCommand.java --- a/src/main/java/christie/datagear/command/FinishCommand.java Fri Mar 15 17:55:35 2019 +0900 +++ b/src/main/java/christie/datagear/command/FinishCommand.java Fri Mar 15 18:01:06 2019 +0900 @@ -7,12 +7,18 @@ public class FinishCommand extends Command { - public FinishCommand() { - CommandType type = CommandType.FINISH; + public FinishCommand(CommandBuilder cb) { + super(cb); } + + @Override + public void execute() { + System.exit(0); + } @Override public ByteBuffer convert() { return null; } + } diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/datagear/command/PeekCommand.java --- a/src/main/java/christie/datagear/command/PeekCommand.java Fri Mar 15 17:55:35 2019 +0900 +++ b/src/main/java/christie/datagear/command/PeekCommand.java Fri Mar 15 18:01:06 2019 +0900 @@ -4,8 +4,8 @@ import christie.datagear.dg.DataGear; public class PeekCommand extends TakeCommand{ - public PeekCommand(CodeGear cg, int cgmID, String toDgmName, String key, DataGear dg) { - super(cg, cgmID, toDgmName, key, dg); - this.type = CommandType.PEEK; + public PeekCommand(CommandBuilder cb) { + super(cb); + } } diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/datagear/command/PutCommand.java --- a/src/main/java/christie/datagear/command/PutCommand.java Fri Mar 15 17:55:35 2019 +0900 +++ b/src/main/java/christie/datagear/command/PutCommand.java Fri Mar 15 18:01:06 2019 +0900 @@ -11,13 +11,15 @@ public class PutCommand extends Command { - public PutCommand(int cgmID, String toDgmName, String key, DataGear dg){ - this.type = CommandType.PUT; - this.cgmID = cgmID; - this.toDgmName = toDgmName; - this.key = key; - this.dg = dg; + public PutCommand(CommandBuilder cb){ + super(cb); this.clazz = dg.getClazz(); + + } + + @Override + public void execute() { + } @Override diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/datagear/command/RemotePeekCommand.java --- a/src/main/java/christie/datagear/command/RemotePeekCommand.java Fri Mar 15 17:55:35 2019 +0900 +++ b/src/main/java/christie/datagear/command/RemotePeekCommand.java Fri Mar 15 18:01:06 2019 +0900 @@ -4,13 +4,7 @@ import christie.datagear.RemoteMessage; public class RemotePeekCommand extends RemoteTakeCommand { - public RemotePeekCommand(RemoteMessage msg, Connection cn) throws ClassNotFoundException { - super(msg, cn); - this.type = CommandType.REMOTEPEEK; - } - - public RemotePeekCommand(String fromDgmName, Command cm, Connection cn) { - super(fromDgmName, cm, cn); - this.type = CommandType.REMOTEPEEK; + public RemotePeekCommand(CommandBuilder cp) { + super(cp); } } diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/datagear/command/RemoteTakeCommand.java --- a/src/main/java/christie/datagear/command/RemoteTakeCommand.java Fri Mar 15 17:55:35 2019 +0900 +++ b/src/main/java/christie/datagear/command/RemoteTakeCommand.java Fri Mar 15 18:01:06 2019 +0900 @@ -13,22 +13,14 @@ public class RemoteTakeCommand extends Command { - public RemoteTakeCommand(RemoteMessage msg, Connection cn) throws ClassNotFoundException { - this(msg.fromDgmName, msg.key, cn, Class.forName(msg.clazz)); - } - - public RemoteTakeCommand(String fromDgmName, Command cm, Connection cn) { - this(fromDgmName, cm.key, cn, cm.clazz); + public RemoteTakeCommand(CommandBuilder cb){ + super(cb); + this.dg = new MessagePackDataGear(this.clazz); } - private RemoteTakeCommand(String fromDgmName, String key, Connection cn, Class clazz){ - this.type = CommandType.REMOTETAKE; - this.fromDgmName = fromDgmName; - this.key = key; - this.clazz = clazz; - this.dg = new MessagePackDataGear(this.clazz); - this.connection = cn; - + @Override + public void execute() { + new CommandBuilder().init(CommandType.REPLY).connection(connection).build().execute(); } @Override diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/datagear/command/ReplyCommand.java --- a/src/main/java/christie/datagear/command/ReplyCommand.java Fri Mar 15 17:55:35 2019 +0900 +++ b/src/main/java/christie/datagear/command/ReplyCommand.java Fri Mar 15 18:01:06 2019 +0900 @@ -2,11 +2,14 @@ public class ReplyCommand extends PutCommand { - public ReplyCommand(Command cm){ - super(0, null, cm.key, cm.dg); - this.fromDgmName = cm.fromDgmName; - this.type = CommandType.REPLY; - this.connection = cm.connection; + public ReplyCommand(CommandBuilder cb){ + super(cb); + + } + + @Override + public void execute() { + connection.write(this); } public void setData(Object data){ diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/datagear/command/TakeCommand.java --- a/src/main/java/christie/datagear/command/TakeCommand.java Fri Mar 15 17:55:35 2019 +0900 +++ b/src/main/java/christie/datagear/command/TakeCommand.java Fri Mar 15 18:01:06 2019 +0900 @@ -1,6 +1,7 @@ package christie.datagear.command; import christie.codegear.CodeGear; +import christie.datagear.DataGears; import christie.datagear.command.Command; import christie.datagear.command.CommandType; import christie.datagear.dg.DataGear; @@ -9,18 +10,19 @@ public class TakeCommand extends Command { - public TakeCommand(CodeGear cg, int cgmID, String toDgmName, String key, DataGear dg){ - this.type = CommandType.TAKE; - this.cgmID = cgmID; - this.toDgmName = toDgmName; - this.key = key; - this.dg = dg; + public TakeCommand(CommandBuilder cb) { + super(cb); this.clazz = dg.getClazz(); - this.cg = cg; } @Override public ByteBuffer convert() { return null; } + + @Override + public void execute() { + cg.getIdg().setInputs(key, dg); + + } } diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/datagear/dg/DataGear.java --- a/src/main/java/christie/datagear/dg/DataGear.java Fri Mar 15 17:55:35 2019 +0900 +++ b/src/main/java/christie/datagear/dg/DataGear.java Fri Mar 15 18:01:06 2019 +0900 @@ -62,4 +62,8 @@ return data; } + @Override + public String toString() { + return "DataGear : classname " + clazz; + } } diff -r 5647450a26ca -r 30f3525e8b15 src/main/java/christie/test/PriorityTest/StartPriorityTest.java --- a/src/main/java/christie/test/PriorityTest/StartPriorityTest.java Fri Mar 15 17:55:35 2019 +0900 +++ b/src/main/java/christie/test/PriorityTest/StartPriorityTest.java Fri Mar 15 18:01:06 2019 +0900 @@ -18,7 +18,7 @@ for(int i = 0; i < max; i ++){ cgm.setup(new PriorityTestCodeGear("A" + String.valueOf(i), 200),0); //Defaults to priority=0 } - + //Priority=1 for(int i = 0; i < max; i ++){ cgm.setup(new PriorityTestCodeGear("B" + String.valueOf(i), 200),1); //Defaults to priority=0 }