# HG changeset patch # User one@firefly.cr.ie.u-ryukyu.ac.jp # Date 1226323514 -32400 # Node ID 3b0a5a55e3ee019e5afe3c17dd73c32d22869703 # Parent aa07134fea328f8c09a507f2f858cd448b3ed5c3 24 diff -r aa07134fea32 -r 3b0a5a55e3ee rep/EditorList.java --- a/rep/EditorList.java Mon Nov 10 22:24:34 2008 +0900 +++ b/rep/EditorList.java Mon Nov 10 22:25:14 2008 +0900 @@ -2,6 +2,7 @@ import java.util.HashMap; +import rep.channel.REPSocketChannel; import rep.handler.REPNode; public class EditorList extends HashMap { @@ -27,5 +28,11 @@ return containsKey(eid); } - + public REPNode editorByChannel(REPSocketChannelchannel) { + for(REPNode e:this.values()) { + if (e.channel==channel) + return e; + } + return null; + } } diff -r aa07134fea32 -r 3b0a5a55e3ee rep/ServerMainLoop.java --- a/rep/ServerMainLoop.java Mon Nov 10 22:24:34 2008 +0900 +++ b/rep/ServerMainLoop.java Mon Nov 10 22:25:14 2008 +0900 @@ -77,7 +77,7 @@ try { ssc.socket().bind(new InetSocketAddress("::",receive_port)); } catch (SocketException e) { - // for some IPv6 imlementation + // for some IPv6 implementation ssc.socket().bind(new InetSocketAddress(receive_port)); } ssc.register(selector, SelectionKey.OP_ACCEPT,null); @@ -95,6 +95,8 @@ private boolean checkWaitingWrite() throws IOException { PacketSet p = writeQueue.poll(); if (p!=null) { + logger.writeLog("writing: "+p.command+" to: " + +manager.editorList.editorByChannel(p.channel)); p.channel.write(p.command); return true; } diff -r aa07134fea32 -r 3b0a5a55e3ee rep/SessionManager.java --- a/rep/SessionManager.java Mon Nov 10 22:24:34 2008 +0900 +++ b/rep/SessionManager.java Mon Nov 10 22:25:14 2008 +0900 @@ -23,6 +23,7 @@ import rep.handler.Forwarder; import rep.xml.SessionXMLDecoder; import rep.xml.SessionXMLEncoder; +import test.sematest.TestGUI; /* +-------+--------+--------+-------+--------+---------+------+ @@ -49,7 +50,7 @@ SessionManagerList smList = new SessionManagerList(); // Known Editor list. Connected Editor has a channel. // Session Manager Channel may have dummy editors. - EditorList editorList = new EditorList(); + public EditorList editorList = new EditorList(); // Queue limit for debugging purpose. static final int packetLimit = 400; @@ -603,4 +604,8 @@ smList.addWaitingSessionManager(fw, command); } + public int getId() { + return smList.sessionManagerID(); + } + } diff -r aa07134fea32 -r 3b0a5a55e3ee rep/handler/Editor.java --- a/rep/handler/Editor.java Mon Nov 10 22:24:34 2008 +0900 +++ b/rep/handler/Editor.java Mon Nov 10 22:25:14 2008 +0900 @@ -20,6 +20,7 @@ private List sentList = new LinkedList(); private REPCommand quit2=null; private boolean merging; + public static boolean noMergeMode=false; static final boolean doOptimize = true; public Editor(SessionManager manager,int editorNo){ @@ -38,8 +39,7 @@ public void translate(REPCommand command){ - - if(command.eid == eid){ + if (command.eid == eid){ //エディタからの新たな編集コマンド if (next==this) return; // singleton case translator.transSendCmd(command); @@ -47,16 +47,16 @@ assert(sentList.size() key) throws IOException { - ServerMainLoop.logger.writeLog("REPHandlerImpl.handle() read : command = " + command +" from "+channel); + ServerMainLoop.logger.writeLog("Manager "+manager.getId()+"read : command = " + command + +" from "+manager.editorList.editorByChannel(channel)); if (command.cmd==REP.SMCMD_JOIN||command.cmd==REP.SMCMD_PUT) { assert false; // 若干問題があるらしい diff -r aa07134fea32 -r 3b0a5a55e3ee rep/handler/Translator.java --- a/rep/handler/Translator.java Mon Nov 10 22:24:34 2008 +0900 +++ b/rep/handler/Translator.java Mon Nov 10 22:25:14 2008 +0900 @@ -66,10 +66,7 @@ /* 残ったコマンドも再び実行させるが、まだマージされてないのでunMergedにも入れる */ output.addAll(cmds); - for(REPCommand c: cmds) { - output.add(c); - unMergedCmds.add(c); - } + unMergedCmds.addAll(cmds); return optimizedSend(editor,output); } diff -r aa07134fea32 -r 3b0a5a55e3ee test/AutoSelectManager.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/AutoSelectManager.java Mon Nov 10 22:25:14 2008 +0900 @@ -0,0 +1,31 @@ +package test; + +import java.io.IOException; + +import rep.ServerMainLoop; +import rep.SessionManager; +import rep.handler.Editor; +import test.sematest.TestGUI; + +public class AutoSelectManager extends SessionManager { + + public static void main(String[] args) throws InterruptedException, IOException { + int port =ServerMainLoop.DEFAULT_PORT; + int port_s = ServerMainLoop.DEFAULT_PORT; + //System.setProperty("file.encoding", "UTF-8"); + if(args.length > 0){ + if (args.length!=2) { + logger.writeLog("Usage: sessionManager our_port parent_port"); + return; + } + port = Integer.parseInt(args[0]); + port_s = Integer.parseInt(args[1]); + } + Editor.noMergeMode = true; + SessionManager sm = new SessionManager(); + sm.setReceivePort(port); + sm.setParentPort(port_s); + // Ok start main loop + sm.init(port,new TestGUI(sm)); + } +}