Mercurial > hg > RemoteEditor > REPSessionManager
changeset 213:4d9b32666ed2
*** empty log message ***
author | pin |
---|---|
date | Sat, 30 Aug 2008 17:56:06 +0900 |
parents | e8f716498caf |
children | ed43dc6ccb07 |
files | rep/Editor.java rep/REPActionListener.java rep/RPanel.java rep/SessionManager.java rep/handler/REPHandler.java rep/handler/REPHandlerDoWaiting.java rep/handler/REPHandlerImpl.java rep/handler/REPHandlerInMerge.java rep/translater/Translater.java rep/translater/TranslaterImp1.java test/sematest/TestSessionManager.java |
diffstat | 11 files changed, 46 insertions(+), 38 deletions(-) [+] |
line wrap: on
line diff
--- a/rep/Editor.java Sat Aug 30 15:49:42 2008 +0900 +++ b/rep/Editor.java Sat Aug 30 17:56:06 2008 +0900 @@ -1,5 +1,6 @@ package rep; +import java.util.ArrayList; import java.util.LinkedList; import java.util.List; @@ -13,6 +14,7 @@ private String file; private TranslaterImp1 translater; private List<REPCommand> sentList; + private List<REPCommand> sentMergedList; public Editor(){ setHostAndPort(myChannel); @@ -41,7 +43,10 @@ if(checkReturnedCommand(command)){ //エディタからのコマンドが元のエディタに戻ってきた //マージして送信 - REPCommand[] cmds = translater.catchOwnCommand(command); + ArrayList<REPCommand> cmds = translater.catchOwnCommand(command); + //optimizer + //マージ中のエディタからの割り込み検知に使う + sentMergedList.addAll(cmds); sendMergedCommand(cmds); return null; }else{ @@ -55,6 +60,7 @@ if(translater.checkMergeConflict(command)){ //マージ中にエディタからの割り込みがあった場合 LinkedList<REPCommand> mergeAgainList = translater.getMergeAgain(); + //optimizer for(REPCommand againCommand: mergeAgainList){ myChannel.write(againCommand); } @@ -69,9 +75,8 @@ return list; } - private void sendMergedCommand(REPCommand[] cmds) { - for(int i = 0; i < cmds.length; i++){ - REPCommand mergeCommand = cmds[i]; + private void sendMergedCommand(ArrayList<REPCommand> cmds) { + for(REPCommand mergeCommand : cmds){ mergeCommand.setEID(REP.MERGE_EID); myChannel.write(mergeCommand); }
--- a/rep/REPActionListener.java Sat Aug 30 15:49:42 2008 +0900 +++ b/rep/REPActionListener.java Sat Aug 30 17:56:06 2008 +0900 @@ -4,6 +4,6 @@ public interface REPActionListener<P> { - public void ActionOccured(REPActionEvent<P> event); + public void selectOccured(REPActionEvent<P> event); }
--- a/rep/RPanel.java Sat Aug 30 15:49:42 2008 +0900 +++ b/rep/RPanel.java Sat Aug 30 17:56:06 2008 +0900 @@ -108,7 +108,7 @@ actionListener.ActionOccured(new REPActionEvent((EditorPlus) comboEditor.getSelectedItem(), (SessionPlus)comboSession.getSelectedItem())); */ - actionListener.ActionOccured(new REPActionEvent<REPCommand>((EditorPlus<REPCommand>) e_list.get(editor_table.getSelectedRow()), + actionListener.selectOccured(new REPActionEvent<REPCommand>((EditorPlus<REPCommand>) e_list.get(editor_table.getSelectedRow()), (SessionPlus)s_list.get(session_table.getSelectedRow()), listener)); } }
--- a/rep/SessionManager.java Sat Aug 30 15:49:42 2008 +0900 +++ b/rep/SessionManager.java Sat Aug 30 17:56:06 2008 +0900 @@ -95,7 +95,7 @@ } continue; } - System.out.println("selected number : " + selector.select()); + selector.select(); select(); } } @@ -360,7 +360,8 @@ } break; - default: + case REP.REPCMD_DELETE: + case REP.REPCMD_INSERT: { //sid から Session を取得 Session session = getSession(receivedCommand.sid); @@ -380,6 +381,11 @@ } } break; + + default: + assert(false); + break; + } } @@ -530,19 +536,20 @@ selector.wakeup(); } - public void ActionOccured(REPActionEvent event) { - //selectSession(event); + public void selectOccured(REPActionEvent event) { try { waitingQueue.put(event); } catch (InterruptedException e) { e.printStackTrace(); } + selector.wakeup(); } public void selectSession(REPActionEvent event) { REPSocketChannel<REPCommand> channel = event.getEditorChannel(); int sid = event.getSID(); Session session = getSession(sid); + selector.wakeup(); if(session.hasOwner()){ Editor editor = new Editor(channel); session.addEditor(new Editor(channel));
--- a/rep/handler/REPHandler.java Sat Aug 30 15:49:42 2008 +0900 +++ b/rep/handler/REPHandler.java Sat Aug 30 17:56:06 2008 +0900 @@ -3,7 +3,10 @@ import java.io.IOException; import java.nio.channels.SelectionKey; +import rep.REPCommand; +import rep.channel.REPSelectionKey; + public interface REPHandler { - void handle(SelectionKey key)throws IOException; + void handle(REPSelectionKey<REPCommand> key)throws IOException; }
--- a/rep/handler/REPHandlerDoWaiting.java Sat Aug 30 15:49:42 2008 +0900 +++ b/rep/handler/REPHandlerDoWaiting.java Sat Aug 30 17:56:06 2008 +0900 @@ -1,24 +1,16 @@ package rep.handler; -import java.nio.channels.SelectionKey; - +import java.io.IOException; +import rep.REPCommand; import rep.SessionManager; -import rep.channel.SelectionKeySimulator; +import rep.channel.REPSelectionKey; public class REPHandlerDoWaiting implements REPHandler { - private SessionManager manager; - public REPHandlerDoWaiting(SessionManager manager) { - this.manager = manager; } - public void handle(SelectionKeySimulator key) { - //session.doWaiting(); - } - - public void handle(SelectionKey key) { - // TODO Auto-generated method stub + public void handle(REPSelectionKey<REPCommand> key) throws IOException { }
--- a/rep/handler/REPHandlerImpl.java Sat Aug 30 15:49:42 2008 +0900 +++ b/rep/handler/REPHandlerImpl.java Sat Aug 30 17:56:06 2008 +0900 @@ -1,10 +1,10 @@ package rep.handler; import java.io.IOException; -import java.nio.channels.SelectionKey; - import rep.REPCommand; +import rep.REPCommandPacker; import rep.SessionManager; +import rep.channel.REPSelectionKey; import rep.channel.REPSocketChannel; public class REPHandlerImpl implements REPHandler { @@ -17,8 +17,8 @@ } @SuppressWarnings("unchecked") - public void handle(SelectionKey key) throws IOException { - REPSocketChannel<REPCommand> channel = (REPSocketChannel<REPCommand>) key.channel(); + public void handle(REPSelectionKey<REPCommand> key) throws IOException { + REPSocketChannel<REPCommand> channel = (REPSocketChannel<REPCommand>) key.accept(new REPCommandPacker()); REPCommand command = channel.read(); manager.manage(channel, command);
--- a/rep/handler/REPHandlerInMerge.java Sat Aug 30 15:49:42 2008 +0900 +++ b/rep/handler/REPHandlerInMerge.java Sat Aug 30 17:56:06 2008 +0900 @@ -5,8 +5,10 @@ import rep.Editor; import rep.REPCommand; +import rep.REPCommandPacker; import rep.SessionManager; import rep.channel.ChannelSimulator; +import rep.channel.REPSelectionKey; import rep.channel.REPSocketChannel; import rep.channel.SelectionKeySimulator; @@ -24,9 +26,9 @@ this.sid = sid; } - public void handle(SelectionKey key) { + public void handle(REPSelectionKey<REPCommand> key) throws IOException { //マージ中のエディタの前のエディタのコマンドをWaitingListに追加する - REPSocketChannel<REPCommand> channel = (REPSocketChannel<REPCommand>) key.channel(); + REPSocketChannel<REPCommand> channel = (REPSocketChannel<REPCommand>) key.accept(new REPCommandPacker()); REPCommand command = null; try {
--- a/rep/translater/Translater.java Sat Aug 30 15:49:42 2008 +0900 +++ b/rep/translater/Translater.java Sat Aug 30 17:56:06 2008 +0900 @@ -1,5 +1,7 @@ package rep.translater; +import java.util.ArrayList; + import rep.REPCommand; public interface Translater { @@ -16,7 +18,7 @@ * but in this case, you can use also transReceiveCmd() * @param command which the editor sent. */ - abstract public REPCommand[] catchOwnCommand(REPCommand cmd); + abstract public ArrayList<REPCommand> catchOwnCommand(REPCommand cmd); /** * Translate Command cmd that was received from SeMa.
--- a/rep/translater/TranslaterImp1.java Sat Aug 30 15:49:42 2008 +0900 +++ b/rep/translater/TranslaterImp1.java Sat Aug 30 17:56:06 2008 +0900 @@ -45,7 +45,7 @@ unMergedCmds.push(cmd); //マージ中にユーザから割り込みがあった場合 - if(sentMergedList.size() > 0){ + if(isMerging()){ mergeAgainList.add(cmd); } @@ -55,7 +55,7 @@ * Dequeue command cmd that was returned. * @param cmd */ - synchronized public REPCommand[] catchOwnCommand(REPCommand cmd){ + public ArrayList<REPCommand> catchOwnCommand(REPCommand cmd){ ArrayList<REPCommand> returnCmds = new ArrayList<REPCommand>(); ArrayList<REPCommand> cmds = new ArrayList<REPCommand>(); // ringである以上、戻ってきたコマンドは確実にキューsentCmdsの先頭にある事を期待している @@ -80,10 +80,7 @@ unMergedCmds.push( cmds.get(i)); } - //マージ中のエディタからの割り込み検知に使う - sentMergedList.addAll(returnCmds); - - return returnCmds.toArray(new REPCommand[0]); + return returnCmds; } private REPCommand createUndo(REPCommand cmd){
--- a/test/sematest/TestSessionManager.java Sat Aug 30 15:49:42 2008 +0900 +++ b/test/sematest/TestSessionManager.java Sat Aug 30 17:56:06 2008 +0900 @@ -19,7 +19,7 @@ } public static void main(String[] args){ - REPServerSocketChannel.isSimulation = true; + REPServerSocketChannel.isSimulation = false; TestSessionManager test = new TestSessionManager(1, 0, 2); logger.setLogLevel(5); test.startTest(); @@ -27,7 +27,7 @@ private void startTest() { String host = "localhost"; - int masterPort = 11000; + int masterPort = 8766; String[] strs ={String.valueOf(masterPort), String.valueOf(masterPort)}; startSessionManager(strs);