changeset 377:85a5980d96d8

*** empty log message ***
author kono
date Wed, 22 Oct 2008 04:07:24 +0900
parents c4ffdac26132
children c78569ab5fce
files rep/SessionManager.java
diffstat 1 files changed, 36 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/rep/SessionManager.java	Wed Oct 22 03:19:57 2008 +0900
+++ b/rep/SessionManager.java	Wed Oct 22 04:07:24 2008 +0900
@@ -694,27 +694,7 @@
 			if(isMaster()) {
 				//    master であれば、SessionManager IDを決めて、
 				//    自分のsmList に登録
-				Forwarder sm;
-				int psid = command.eid;
-				if (forwarder.sid!=-1) {
-				// すでに channelはSessionManager Idを持っていて、
-				// direct link ではないので、
-				// channel を持たないForwarderとして登録する
-					sm = new Forwarder(this);
-				} else {
-					sm = forwarder;
-				}
-				int sid = smList.addNewSessionManager(sm,command);					
-				routingTable.add(forwarder,sid);
-
-				REPCommand sendCommand = makeREPCommandWithSessionList(REP.SMCMD_SM_JOIN_ACK);
-				// command.eid==smList.sesionManagerID() の場合は、
-				// 待っている自分の下のsessionManagerにsidをassignする必要がある。
-				sendCommand.setSID(sid); // new Session manager ID
-				// 複数のSM_JOIN_ACKを識別するには、最初にSM_JOINを受け付けた
-				// Session manager IDを使う。
-				sendCommand.setEID(psid);
-				send_sm_join_ack(psid, sid, sendCommand);
+				registSessionManager(forwarder, command);
 			} else {
 				if (forwarder.sid==-1) {
 					// direct link の場合は、識別のために、EIDに直上の
@@ -751,6 +731,41 @@
 		return true;
 	}
 
+	private void registSessionManager(Forwarder forwarder, REPCommand command) {
+		Forwarder sm;
+		int psid = command.eid;
+		if (forwarder.sid!=-1) {
+		// すでに channelはSessionManager Idを持っていて、
+		// direct link ではないので、
+		// channel を持たないForwarderとして登録する
+			sm = new Forwarder(this);
+		} else {
+			sm = forwarder;
+		}
+		int sid = smList.addNewSessionManager(sm,command);					
+		routingTable.add(forwarder,sid);
+
+		REPCommand sendCommand = makeREPCommandWithSessionList(REP.SMCMD_SM_JOIN_ACK);
+		// command.eid==smList.sesionManagerID() の場合は、
+		// 待っている自分の下のsessionManagerにsidをassignする必要がある。
+		sendCommand.setSID(sid); // new Session manager ID
+		// 複数のSM_JOIN_ACKを識別するには、最初にSM_JOINを受け付けた
+		// Session manager IDを使う。
+		sendCommand.setEID(psid);
+		send_sm_join_ack(psid, sid, sendCommand);
+	}
+
+
+	void send_sm_join_ack(int psid, int sid,REPCommand sendCommand) {
+		if (psid==smList.sessionManagerID()) {
+			// 直下のsessionManagerにIDを割り振る必要がある。
+			smList.assignSessionManagerIDtoWaitingSM(sid);
+			// ここで smList に一つだけ追加されるので
+			// 待っている最初のsm一つにだけ、sm_join_ackが新たに送られる。
+		}
+		smList.sendToSlaves(sendCommand);
+	}
+
 	/*
 	 * 指定されたeditorがlocalにあるかどうかを調べる。なければ、他に送る。戻って何回も探すことが
 	 * あり得るので、よろしくない。
@@ -832,17 +847,6 @@
 	}
 
 
-	void send_sm_join_ack(int psid, int sid,REPCommand sendCommand) {
-		if (psid==smList.sessionManagerID()) {
-			// 直下のsessionManagerにIDを割り振る必要がある。
-			smList.assignSessionManagerIDtoWaitingSM(sid);
-			// ここで smList に一つだけ追加されるので
-			// 待っている最初のsm一つにだけ、sm_join_ackが新たに送られる。
-		}
-		smList.sendToSlaves(sendCommand);
-	}
-
-
 	private REPCommand makeREPCommandWithSessionList(REP cmd) {
 		//SessionListからXMLを生成。
 		//joinしてきたSessionManagerに対してACKを送信。