comparison rep/handler/FirstConnector.java @ 387:6f356d160e58

IPv6 any address
author one@firefly.cr.ie.u-ryukyu.ac.jp
date Mon, 10 Nov 2008 22:21:52 +0900
parents 1fca50ce3508
children 18cacd0b3ccf
comparison
equal deleted inserted replaced
386:bba62c4ac323 387:6f356d160e58
11 import rep.channel.REPSelectionKey; 11 import rep.channel.REPSelectionKey;
12 import rep.channel.REPSocketChannel; 12 import rep.channel.REPSocketChannel;
13 13
14 public class FirstConnector extends Forwarder { 14 public class FirstConnector extends Forwarder {
15 15
16 public FirstConnector(SessionManager manager) { 16
17 super(manager); 17
18 public FirstConnector(SessionManager manager,
19 REPSocketChannel<REPCommand> channel) {
20 super(manager,channel);
18 } 21 }
19 22
20 public void cancel(REPSocketChannel<REPCommand> socketChannel) { 23 public void cancel(REPSocketChannel<REPCommand> socketChannel) {
21 manager.remove(socketChannel); 24 manager.remove(socketChannel);
22 } 25 }
23 26
24 public void handle(REPSelectionKey<REPCommand> key) throws IOException { 27 @Override
28 public void handle(REPCommand command, REPSelectionKey<REPCommand> key) throws IOException {
25 /* 29 /*
26 * 接続要求は、EditorかSlave Editorで、 30 * 接続要求は、EditorかSlave Editorで、
27 *    join, put, sm_join 31 *    join, put, sm_join
28 * が来る。それ以外はエラー。master もありか? 32 * が来る。それ以外はエラー。master もありか?
29 * sm_join_ack 33 * sm_join_ack
30 */ 34 */
31 REPNode fw; 35 REPNode fw;
32 REPSocketChannel<REPCommand> channel = key.channel1();
33 REPCommand command = channel.read();
34 ServerMainLoop.logger.writeLog("FirstConnector: command = " + command); 36 ServerMainLoop.logger.writeLog("FirstConnector: command = " + command);
35 switch(command.cmd) { 37 switch(command.cmd) {
36 case SMCMD_JOIN: 38 case SMCMD_JOIN:
37 { 39 {
38 //どのSessionにも属さないエディタをリストに追加 40 //どのSessionにも属さないエディタをリストに追加
61 fw = editor; 63 fw = editor;
62 break; 64 break;
63 } 65 }
64 case SMCMD_SM_JOIN: 66 case SMCMD_SM_JOIN:
65 { 67 {
66 fw = new Dispatcher(manager); // FirstConnector? 68 fw = new Dispatcher(manager,channel); // FirstConnector?
67 manager.addWaitingSessionManager(fw, command); 69 manager.addWaitingSessionManager(fw, command);
68 break; 70 break;
69 } 71 }
70 case SMCMD_SM_JOIN_ACK: 72 case SMCMD_SM_JOIN_ACK:
71 manager.setSessionManagerID(command.sid); 73 manager.setSessionManagerID(command.sid);
72 manager.afterConnect(); 74 manager.afterConnect();
73 fw = new Dispatcher(manager); 75 fw = new Dispatcher(manager,channel);
74 manager.setParent(fw); 76 manager.setParent(fw);
75 break; 77 break;
76 default: throw new IOException(); 78 default: throw new IOException();
77 } 79 }
78 //myHost を設定。 80 //myHost を設定。