-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathClientManager.java
More file actions
71 lines (55 loc) · 1.81 KB
/
ClientManager.java
File metadata and controls
71 lines (55 loc) · 1.81 KB
1
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import org.apache.thrift.*;
import org.apache.thrift.transport.*;
import org.apache.thrift.protocol.*;
import java.util.concurrent.ConcurrentLinkedQueue;
public class ClientManager {
private String host;
private int port;
private ConcurrentLinkedQueue<KeyValueService.Client> clients;
private final int POOL_SIZE = 10;
public ClientManager() {
}
public void setServerAddress(String host, int port) {
this.host = host;
this.port = port;
}
public void initialize(KeyValueService.Client client) {
this.clearClients();
this.clients.offer(client);
this.refreshThriftClients();
}
private void clearClients() {
this.clients = new ConcurrentLinkedQueue<KeyValueService.Client>();
}
private void refreshThriftClients() {
for (int i = 0; i < POOL_SIZE - 1; i++) {
KeyValueService.Client client = null;
while (client == null) {
client = this.createThriftClient();
}
this.clients.offer(client);
}
}
public KeyValueService.Client createThriftClient() {
try {
TSocket socket = new TSocket(this.host, this.port);
TTransport transport = new TFramedTransport(socket);
if (!transport.isOpen()) {
transport.open();
}
TProtocol protocol = new TBinaryProtocol(transport);
KeyValueService.Client client = new KeyValueService.Client(protocol);
return client;
} catch (Exception e) {
return null;
}
}
public KeyValueService.Client poll() {
while (this.clients.isEmpty()) {
}
return this.clients.poll();
}
public void offer(KeyValueService.Client client) {
this.clients.offer(client);
}
}