Mercurial > hg > RemoteEditor > Eclipse
changeset 77:015cdb9ecc21
TestMerger
author | kent |
---|---|
date | Sat, 10 Nov 2007 12:02:18 +0900 |
parents | f07d649cae30 |
children | a14d4b7337d9 |
files | src/pathfinder/EditorEmulator.java src/pathfinder/NetworkSimulator.java src/pathfinder/SeMaEmulator.java src/pathfinder/TestMerger.java |
diffstat | 4 files changed, 105 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/src/pathfinder/EditorEmulator.java Sat Nov 10 01:01:22 2007 +0900 +++ b/src/pathfinder/EditorEmulator.java Sat Nov 10 12:02:18 2007 +0900 @@ -1,6 +1,5 @@ package pathfinder; -import java.util.Random; import remoteeditor.command.REPCommand; import remoteeditor.network.REP; import sample.merge.Translater; @@ -8,33 +7,51 @@ public class EditorEmulator extends Thread{ private int eid; + //private int MAX_CMD; + private int MAX_RCV_CMD; private Thread cc; private NetworkSimulator<REPCommand> ns; private ChannelSimulator<REPCommand> cs; private Translater translater; private Text text; + private boolean running=true; - public EditorEmulator(int _eid, NetworkSimulator<REPCommand> _ns, int max_cmd) { + public EditorEmulator(int _eid, NetworkSimulator<REPCommand> _ns, int maxRcvCmd, int maxSndCmd) { + eid = _eid; ns = _ns; + //MAX_CMD = max_cmd; + MAX_RCV_CMD = maxRcvCmd; translater = new Translater(_eid); - cc = new AutoCmdSender(text, cs, _eid, max_cmd); + text = new Text(); cs = ns.connect(); + cc = new AutoCmdSender(text, cs, translater, _eid, maxSndCmd); } public EditorEmulator(int _eid, NetworkSimulator<REPCommand> _ns) { - this(_eid, _ns, 3); + this(_eid, _ns, 0, 3); + } + + synchronized public void finish(){ + running = false; } public void run(){ + int count=0; REPCommand cmd; cc.start(); System.out.println("Editor"+eid+" start."); - while(true){ + while(running + && (count<MAX_RCV_CMD || count==0 )){ cmd = cs.read(); - if (cmd!=null) cmd = translater.transReceiveCmd(cmd); - if (cmd!=null) text.edit(cmd); - - if (false) break; + if (cmd!=null) { + count++; + System.out.println("\tEditor"+eid+" catch command:>> "+cmd.toString()); + cmd = translater.transReceiveCmd(cmd); + } + if (cmd!=null) { + text.edit(cmd); + cs.write(cmd); + } } System.out.println("Editor"+eid+" finish."); @@ -51,13 +68,15 @@ static public int cmdNO[] = { REP.REPCMD_INSERT, REP.REPCMD_REPLACE, REP.REPCMD_DELETE }; private Text text; private ChannelSimulator<REPCommand> cs; + private Translater translater; private int MAX_CMD; private int eid; private int seq; - public AutoCmdSender(Text _text, ChannelSimulator<REPCommand> _cs, int _eid, int max_cmd){ + public AutoCmdSender(Text _text, ChannelSimulator<REPCommand> _cs, Translater trans, int _eid, int max_cmd){ text = _text; cs = _cs; + translater = trans; MAX_CMD = max_cmd; seq = 0; eid = _eid; @@ -68,6 +87,7 @@ for(int i=0; i<MAX_CMD; i++){ cmd = genCmd(); text.edit(cmd); + cmd = translater.transSendCmd(cmd); cs.write(cmd); } } @@ -76,7 +96,7 @@ String str = new String("inserted or replaced by editor"+eid); return new REPCommand(cmdNO[Verify.random(2)], 0, eid, seq++, - Verify.random(text.size()), //size-1? + Verify.random(text.size()-1), //size-1? str.length(), str); } }
--- a/src/pathfinder/NetworkSimulator.java Sat Nov 10 01:01:22 2007 +0900 +++ b/src/pathfinder/NetworkSimulator.java Sat Nov 10 12:02:18 2007 +0900 @@ -4,7 +4,7 @@ import java.util.Queue; public class NetworkSimulator<P> { - + /** Waiting connectionRequest to be accepted by SessionManager. */ private Queue<ChannelSimulator<P>> acceptList; /** Established connection */
--- a/src/pathfinder/SeMaEmulator.java Sat Nov 10 01:01:22 2007 +0900 +++ b/src/pathfinder/SeMaEmulator.java Sat Nov 10 12:02:18 2007 +0900 @@ -4,28 +4,38 @@ import java.util.List; public class SeMaEmulator<P> extends Thread { + private int MAX_PACKET; + private int MAX_CLIENT; private NetworkSimulator<P> ns; private List<ChannelSimulator<P>> csList; - public SeMaEmulator(NetworkSimulator<P> _ns){ + public SeMaEmulator(NetworkSimulator<P> _ns, int max_client, int max_packet){ ns = _ns; + MAX_CLIENT = max_client; + MAX_PACKET = max_packet; csList = new ArrayList<ChannelSimulator<P>>(); } + public SeMaEmulator(NetworkSimulator<P> _ns){ + this(_ns, 2, 0); + } /** - * Check whether NetworkSimulator hold waiting connections. + * Check whether the NetworkSimulator hold waiting connections. */ private boolean checkAccept(){ + boolean flag=false; ChannelSimulator<P> cs; + while((cs=ns.accept())!=null){ + csList.add(cs); + flag = true; + } + return flag; +/* cs = ns.accept(); if (cs==null) return false; csList.add(cs); return true; - } - public void waitClient(){ - while(csList.size()<2){ - checkAccept(); - } +*/ } public void run(){ @@ -33,20 +43,22 @@ int count=0; P packet; - waitClient(); + while(csList.size()<MAX_CLIENT){ checkAccept(); Thread.yield(); } System.out.println("SessionManager start."); - + /* Main Loop */ ChannelSimulator<P> cs = csList.get(i); - while(true){ + while(MAX_PACKET==0 || count<MAX_PACKET){ packet=cs.read(); // [i]からread + //if(packet!=null) System.out.println("SeMa catch packet to "+i+":>> "+packet.toString()); i = (i+1)%csList.size(); // i++ cs = csList.get(i); // 次のChennelをゲット if (packet!=null) { + System.out.println("SeMa pass packet to "+i+":>> "+packet.toString()); cs.write(packet); // readできていたならそれを書き込む - }else count++; - if (i==0) checkAccept(); //全部回ったらaccept待ちをチェック - if (count>=100) break; + count++; + } + //if (i==0) checkAccept(); //全部回ったらaccept待ちをチェック } System.out.println("SessionManager finish."); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/pathfinder/TestMerger.java Sat Nov 10 12:02:18 2007 +0900 @@ -0,0 +1,48 @@ +package pathfinder; + + +import java.util.LinkedList; + +import remoteeditor.command.REPCommand; + +public class TestMerger { + private int N_editor; + private int N_packet; + private NetworkSimulator<REPCommand> ns; + private SeMaEmulator<REPCommand> sm; + private LinkedList<EditorEmulator> editors; + + public TestMerger(int editor, int packet){ + N_editor = editor; + N_packet = packet; + ns = new NetworkSimulator<REPCommand>(); + sm = new SeMaEmulator<REPCommand>(ns, N_editor, N_editor*N_packet*N_editor); + editors = new LinkedList<EditorEmulator>(); + } + + public static void main(String[] args){ + TestMerger tm; + tm = new TestMerger(2, 3); + tm.startTest(); + } + + private void startTest() { + for (int i=0; i<N_editor; i++){ + EditorEmulator ee = new EditorEmulator(i, ns, N_packet*N_editor, N_packet); + editors.add(ee); + ee.start(); + } + sm.start(); + + try { + sm.join(); + for (EditorEmulator ee: editors){ + //ee.finish(); + ee.join(); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + +}