annotate test/channeltest/testSeMa.java @ 203:4c0a94836357 simullator-nio-both-worked

*** empty log message ***
author kono
date Sat, 30 Aug 2008 11:21:43 +0900
parents b85525d83b46
children dfc2afab1325
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
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
34 @SuppressWarnings("unchecked")
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
35 public void run() {
171
690182302c05 *** empty log message ***
kent
parents: 166
diff changeset
36 REPSelector selector=null;
690182302c05 *** empty log message ***
kent
parents: 166
diff changeset
37
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
38 REPServerSocketChannel<String> scs;
196
b85525d83b46 *** empty log message ***
kono
parents: 187
diff changeset
39 REPPack pack = new StringPacker();
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
40 try {
196
b85525d83b46 *** empty log message ***
kono
parents: 187
diff changeset
41 selector = REPSelector.<String>create();
b85525d83b46 *** empty log message ***
kono
parents: 187
diff changeset
42 scs = REPServerSocketChannel.<String>open(pack);
166
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
43 scs.socket().setReuseAddress(true);
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
44 scs.socket().bind(IP);
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
45 scs.configureBlocking(false);
175
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
46 //selector.register(scs, SelectionKey.OP_ACCEPT, null);
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
47 scs.register(selector, SelectionKey.OP_ACCEPT, null);
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
48 } catch (IOException e1) {
175
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
49 ns.writeLog("cannot create REPServerSocketChannel!, exit.");
166
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
50 return;
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
51 }
175
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
52 ns.writeLog("selector is "+selector.toString());
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
53 ns.writeLog("REPssc is "+scs.toString());
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
54
196
b85525d83b46 *** empty log message ***
kono
parents: 187
diff changeset
55 ns.writeLog("SessionManager starts main routine.", 1);
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
56
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
57 /* Main Loop */
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
58 while(running){
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
59
166
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
60 try {
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
61 selector.select();
196
b85525d83b46 *** empty log message ***
kono
parents: 187
diff changeset
62 Set<REPSelectionKey<String>> set = selector.selectedKeys1();
b85525d83b46 *** empty log message ***
kono
parents: 187
diff changeset
63 for(REPSelectionKey<String> key : set) {
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
64
166
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
65 if(key.isAcceptable()){
174
72252e970a8b *** empty log message ***
kent
parents: 171
diff changeset
66 ns.writeLog("gets acceptable channel", 1);
196
b85525d83b46 *** empty log message ***
kono
parents: 187
diff changeset
67 REPSocketChannel<String> channel = key.accept(pack);
203
4c0a94836357 *** empty log message ***
kono
parents: 196
diff changeset
68 if(channel==null) continue;
196
b85525d83b46 *** empty log message ***
kono
parents: 187
diff changeset
69 channel.configureBlocking(false);
175
5653cf8e3c8b *** empty log message ***
kent
parents: 174
diff changeset
70 channel.register(selector, SelectionKey.OP_READ, null);
174
72252e970a8b *** empty log message ***
kent
parents: 171
diff changeset
71 ns.writeLog("accepts a client.", 1);
166
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
72
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
73 }else if(key.isReadable()){
174
72252e970a8b *** empty log message ***
kent
parents: 171
diff changeset
74 ns.writeLog("gets readable channel", 1);
166
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
75 //SelectableChannelSimulator<String> channel = key.channel();
196
b85525d83b46 *** empty log message ***
kono
parents: 187
diff changeset
76 REPSocketChannel<String> channel = (REPSocketChannel<String>) key.channel(pack);
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
77 String packet;
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
78 packet = channel.read();
174
72252e970a8b *** empty log message ***
kent
parents: 171
diff changeset
79 ns.writeLog("receives String==> `"+packet+"\'", 1);
180
f34608ae1ed2 *** empty log message ***
kent
parents: 175
diff changeset
80 channel.write(this.getName()+": get `"+packet+"\'");
157
f0d80a64aba0 *** empty log message ***
kono
parents: 154
diff changeset
81 }
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
82 }
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
83 }
166
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
84 catch (IOException e) { e.printStackTrace();}
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
85 }
166
be2c1a1e9b8d *** empty log message ***
kono
parents: 161
diff changeset
86
154
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
87 }
fafbaaa0abd0 *** empty log message ***
kono
parents:
diff changeset
88 }