From 8af5fa7157be6bfec041cbfebb55f4503892f4ab Mon Sep 17 00:00:00 2001 From: Trumeet Date: Wed, 13 Jul 2022 12:44:49 -0700 Subject: Add error codes to distinguish invalid requests and server errors API:ADDITION Signed-off-by: Trumeet --- src/main/java/moe/ymc/acron/net/WSFrameHandler.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'src/main/java/moe/ymc/acron/net') diff --git a/src/main/java/moe/ymc/acron/net/WSFrameHandler.java b/src/main/java/moe/ymc/acron/net/WSFrameHandler.java index c578f2e..713d433 100644 --- a/src/main/java/moe/ymc/acron/net/WSFrameHandler.java +++ b/src/main/java/moe/ymc/acron/net/WSFrameHandler.java @@ -1,5 +1,6 @@ package moe.ymc.acron.net; +import com.google.gson.JsonParseException; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.handler.codec.http.websocketx.*; @@ -57,10 +58,18 @@ public class WSFrameHandler extends SimpleChannelInboundHandler final ClientIdentification identification = ctx.channel().attr(Attributes.ID).get(); final ClientConfiguration configuration = ctx.channel().attr(Attributes.CONFIGURATION).get(); - int id = -2; + int id; + final Request request; try { - final Request request = Serializer.deserialize(frame); + request = Serializer.deserialize(frame); id = request.getId(); + } catch (JsonParseException | IllegalArgumentException | IllegalStateException e) { + ctx.channel().writeAndFlush( + Serializer.serialize(new EventError(-2, EventError.Code.BAD_REQUEST.value, e.getMessage())) + ); + return; + } + try { if (request instanceof final ReqCmd reqCmd) { LOGGER.info("Client {} executed a command: `{}`.", identification.client().id(), @@ -90,7 +99,9 @@ public class WSFrameHandler extends SimpleChannelInboundHandler "This may just be a malformed request. " + "It is reported to the client.", e); - ctx.channel().writeAndFlush(Serializer.serialize(new EventError(id, e.getMessage()))); + ctx.channel().writeAndFlush( + Serializer.serialize(new EventError(id, EventError.Code.SERVER_ERROR.value, e.getMessage())) + ); } } -- cgit v1.2.3