annotate test/channeltest/testSeMa.java @ 382:4b87f89b3afd

REP Session Manager (Java version) new structure
author one@firefly.cr.ie.u-ryukyu.ac.jp
date Mon, 10 Nov 2008 22:07:45 +0900
parents c5be84d53c7f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
1 package test.channeltest;
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
2
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
3 import java.io.IOException;
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
4 import java.net.InetSocketAddress;
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
5 import java.net.SocketAddress;
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
6 import java.nio.channels.SelectionKey;
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
7 import java.util.LinkedList;
196
b85525d83b46 *** empty log message ***
kono
parents: 187
diff changeset
8 import java.util.Set;
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
9
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
10 import rep.channel.REPLogger;
196
b85525d83b46 *** empty log message ***
kono
parents: 187
diff changeset
11 import rep.channel.REPPack;
b85525d83b46 *** empty log message ***
kono
parents: 187
diff changeset
12 import rep.channel.REPSelectionKey;
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
13 import rep.channel.REPSelector;
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
14 import rep.channel.REPServerSocketChannel;
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
15 import rep.channel.REPSocketChannel;
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
16
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
17 public class testSeMa extends Thread{
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
18
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
19 SocketAddress IP;
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
20 boolean running=true;
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
21 REPLogger ns;
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
22 LinkedList<REPSocketChannel<String>> channels;
166
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
23
161
5b4be02e7243 *** empty log message ***
kono
parents: 157
diff changeset
24 public testSeMa(String name, String host, int port){
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
25 super(name);
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
26 IP = new InetSocketAddress(host,port);
174
72252e970a8b *** empty log message ***
kent
parents: 171
diff changeset
27 ns = REPLogger.singleton();
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
28 channels = new LinkedList<REPSocketChannel<String>>();
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
29 }
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
30 public void init(){
166
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
31
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
32 }
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
33
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
34 public void run() {
205
dfc2afab1325 *** empty log message ***
kono
parents: 203
diff changeset
35 REPSelector<String> selector=null;
171
690182302c05 *** empty log message ***
kent
parents: 166
diff changeset
36
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
37 REPServerSocketChannel<String> scs;
205
dfc2afab1325 *** empty log message ***
kono
parents: 203
diff changeset
38 REPPack<String> pack = new StringPacker();
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
39 try {
196
b85525d83b46 *** empty log message ***
kono
parents: 187
diff changeset
40 selector = REPSelector.<String>create();
b85525d83b46 *** empty log message ***
kono
parents: 187
diff changeset
41 scs = REPServerSocketChannel.<String>open(pack);
166
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
42 scs.socket().setReuseAddress(true);
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
43 scs.socket().bind(IP);
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
44 scs.configureBlocking(false);
175
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
45 scs.register(selector, SelectionKey.OP_ACCEPT, null);
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
46 } catch (IOException e1) {
209
1eec69035548 *** empty log message ***
kent
parents: 205
diff changeset
47 e1.printStackTrace();
175
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
48 ns.writeLog("cannot create REPServerSocketChannel!, exit.");
166
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
49 return;
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
50 }
175
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
51 ns.writeLog("selector is "+selector.toString());
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
52 ns.writeLog("REPssc is "+scs.toString());
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
53
196
b85525d83b46 *** empty log message ***
kono
parents: 187
diff changeset
54 ns.writeLog("SessionManager starts main routine.", 1);
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
55
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
56 /* Main Loop */
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
57 while(running){
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
58
166
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
59 try {
248
e72e0eae1261 *** empty log message ***
kent
parents: 230
diff changeset
60 selector.select();
196
b85525d83b46 *** empty log message ***
kono
parents: 187
diff changeset
61 Set<REPSelectionKey<String>> set = selector.selectedKeys1();
b85525d83b46 *** empty log message ***
kono
parents: 187
diff changeset
62 for(REPSelectionKey<String> key : set) {
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
63
166
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
64 if(key.isAcceptable()){
196
b85525d83b46 *** empty log message ***
kono
parents: 187
diff changeset
65 REPSocketChannel<String> channel = key.accept(pack);
203
4c0a94836357 *** empty log message ***
kono
parents: 196
diff changeset
66 if(channel==null) continue;
196
b85525d83b46 *** empty log message ***
kono
parents: 187
diff changeset
67 channel.configureBlocking(false);
175
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
68 channel.register(selector, SelectionKey.OP_READ, null);
174
72252e970a8b *** empty log message ***
kent
parents: 171
diff changeset
69 ns.writeLog("accepts a client.", 1);
166
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
70
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
71 }else if(key.isReadable()){
268
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
72 try {
308
c5be84d53c7f *** empty log message ***
kono
parents: 273
diff changeset
73 REPSocketChannel<String> channel = key.channel1();
268
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
74 String packet;
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
75 packet = channel.read();
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
76 if (packet==null) continue;
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
77 ns.writeLog("receives String==> `"+packet+"\'", 1);
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
78 channel.write(this.getName()+": get `"+packet+"\'");
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
79 }catch (IOException e) {
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
80 ns.writeLog("channel "+ns+"closed.");
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
81 key.cancel();
b69d22dbc6f1 *** empty log message ***
kono
parents: 248
diff changeset
82 }
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
83 }
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
84 }
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
85 }
166
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
86 catch (IOException e) { e.printStackTrace();}
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
87 }
166
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
88
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
89 }
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
90 }