annotate src/main/java/suikwasha/distributedalgorithm/framework/Selector.java @ 1:d24bcb819032

trying to add Selector
author suikwasha
date Fri, 19 Oct 2012 23:48:11 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
1 package suikwasha.distributedalgorithm.framework;
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
2
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
3 import java.util.LinkedList;
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
4 import java.util.concurrent.SynchronousQueue;
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
5
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
6 public class Selector
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
7 {
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
8 private final SynchronousQueue<Port> queue;
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
9 private final LinkedList<Port> watchList;
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
10
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
11 public Selector()
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
12 {
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
13 queue = new SynchronousQueue<Port>();
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
14 watchList = new LinkedList<Port>();
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
15 }
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
16
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
17 public void signal(Port _p)
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
18 {
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
19 queue.offer(_p);
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
20 }
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
21
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
22 public void register(Port _p)
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
23 {
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
24 watchList.add(_p);
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
25 }
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
26
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
27 public Port select() throws InterruptedException
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
28 {
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
29 Port availablePort;
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
30 int length = watchList.size();
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
31 for(int i = 0;i < length;i ++){
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
32 availablePort = watchList.poll();
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
33 if(availablePort.isReady()){
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
34 watchList.addLast(availablePort);
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
35 return availablePort;
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
36 }
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
37 watchList.addLast(availablePort);
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
38 }
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
39
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
40 return queue.take();
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
41 }
d24bcb819032 trying to add Selector
suikwasha
parents:
diff changeset
42 }