changeset 79:d1877cfd131d

*** empty log message ***
author pin
date Tue, 11 Dec 2007 12:35:01 +0900
parents 8a4f92f31c58
children f7a9b323458b
files rep/SessionManager.java
diffstat 1 files changed, 20 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- 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);
 	}