1 package com.ericsson.research.transport;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 import java.io.IOException;
37 import java.net.SocketAddress;
38 import java.nio.channels.SelectableChannel;
39 import java.nio.channels.ServerSocketChannel;
40 import java.nio.channels.SocketChannel;
41
42 public class NioWaitingSocket {
43
44 private final NioEndpoint socket;
45 private final int ops;
46 private boolean done = false;
47 private long timeoutTime = System.currentTimeMillis() + 30000;
48 private int retries = 5;
49 private final boolean server;
50 private final SocketAddress addr;
51 private SelectableChannel channel;
52
53 public NioWaitingSocket(NioEndpoint socket, SocketAddress addr, boolean server, int ops) {
54 this.socket = socket;
55 this.addr = addr;
56 this.server = server;
57 this.ops = ops;
58 }
59
60 public SelectableChannel getChannel() {
61 return this.channel;
62 }
63
64 public SelectableChannel createChannel() throws IOException {
65 if (this.server) {
66 this.channel = ServerSocketChannel.open();
67 this.channel.configureBlocking(false);
68 ((ServerSocketChannel) this.channel).socket().setReuseAddress(true);
69 ((ServerSocketChannel) this.channel).socket().bind(this.addr);
70 } else {
71 this.channel = SocketChannel.open();
72 this.channel.configureBlocking(false);
73 ((SocketChannel) this.channel).connect(this.addr);
74 }
75 return this.channel;
76 }
77
78 public int getOps() {
79 return this.ops;
80 }
81
82 public NioEndpoint getSocket() {
83 return this.socket;
84 }
85
86 public void setDone(boolean done) {
87 this.done = done;
88 }
89
90 public boolean isDone() {
91 return this.done;
92 }
93
94 public void setTimeoutTime(long timeoutTime) {
95 this.timeoutTime = timeoutTime;
96 }
97
98 public long getTimeoutTime() {
99 return this.timeoutTime;
100 }
101
102 public void setRetries(int retries) {
103 this.retries = retries;
104 }
105
106 public int getRetries() {
107 return this.retries;
108 }
109
110 }