# HG changeset patch # User kono # Date 1224616044 -32400 # Node ID 85a5980d96d8d7d15c185810f1ea744290f1da13 # Parent c4ffdac261327d9760c5a40081052f6ce37c6fe4 *** empty log message *** diff -r c4ffdac26132 -r 85a5980d96d8 rep/SessionManager.java --- 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を送信。