Skip to content

Commit

Permalink
Javalin v5 bump (#930)
Browse files Browse the repository at this point in the history
  • Loading branch information
srimanachanta authored Oct 5, 2023
1 parent ce0d28d commit b3a3ab7
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 49 deletions.
4 changes: 2 additions & 2 deletions photon-server/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ dependencies {
implementation project(':photon-core')
implementation project(':photon-targeting')

implementation "io.javalin:javalin:4.2.0"
implementation "io.javalin:javalin:5.6.2"

implementation wpilibTools.deps.wpilibJava("wpiutil")
implementation wpilibTools.deps.wpilibJava("wpimath")
Expand All @@ -46,7 +46,7 @@ dependencies {
implementation "org.msgpack:msgpack-core:0.9.0"
implementation "org.msgpack:jackson-dataformat-msgpack:0.9.0"

implementation "org.slf4j:slf4j-simple:1.8.0-beta4"
implementation "org.slf4j:slf4j-simple:2.0.7"
}

shadowJar {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
import io.javalin.websocket.WsConnectContext;
import io.javalin.websocket.WsContext;
import io.javalin.websocket.WsMessageContext;
import java.net.InetSocketAddress;
import java.time.Duration;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
Expand Down Expand Up @@ -56,16 +58,17 @@ private CameraSocketHandler() {
}

public void onConnect(WsConnectContext context) {
context.session.setIdleTimeout(Long.MAX_VALUE); // TODO: determine better value
var insa = context.session.getRemote().getInetSocketAddress();
var host = insa.getAddress().toString() + ":" + insa.getPort();
context.session.setIdleTimeout(
Duration.ofMillis(Long.MAX_VALUE)); // TODO: determine better value
var remote = (InetSocketAddress) context.session.getRemoteAddress();
var host = remote.getAddress().toString() + ":" + remote.getPort();
logger.info("New camera websocket connection from " + host);
users.add(context);
}

protected void onClose(WsCloseContext context) {
var insa = context.session.getRemote().getInetSocketAddress();
var host = insa.getAddress().toString() + ":" + insa.getPort();
var remote = (InetSocketAddress) context.session.getRemoteAddress();
var host = remote.getAddress().toString() + ":" + remote.getPort();
var reason = context.reason() != null ? context.reason() : "Connection closed by client";
logger.info("Closing camera websocket connection from " + host + " for reason: " + reason);
svsManager.removeSubscription(context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@
import io.javalin.websocket.WsConnectContext;
import io.javalin.websocket.WsContext;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.time.Duration;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
Expand Down Expand Up @@ -68,9 +70,10 @@ private DataSocketHandler() {
}

public void onConnect(WsConnectContext context) {
context.session.setIdleTimeout(Long.MAX_VALUE); // TODO: determine better value
var insa = context.session.getRemote().getInetSocketAddress();
var host = insa.getAddress().toString() + ":" + insa.getPort();
context.session.setIdleTimeout(
Duration.ofMillis(Long.MAX_VALUE)); // TODO: determine better value
var remote = (InetSocketAddress) context.session.getRemoteAddress();
var host = remote.getAddress().toString() + ":" + remote.getPort();
logger.info("New websocket connection from " + host);
users.add(context);
dcService.publishEvent(
Expand All @@ -79,8 +82,8 @@ public void onConnect(WsConnectContext context) {
}

protected void onClose(WsCloseContext context) {
var insa = context.session.getRemote().getInetSocketAddress();
var host = insa.getAddress().toString() + ":" + insa.getPort();
var remote = (InetSocketAddress) context.session.getRemoteAddress();
var host = remote.getAddress().toString() + ":" + remote.getPort();
var reason = context.reason() != null ? context.reason() : "Connection closed by client";
logger.info("Closing websocket connection from " + host + " for reason: " + reason);
users.remove(context);
Expand Down Expand Up @@ -332,9 +335,9 @@ public void broadcastMessage(Object message, WsContext userToSkip)
sendMessage(message, user);
}
} else {
var skipUserPort = userToSkip.session.getRemote().getInetSocketAddress().getPort();
var skipUserPort = ((InetSocketAddress) userToSkip.session.getRemoteAddress()).getPort();
for (WsContext user : users) {
var userPort = user.session.getRemote().getInetSocketAddress().getPort();
var userPort = ((InetSocketAddress) user.session.getRemoteAddress()).getPort();
if (userPort != skipUserPort) {
sendMessage(message, user);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ public static void onSettingsImportRequest(Context ctx) {
return;
}

if (!file.getExtension().contains("zip")) {
if (!file.extension().contains("zip")) {
ctx.status(400);
ctx.result(
"The uploaded file was not of type 'zip'. The uploaded file should be a .zip file.");
Expand Down Expand Up @@ -132,7 +132,7 @@ public static void onHardwareConfigRequest(Context ctx) {
return;
}

if (!file.getExtension().contains("json")) {
if (!file.extension().contains("json")) {
ctx.status(400);
ctx.result(
"The uploaded file was not of type 'json'. The uploaded file should be a .json file.");
Expand Down Expand Up @@ -174,7 +174,7 @@ public static void onHardwareSettingsRequest(Context ctx) {
return;
}

if (!file.getExtension().contains("json")) {
if (!file.extension().contains("json")) {
ctx.status(400);
ctx.result(
"The uploaded file was not of type 'json'. The uploaded file should be a .json file.");
Expand Down Expand Up @@ -216,7 +216,7 @@ public static void onNetworkConfigRequest(Context ctx) {
return;
}

if (!file.getExtension().contains("json")) {
if (!file.extension().contains("json")) {
ctx.status(400);
ctx.result(
"The uploaded file was not of type 'json'. The uploaded file should be a .json file.");
Expand Down Expand Up @@ -258,7 +258,7 @@ public static void onOfflineUpdateRequest(Context ctx) {
return;
}

if (!file.getExtension().contains("jar")) {
if (!file.extension().contains("jar")) {
ctx.status(400);
ctx.result(
"The uploaded file was not of type 'jar'. The uploaded file should be a .jar file.");
Expand All @@ -273,7 +273,7 @@ public static void onOfflineUpdateRequest(Context ctx) {
File targetFile = new File(filePath.toString());
var stream = new FileOutputStream(targetFile);

file.getContent().transferTo(stream);
file.content().transferTo(stream);
stream.close();

ctx.status(200);
Expand Down Expand Up @@ -492,14 +492,20 @@ public static void onMetricsPublishRequest(Context ctx) {
*/
private static Optional<File> handleTempFileCreation(UploadedFile file) {
var tempFilePath =
new File(Path.of(System.getProperty("java.io.tmpdir"), file.getFilename()).toString());
tempFilePath.getParentFile().mkdirs();
new File(Path.of(System.getProperty("java.io.tmpdir"), file.filename()).toString());
boolean makeDirsRes = tempFilePath.getParentFile().mkdirs();

if (!makeDirsRes) {
logger.error(
"There was an error while uploading " + file.filename() + " to the temp folder!");
return Optional.empty();
}

try {
FileUtils.copyInputStreamToFile(file.getContent(), tempFilePath);
FileUtils.copyInputStreamToFile(file.content(), tempFilePath);
} catch (IOException e) {
logger.error(
"There was an error while uploading " + file.getFilename() + " to the temp folder!");
"There was an error while uploading " + file.filename() + " to the temp folder!");
return Optional.empty();
}

Expand Down
51 changes: 26 additions & 25 deletions photon-server/src/main/java/org/photonvision/server/Server.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@
package org.photonvision.server;

import io.javalin.Javalin;
import io.javalin.http.staticfiles.Location;
import io.javalin.plugin.bundled.CorsPluginConfig;
import java.net.InetSocketAddress;
import java.util.StringJoiner;
import org.photonvision.common.logging.LogGroup;
import org.photonvision.common.logging.Logger;
Expand All @@ -27,45 +28,45 @@ public class Server {
private static final Logger logger = new Logger(Server.class, LogGroup.WebServer);

public static void start(int port) {
Javalin app =
var app =
Javalin.create(
config -> {
config.showJavalinBanner = false;
config.addStaticFiles("web", Location.CLASSPATH);
config.enableCorsForAllOrigins();
javalinConfig -> {
javalinConfig.showJavalinBanner = false;
javalinConfig.staticFiles.add("web");
javalinConfig.plugins.enableCors(
corsContainer -> {
corsContainer.add(CorsPluginConfig::anyHost);
});

config.requestLogger(
javalinConfig.requestLogger.http(
(ctx, ms) -> {
StringJoiner joiner =
new StringJoiner(" ")
.add("Handled HTTP request of type")
.add(ctx.req.getMethod())
.add(ctx.req().getMethod())
.add("from endpoint")
.add(ctx.path())
.add("for host")
.add(ctx.req.getRemoteHost())
.add(ctx.req().getRemoteHost())
.add("in")
.add(ms.toString())
.add("ms");

logger.debug(joiner.toString());
});

config.wsLogger(
ws ->
ws.onMessage(
ctx -> logger.debug("Got WebSockets message: " + ctx.message())));

config.wsLogger(
ws ->
ws.onBinaryMessage(
ctx ->
logger.trace(
() -> {
var insa = ctx.session.getRemote().getInetSocketAddress();
var host = insa.getAddress().toString() + ":" + insa.getPort();
return "Got WebSockets binary message from host " + host;
})));
javalinConfig.requestLogger.ws(
ws -> {
ws.onMessage(ctx -> logger.debug("Got WebSockets message: " + ctx.message()));
ws.onBinaryMessage(
ctx ->
logger.trace(
() -> {
var remote = (InetSocketAddress) ctx.session.getRemoteAddress();
var host =
remote.getAddress().toString() + ":" + remote.getPort();
return "Got WebSockets binary message from host: " + host;
}));
});
});

/*Web Socket Events for Data Exchange */
Expand Down

0 comments on commit b3a3ab7

Please sign in to comment.