# HG changeset patch # User pin # Date 1197344101 -32400 # Node ID d1877cfd131da72902d11b4a7b5d6e91f7916060 # Parent 8a4f92f31c5839c453e9f347b6c9fae667eb7085 *** empty log message *** diff -r 8a4f92f31c58 -r d1877cfd131d rep/SessionManager.java --- a/rep/SessionManager.java Tue Dec 11 11:55:23 2007 +0900 +++ b/rep/SessionManager.java Tue Dec 11 12:35:01 2007 +0900 @@ -210,17 +210,13 @@ //XMLからSessionListオブジェクトを生成する。 SessionXMLDecoder decoder = new SessionXMLDecoder(); - SessionList sl = decoder.decode(receivedCommand.string); + SessionList receivedSessionList = decoder.decode(receivedCommand.string); //myHost を設定。 if(myHost == null) setMyHostName(getLocalHostName(channel)); - //host の size を比較。myHost が小さければ自分はslaveになる。 - //maxHost を大きい方に変更する。 - if(myHost.compareTo(sl.getHost()) < 0){ - setMaster(false, channel); - setMaxHost(sl.getHost()); - } + //maxHost を設定。 + setMaxHost(channel, receivedSessionList.getHost()); //SessionListからXMLを生成。 //joinしてきたSessionManagerに対してACKを送信。 @@ -299,20 +295,24 @@ } } - private void setMaxHost(String host) { - maxHost = host; + private boolean setMaxHost(SocketChannel channel, String host) { + if(host.compareTo(maxHost) < 0){ + //host > MaxHost なら maxHost = host + //masterを設定する。 + maxHost = host; + sessionlist.setMaxHost(maxHost); + setMaster(false, channel); + return true; + }else{ + return false; + } } private void setMyHostName(String localHostName) { myHost = localHostName; - sessionlist.setHost(myHost); allEditorList.setHost(myHost); } -// private void sendJoin(REPCommand repCmd) { -// smList.sendJoin(repCmd); -// } - private void setMaster(boolean b, SocketChannel channel) { isMaster = b; System.out.println("isMaster = " + b); @@ -360,16 +360,22 @@ } private void sm_join(SocketChannel channel){ + + //SM_JOINコマンドを生成。 REPCommand command = new REPCommand(); command.setCMD(REP.SMCMD_SM_JOIN); + + //hostnameをセット。 this.setMyHostName(getLocalHostName(channel)); SessionXMLEncoder encoder = new SessionXMLEncoder(sessionlist); String string = encoder.sessionListToXML(); command.setString(string); + //SM_JOINコマンドを送信。 REPPacketSend send = new REPPacketSend(channel); send.send(command); + //SessionManagerのListに追加。 smList.add(channel); }