Mercurial > hg > RemoteEditor > REPSessionManager
comparison rep/Editor.java @ 323:1e605880d49e
*** empty log message ***
author | kono |
---|---|
date | Fri, 10 Oct 2008 18:04:09 +0900 |
parents | dfed28488274 |
children | e235998427a6 |
comparison
equal
deleted
inserted
replaced
322:5893fd8c0f50 | 323:1e605880d49e |
---|---|
41 REPCommand cmd = new REPCommand(REP.SMCMD_START_MERGE,command.sid,REP.SM_EID.id,seq(),0,""); | 41 REPCommand cmd = new REPCommand(REP.SMCMD_START_MERGE,command.sid,REP.SM_EID.id,seq(),0,""); |
42 nextEditor.send(cmd); | 42 nextEditor.send(cmd); |
43 // Session Manager 側で、このeditorへの他のeditorからの | 43 // Session Manager 側で、このeditorへの他のeditorからの |
44 // 入力を止めて、merge にそなえる。merge は、eidtor 側から | 44 // 入力を止めて、merge にそなえる。merge は、eidtor 側から |
45 // ACKが来てから始まる。 | 45 // ACKが来てから始まる。 |
46 translater.startMerge(cmd); | |
46 return; | 47 return; |
47 } else assert(false); | 48 } else assert(false); |
48 } else if(command.eid == eid){ | 49 } else if(command.eid == eid){ |
49 //エディタからの新たな編集コマンド | 50 //エディタからの新たな編集コマンド |
50 sentList.add(command); | 51 sentList.add(command); |
72 manager.addWaitingCommand(new PacketSet(getChannel(), this, command)); | 73 manager.addWaitingCommand(new PacketSet(getChannel(), this, command)); |
73 } | 74 } |
74 return; | 75 return; |
75 } | 76 } |
76 | 77 |
77 boolean merge(Editor editor,REPCommand command) { | 78 boolean merge(REPCommand command) { |
78 REPCommand prev = translater.prev(); | 79 REPCommand prev = translater.prev(); |
79 if(prev==null) return false; | 80 if(prev==null) return false; |
80 assert(prev.eid==command.eid); | 81 assert(prev.eid==command.eid); |
81 //マージして送信 | 82 //マージして送信 |
82 return translater.catchOwnCommand(editor); | 83 return translater.catchOwnCommand(this); |
83 } | 84 } |
84 | 85 |
85 boolean checkReturnedCommand(REPCommand command) { | 86 boolean checkReturnedCommand(REPCommand command) { |
86 if(sentList.size() > 0){ | 87 if(sentList.size() > 0){ |
87 if(sentList.get(0).seq == command.seq){ | 88 if(sentList.get(0).seq == command.seq){ |
171 case REPCMD_NOP: | 172 case REPCMD_NOP: |
172 { | 173 { |
173 translate(next, receivedCommand); | 174 translate(next, receivedCommand); |
174 break; | 175 break; |
175 } | 176 } |
176 | 177 |
178 case SMCMD_START_MERGE_ACK: | |
179 { | |
180 // マージの処理と次のエディタへコマンドを送信する処理 | |
181 translater.mergeAck(); | |
182 if (!merge(receivedCommand)) { | |
183 // nothing to do, send END_MERGE | |
184 endMerge(); | |
185 } | |
186 break; | |
187 } | |
177 case SMCMD_QUIT: | 188 case SMCMD_QUIT: |
178 { | 189 { |
179 next.send(receivedCommand); | 190 next.send(receivedCommand); |
180 break; | 191 break; |
181 } | 192 } |