annotate rep/SessionManager.java @ 0:e41994ce73c7

*** empty log message ***
author pin
date Tue, 13 Feb 2007 04:43:30 +0900
parents
children 3f5bf0255f5e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
1 package rep;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
2
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
3 // +-------+--------+--------+-------+--------+---------+------+
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
4 // | cmd | session| editor | seqid | lineno | textsiz | text |
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
5 // | | id | id | | | | |
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
6 // +-------+--------+--------+-------+--------+---------+------+
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
7 // o-------header section (network order)-------------o
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
8 /*int cmd; // command
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
9 int sid; // session ID
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
10 int eid; // editor ID
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
11 int seqno; // Sequence number
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
12 int lineno; // line number
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
13 int textsize; // textsize
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
14 byte[] text;*/
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
15
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
16 import java.io.IOException;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
17 import java.net.InetSocketAddress;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
18 import java.net.ServerSocket;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
19 import java.nio.ByteBuffer;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
20 import java.nio.channels.SelectionKey;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
21 import java.nio.channels.Selector;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
22 import java.nio.channels.ServerSocketChannel;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
23 import java.nio.channels.SocketChannel;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
24 import java.nio.charset.Charset;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
25 import java.util.Iterator;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
26
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
27 public class SessionManager {
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
28
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
29
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
30 private SessionList sessionlist;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
31
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
32 public SessionManager(int port) {
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
33 //manager(port);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
34 }
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
35
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
36 public void sessionManagerNet(int port) throws InterruptedException, IOException {
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
37 /**
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
38 * @param args
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
39 * @throws IOException
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
40 * @throws InterruptedException
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
41 * @throws IOException
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
42 * @throws InterruptedException
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
43 */
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
44 Selector selector = Selector.open();
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
45 ServerSocketChannel ssc = ServerSocketChannel.open();
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
46 ssc.configureBlocking(false);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
47 ssc.socket().bind(new InetSocketAddress(port));
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
48 ssc.register(selector, SelectionKey.OP_ACCEPT);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
49 sessionlist = new SessionList();
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
50
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
51 while(true){
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
52 selector.select();
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
53 for(SelectionKey key : selector.selectedKeys()){
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
54 if(key.isAcceptable()){
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
55 SocketChannel channel = ssc.accept();
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
56 if(channel == null) continue;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
57 channel.configureBlocking(false);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
58 channel.register(selector, SelectionKey.OP_READ);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
59 //sessionlist.add(channel);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
60 channel = null;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
61 }
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
62 else if(key.isReadable()){
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
63 SocketChannel channel = (SocketChannel)key.channel();
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
64 REPPacketReceive repRec = new REPPacketReceive(channel);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
65 REPCommand repCom = repRec.unpack();
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
66 manager(channel, repCom);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
67 //Charset charset = Charset.forName("US-ASCII");
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
68 //ByteBuffer buffer = ByteBuffer.allocate(8192);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
69 //switch(channel.read(buffer)) {
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
70 //case -1:
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
71 // channel.close();
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
72 // break;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
73 //case 0:
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
74 // continue;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
75 // default:
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
76 // buffer.flip();
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
77 // System.out.println(charset.decode(buffer));
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
78 // channel.write(charset.encode("test"));
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
79 // break;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
80 //}
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
81 }
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
82 }
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
83 }
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
84 }
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
85 private void manager(SocketChannel channel, REPCommand repCmd) {
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
86 if(repCmd == null) return;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
87 switch(repCmd.cmd){
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
88 case REP.SMCMD_JOIN:
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
89
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
90 int eid = sessionlist.getNumberOfEditor();
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
91 repCmd.setEID(eid);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
92 repCmd.setCMD(repCmd.cmd + 1);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
93 REPPacketSend repSend = new REPPacketSend(channel);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
94 repSend.send(repCmd);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
95 break;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
96 case REP.SMCMD_PUT:
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
97 int sessionID = sessionlist.addSession(channel, repCmd.string);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
98 repCmd.setSID(sessionID);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
99 repCmd.setCMD(repCmd.cmd + 1);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
100 //repCmd.setSID(sessionlist.getSessionID(channel));
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
101 REPPacketSend repSend2 = new REPPacketSend(channel);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
102 repSend2.send(repCmd);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
103 break;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
104 case REP.SMCMD_SELECT:
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
105 sessionlist.addEditor(channel, repCmd.sid);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
106 repCmd.setCMD(repCmd.cmd + 1);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
107 REPPacketSend repSend3 = new REPPacketSend(channel);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
108 repSend3.send(repCmd);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
109 //case REP.REPCMD_INSERT:
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
110 // break;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
111 default:
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
112 sessionlist.sendCmd(channel, repCmd);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
113 break;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
114
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
115 }
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
116 }
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
117
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
118 public static void main(String[] args) throws InterruptedException, IOException {
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
119 int port;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
120 if(args.length == 1){
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
121 port = Integer.parseInt(args[1]);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
122 }else{
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
123 port = 8765;
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
124 }
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
125 SessionManager sm = new SessionManager(port);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
126 sm.sessionManagerNet(port);
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
127 }
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
128
e41994ce73c7 *** empty log message ***
pin
parents:
diff changeset
129 }