annotate src/pathfinder/mergetest/EditorSimulatorWithoutMerger.java @ 156:7ebd30e5e385 simulator-2008-8-26

*** empty log message ***
author pin
date Mon, 25 Aug 2008 15:53:03 +0900
parents 0dfb6413a31e
children e9047957acc2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
148
bc162b1a7ebf *** empty log message ***
pin
parents:
diff changeset
1 package pathfinder.mergetest;
bc162b1a7ebf *** empty log message ***
pin
parents:
diff changeset
2
bc162b1a7ebf *** empty log message ***
pin
parents:
diff changeset
3 import remoteeditor.command.REPCommand;
bc162b1a7ebf *** empty log message ***
pin
parents:
diff changeset
4 import remoteeditor.network.REP;
bc162b1a7ebf *** empty log message ***
pin
parents:
diff changeset
5
bc162b1a7ebf *** empty log message ***
pin
parents:
diff changeset
6 public class EditorSimulatorWithoutMerger extends EditorSimulator {
bc162b1a7ebf *** empty log message ***
pin
parents:
diff changeset
7
153
6326e5ea4595 *** empty log message ***
pin
parents: 152
diff changeset
8 public EditorSimulatorWithoutMerger(int _eid, NetworkSimulator<REPCommand> _ns, String[] strings, String _name) {
6326e5ea4595 *** empty log message ***
pin
parents: 152
diff changeset
9 super(_eid, _ns, strings, _name);
148
bc162b1a7ebf *** empty log message ***
pin
parents:
diff changeset
10 }
bc162b1a7ebf *** empty log message ***
pin
parents:
diff changeset
11
bc162b1a7ebf *** empty log message ***
pin
parents:
diff changeset
12 public void run(){
149
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
13 ns.writeLog("Editor" + eid + " start.", 1);
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
14
148
bc162b1a7ebf *** empty log message ***
pin
parents:
diff changeset
15 while(running){
149
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
16
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
17 // MainLoop
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
18 while(running){
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
19
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
20 REPCommand cmd = cs.read();
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
21 /* received Command */
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
22
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
23 ns.writeLog("\tEditor"+eid+" catch command from "+cmd.eid+" NO."+cmd.seq, 3);
154
6a3c982bd72a *** empty log message ***
pin
parents: 153
diff changeset
24 //if (eid == 0) ns.writeLog("\tEditor"+eid+" catch command from "+cmd.eid+" :"+cmd, 1);
149
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
25
152
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
26 //manage(cmd);
154
6a3c982bd72a *** empty log message ***
pin
parents: 153
diff changeset
27
6a3c982bd72a *** empty log message ***
pin
parents: 153
diff changeset
28 if(cmd.cmd == REP.SMCMD_QUIT_2){
6a3c982bd72a *** empty log message ***
pin
parents: 153
diff changeset
29 cs.write(new REPCommand(cmd));
6a3c982bd72a *** empty log message ***
pin
parents: 153
diff changeset
30 running = false;
6a3c982bd72a *** empty log message ***
pin
parents: 153
diff changeset
31 break;
6a3c982bd72a *** empty log message ***
pin
parents: 153
diff changeset
32 }
149
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
33
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
34 if (cmd.eid==eid){
152
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
35 //発行したコマンドが戻ってきた場合
149
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
36 cs.write(new REPCommand(cmd));
152
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
37
149
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
38 } else if (cmd.eid==-1){
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
39 /* 制御プロセスからの指令 */
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
40 ns.writeLog("\tEditor"+eid+" send command.", 2);
152
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
41 if (cmd.cmd==REP.SMCMD_QUIT) {
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
42 //sendOneCommand(cmd);
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
43 cs.write(cmd);
149
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
44 synchronized(ns){ ns.writeLog("send Quit cmd.", 1); }
152
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
45 continue;
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
46 }
149
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
47
153
6326e5ea4595 *** empty log message ***
pin
parents: 152
diff changeset
48 //if(lock) continue;
6326e5ea4595 *** empty log message ***
pin
parents: 152
diff changeset
49 String replacedText = text.edit(cmd);
6326e5ea4595 *** empty log message ***
pin
parents: 152
diff changeset
50 sendOneCommand(cmd, replacedText);
149
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
51
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
52 }else if(cmd.eid == -2){
151
1768e68ba98e *** empty log message ***
pin
parents: 149
diff changeset
53
1768e68ba98e *** empty log message ***
pin
parents: 149
diff changeset
54 /* 終了条件 */
1768e68ba98e *** empty log message ***
pin
parents: 149
diff changeset
55 if (cmd.cmd==REP.SMCMD_QUIT){
1768e68ba98e *** empty log message ***
pin
parents: 149
diff changeset
56 ns.writeLog("\tEditor"+eid+" catch QUIT command emited by itself.", 3);
1768e68ba98e *** empty log message ***
pin
parents: 149
diff changeset
57 running=false; break;
1768e68ba98e *** empty log message ***
pin
parents: 149
diff changeset
58 }else{
155
0dfb6413a31e *** empty log message ***
pin
parents: 154
diff changeset
59 // Merged Commands.
0dfb6413a31e *** empty log message ***
pin
parents: 154
diff changeset
60 String replacedText = text.edit(cmd);
0dfb6413a31e *** empty log message ***
pin
parents: 154
diff changeset
61 returnMergedCommand(cmd, replacedText);
151
1768e68ba98e *** empty log message ***
pin
parents: 149
diff changeset
62 }
149
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
63 } else {
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
64
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
65 ns.writeLog("\t\tEditor"+eid+" edit text and pass Cmd. " + " : " + cmd, 3);
156
7ebd30e5e385 *** empty log message ***
pin
parents: 155
diff changeset
66 //if(eid == 2)ns.writeLog("\t\tEditor"+eid+" edit text and pass Cmd. " + " : " + cmd, 1);
149
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
67 text.edit(cmd);
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
68 cs.write(new REPCommand(cmd));
148
bc162b1a7ebf *** empty log message ***
pin
parents:
diff changeset
69 }
bc162b1a7ebf *** empty log message ***
pin
parents:
diff changeset
70 }
149
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
71
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
72 ns.writeLog("Editor"+eid+" finish.", 1);
148
bc162b1a7ebf *** empty log message ***
pin
parents:
diff changeset
73 }
bc162b1a7ebf *** empty log message ***
pin
parents:
diff changeset
74 }
bc162b1a7ebf *** empty log message ***
pin
parents:
diff changeset
75
155
0dfb6413a31e *** empty log message ***
pin
parents: 154
diff changeset
76 private void returnMergedCommand(REPCommand cmd, String replacedText) {
0dfb6413a31e *** empty log message ***
pin
parents: 154
diff changeset
77 REPCommand command = new REPCommand(cmd);
0dfb6413a31e *** empty log message ***
pin
parents: 154
diff changeset
78 if(command.cmd == REP.REPCMD_DELETE)command.setString(replacedText);
0dfb6413a31e *** empty log message ***
pin
parents: 154
diff changeset
79 cs.write(command);
0dfb6413a31e *** empty log message ***
pin
parents: 154
diff changeset
80 }
0dfb6413a31e *** empty log message ***
pin
parents: 154
diff changeset
81
152
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
82 private void manage(REPCommand cmd) {
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
83 // TODO Auto-generated method stub
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
84 switch(cmd.cmd){
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
85 case REP.SMCMD_START_MERGE:
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
86 lockEdit(true);
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
87 break;
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
88 case REP.SMCMD_END_MERGE:
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
89 lockEdit(false);
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
90 break;
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
91 default:
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
92 break;
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
93 }
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
94 }
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
95
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
96 private void lockEdit(boolean b) {
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
97 }
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
98
153
6326e5ea4595 *** empty log message ***
pin
parents: 152
diff changeset
99 protected void sendOneCommand(REPCommand cmd, String replacedText){
6326e5ea4595 *** empty log message ***
pin
parents: 152
diff changeset
100
149
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
101 if (cmd==null) return;
152
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
102
149
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
103 cmd.eid = eid;
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
104 cmd.seq = seq++;
152
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
105
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
106 if(cmd.cmd == REP.REPCMD_INSERT){
153
6326e5ea4595 *** empty log message ***
pin
parents: 152
diff changeset
107 //cmd.setString("inserted by Editor"+cmd.eid+":"+cmd.seq);
152
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
108 cs.write(cmd);
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
109
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
110 }else if(cmd.cmd == REP.REPCMD_DELETE){
153
6326e5ea4595 *** empty log message ***
pin
parents: 152
diff changeset
111 ///String line = text.get(cmd.lineno);
6326e5ea4595 *** empty log message ***
pin
parents: 152
diff changeset
112 //cmd.setString(line);
6326e5ea4595 *** empty log message ***
pin
parents: 152
diff changeset
113 cmd.setString(replacedText);
152
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
114 cs.write(cmd);
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
115
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
116 }else if(cmd.cmd == REP.REPCMD_REPLACE){
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
117
153
6326e5ea4595 *** empty log message ***
pin
parents: 152
diff changeset
118 REPCommand deleteCmd = new REPCommand(REP.REPCMD_DELETE, 0, eid, seq-1, cmd.lineno, 0, "");
6326e5ea4595 *** empty log message ***
pin
parents: 152
diff changeset
119 //undoCmd.setString(text.get(cmd.lineno));
6326e5ea4595 *** empty log message ***
pin
parents: 152
diff changeset
120 deleteCmd.setString(replacedText);
6326e5ea4595 *** empty log message ***
pin
parents: 152
diff changeset
121 cs.write(deleteCmd);
152
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
122
153
6326e5ea4595 *** empty log message ***
pin
parents: 152
diff changeset
123 //cmd.setString("replaced by Editor"+cmd.eid+":"+cmd.seq);
6326e5ea4595 *** empty log message ***
pin
parents: 152
diff changeset
124 cmd.setCMD(REP.REPCMD_INSERT);
152
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
125 cs.write(cmd);
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
126
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
127 }else if(cmd.cmd == REP.SMCMD_QUIT){
153
6326e5ea4595 *** empty log message ***
pin
parents: 152
diff changeset
128 //cmd.setString("sent by Editor"+cmd.eid+":"+cmd.seq);
152
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
129 cs.write(cmd);
09ad66f62f4a *** empty log message ***
pin
parents: 151
diff changeset
130 }
148
bc162b1a7ebf *** empty log message ***
pin
parents:
diff changeset
131
153
6326e5ea4595 *** empty log message ***
pin
parents: 152
diff changeset
132 //text.edit(cmd);
149
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
133
153
6326e5ea4595 *** empty log message ***
pin
parents: 152
diff changeset
134 //Thread.yield();
148
bc162b1a7ebf *** empty log message ***
pin
parents:
diff changeset
135 }
149
5942e0e3c632 *** empty log message ***
pin
parents: 148
diff changeset
136
148
bc162b1a7ebf *** empty log message ***
pin
parents:
diff changeset
137 }