-
Notifications
You must be signed in to change notification settings - Fork 5
/
AbstractWebSocketsServer.java
73 lines (59 loc) · 2.37 KB
/
AbstractWebSocketsServer.java
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
72
73
package org.genericsystem.common;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.vertx.core.Handler;
import io.vertx.core.Vertx;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.http.HttpServer;
import io.vertx.core.http.HttpServerOptions;
import io.vertx.core.http.ServerWebSocket;
/**
* @author Nicolas Feybesse
*
* @param <T>
*/
public abstract class AbstractWebSocketsServer {
protected static Logger log = LoggerFactory.getLogger(AbstractWebSocketsServer.class);
private List<HttpServer> httpServers = new ArrayList<>();
private final int port;
private final String host;
public AbstractWebSocketsServer(String host, int port) {
this.port = port;
this.host = host;
}
public abstract Handler<Buffer> getHandler(String path, ServerWebSocket socket);
public abstract void addHttpHandler(HttpServer httpServer);
public void start() {
log.info("Generic System Server is starting...!");
Vertx vertx = GSVertx.vertx().getVertx();
for (int i = 0; i < 2 * Runtime.getRuntime().availableProcessors(); i++) {
// SLE
// cmd line : keytool -genkey -keyalg RSA -alias genericsystem -keystore keystore.jks -storepass middleware -validity 360
// url doc : https://www.javacodegeeks.com/2014/07/java-keystore-tutorial.html
// HttpServer httpServer = vertx.createHttpServer(new HttpServerOptions().setPort(port).setHost(host).setSsl(true)
// .setKeyStoreOptions(new JksOptions().setPath("keystore.jks").setPassword(new String("middleware"))));
HttpServer httpServer = vertx.createHttpServer(new HttpServerOptions().setPort(port).setHost(host));
httpServer.websocketHandler(webSocket -> {
String path = webSocket.path();
webSocket.handler(getHandler(path, webSocket));
webSocket.exceptionHandler(e -> {
e.printStackTrace();
throw new IllegalStateException(e);
});
});
addHttpHandler(httpServer);
AbstractBackEnd.<HttpServer> synchronizeTask(handler -> httpServer.listen(handler));
httpServers.add(httpServer);
}
}
public void stop(Map<String, Root> roots) {
log.info("Generic System Server is stopping...");
httpServers.forEach(httpServer -> AbstractBackEnd.<Void> synchronizeTask(handler -> httpServer.close(handler)));
roots.values().forEach(root -> root.close());
roots = null;
log.info("Generic System Server is stopped");
}
}