# HG changeset patch # User kono # Date 1224477874 -32400 # Node ID c965ef2b5fd6cc4c152a7b7858dba76ec0a760ac # Parent 1a8856580d38c3fe7ae8d0cadb175bf8d48d9635 *** empty log message *** diff -r 1a8856580d38 -r c965ef2b5fd6 Todo --- a/Todo Mon Oct 20 03:03:28 2008 +0900 +++ b/Todo Mon Oct 20 13:44:34 2008 +0900 @@ -1,5 +1,15 @@ +Mon Oct 20 10:22:02 JST 2008 + +Tdo: (kono) +Inter-session での、editor の削除、master でないeditorのclose/quit。 + Sun Oct 19 21:23:27 JST 2008 +Todo: IPv6 対応 (kono) +getAddress で取れたアドレスには、すべて、select/connect する +必要がある。localhost な hostname よりも大域的なhostnameを +優先した方が良い。 + Todo: dispatch先のEditorの作成 (kono) Session は select 時に、channelを持つeditorが登録される。 diff -r 1a8856580d38 -r c965ef2b5fd6 rep/Editor.java --- a/rep/Editor.java Mon Oct 20 03:03:28 2008 +0900 +++ b/rep/Editor.java Mon Oct 20 13:44:34 2008 +0900 @@ -40,6 +40,7 @@ if(command.eid == eid){ //エディタからの新たな編集コマンド + if (next==this) return; // singleton case translator.transSendCmd(command); sentList.add(new REPCommand(command)); assert(sentList.size() key = channel.channel.keyFor1(selector); key.cancel(); try { - channel.channel.close(); + channel.channel.close1(); } catch (IOException e) { } } @@ -318,11 +319,10 @@ * ならない。複数のSession Managerにjoinすることは出来ない。(NATを実装するまでは)。 * @param host */ - public void connectSession(String host) { + public void connectSession(String host, int port) { if (sm_join_channel!=null) return; if (!sessionList.isEmpty()) return; if (!smList.isMaster()) return; - int port = parent_port; /* * IPv6 対応では、複数のアドレスを取って、それのすべてに接続を試す必要が * ある。 @@ -338,6 +338,10 @@ }catch (IOException e) { } } + + public void connectSession(String host) { + connectSession(host,parent_port); + } /** * channel に SMCMD_SM_JOIN command を送る。 @@ -790,4 +794,5 @@ return sessionList.get(sid); } + } diff -r 1a8856580d38 -r c965ef2b5fd6 rep/channel/ChannelSimulator.java --- a/rep/channel/ChannelSimulator.java Mon Oct 20 03:03:28 2008 +0900 +++ b/rep/channel/ChannelSimulator.java Mon Oct 20 13:44:34 2008 +0900 @@ -122,14 +122,22 @@ @SuppressWarnings("unchecked") + @Override public SelectionKey keyFor(Selector selector2) { return ((SelectorSimulator) selector2).getKey(this); } @SuppressWarnings("unchecked") + @Override public SelectionKey keyFor(REPSelector sel) { return (SelectionKey)((SelectorSimulator) sel).getKey(this); } + + @SuppressWarnings("unchecked") + @Override + public REPSelectionKey

keyFor1(REPSelector

sel) { + return (REPSelectionKey

)((SelectorSimulator) sel).getKey(this); + } @SuppressWarnings("unchecked") @Override @@ -175,5 +183,6 @@ otherEnd = (ChannelSimulator

) other; } - + public void close1() throws IOException { + } } diff -r 1a8856580d38 -r c965ef2b5fd6 rep/channel/REPSocketChannel.java --- a/rep/channel/REPSocketChannel.java Mon Oct 20 03:03:28 2008 +0900 +++ b/rep/channel/REPSocketChannel.java Mon Oct 20 13:44:34 2008 +0900 @@ -177,4 +177,5 @@ } + } \ No newline at end of file diff -r 1a8856580d38 -r c965ef2b5fd6 test/sematest/TestInterManagerSession.java --- a/test/sematest/TestInterManagerSession.java Mon Oct 20 03:03:28 2008 +0900 +++ b/test/sematest/TestInterManagerSession.java Mon Oct 20 13:44:34 2008 +0900 @@ -56,7 +56,12 @@ } }, new SessionManagerEvent() { - public void exec(SessionManager manager) { + public void exec(SessionManager manager) { + // try to make a loop + if (false) { + sessionManagers[0].connectSession(host, + manager.getPort()); + } manager.connectSession(host); for(TestEditor editor:editors) { if(editor.getPort()==manager.getPort()) { @@ -103,8 +108,8 @@ * Define pending command and set null command for now. */ LinkedListcmds = new LinkedList(); - cmds.add(new REPCommand(REP.SMCMD_JOIN,0,0,0,0,"Editor0-file")); - //cmds.add(new REPCommand(REP.SMCMD_PUT,0,0,0,0,"Editor0-file")); + //cmds.add(new REPCommand(REP.SMCMD_JOIN,0,0,0,0,"Editor0-file")); + cmds.add(new REPCommand(REP.SMCMD_PUT,0,0,0,0,"Editor0-file")); cmds.add(new REPCommand(REP.REPCMD_INSERT,0,0,0,0,"m0")); cmds.add(new REPCommand(REP.REPCMD_DELETE,0,0,0,0,"m0")); editorStartCmds = cmds;