Mercurial > hg > RemoteEditor > REPSessionManager
changeset 364:c965ef2b5fd6
*** empty log message ***
author | kono |
---|---|
date | Mon, 20 Oct 2008 13:44:34 +0900 |
parents | 1a8856580d38 |
children | c432755c3555 |
files | Todo rep/Editor.java rep/FirstConnector.java rep/SessionManager.java rep/channel/ChannelSimulator.java rep/channel/REPSocketChannel.java test/sematest/TestInterManagerSession.java |
diffstat | 7 files changed, 42 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- 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が登録される。
--- 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()<limit);
--- a/rep/FirstConnector.java Mon Oct 20 03:03:28 2008 +0900 +++ b/rep/FirstConnector.java Mon Oct 20 13:44:34 2008 +0900 @@ -61,10 +61,10 @@ manager.smList.addWaitingSessionManager(fw, command); break; } - case SMCMD_SM_JOIN_ACK: - manager.setSessionManagerID(command.sid); - fw = new Forwarder(manager); - break; +// case SMCMD_SM_JOIN_ACK: +// manager.setSessionManagerID(command.sid); +// fw = new Forwarder(manager); +// break; default: throw new IOException(); } //myHost を設定。
--- a/rep/SessionManager.java Mon Oct 20 03:03:28 2008 +0900 +++ b/rep/SessionManager.java Mon Oct 20 13:44:34 2008 +0900 @@ -273,6 +273,7 @@ * After loop detection, we give up session manager join. */ private void cancel_sm_join() { + logger.writeLog("Loop detected "+this); removeChannel(sm_join_channel); sm_join_channel=null; } @@ -282,7 +283,7 @@ REPSelectionKey<REPCommand> 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); } + }
--- 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<P> keyFor1(REPSelector<P> sel) { + return (REPSelectionKey<P>)((SelectorSimulator) sel).getKey(this); + } @SuppressWarnings("unchecked") @Override @@ -175,5 +183,6 @@ otherEnd = (ChannelSimulator<P>) other; } - + public void close1() throws IOException { + } }
--- 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
--- 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. */ LinkedList<REPCommand>cmds = new LinkedList<REPCommand>(); - 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;