diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/socket/Client.java b/LaunchServer/src/main/java/ru/gravit/launchserver/socket/Client.java index 40346ddc..74deb416 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/socket/Client.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/socket/Client.java @@ -2,6 +2,7 @@ import ru.gravit.launcher.ClientPermissions; import ru.gravit.launcher.profiles.ClientProfile; +import ru.gravit.utils.helper.LogHelper; public class Client { public long session; @@ -13,6 +14,7 @@ public class Client { public boolean checkSign; public ClientPermissions permissions; public String username; + public LogHelper.Output logOutput; public Client(long session) { this.session = session; diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/socket/websocket/WebSocketService.java b/LaunchServer/src/main/java/ru/gravit/launchserver/socket/websocket/WebSocketService.java index b13e3ade..3d1150e7 100644 --- a/LaunchServer/src/main/java/ru/gravit/launchserver/socket/websocket/WebSocketService.java +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/socket/websocket/WebSocketService.java @@ -16,6 +16,7 @@ import ru.gravit.launchserver.socket.websocket.json.EchoResponse; import ru.gravit.launchserver.socket.websocket.json.JsonResponseAdapter; import ru.gravit.launchserver.socket.websocket.json.JsonResponseInterface; +import ru.gravit.launchserver.socket.websocket.json.admin.AddLogListenerResponse; import ru.gravit.launchserver.socket.websocket.json.auth.*; import ru.gravit.launchserver.socket.websocket.json.update.LauncherResponse; import ru.gravit.launchserver.socket.websocket.json.update.UpdateListResponse; @@ -76,6 +77,7 @@ public void registerResponses() { registerResponse("updateList", UpdateListResponse.class); registerResponse("cmdExec", UpdateListResponse.class); registerResponse("setProfile", SetProfileResponse.class); + registerResponse("addLogListener", AddLogListenerResponse.class); } public void sendObject(ChannelHandlerContext ctx, Object obj) { diff --git a/LaunchServer/src/main/java/ru/gravit/launchserver/socket/websocket/json/admin/AddLogListenerResponse.java b/LaunchServer/src/main/java/ru/gravit/launchserver/socket/websocket/json/admin/AddLogListenerResponse.java new file mode 100644 index 00000000..48b30c7b --- /dev/null +++ b/LaunchServer/src/main/java/ru/gravit/launchserver/socket/websocket/json/admin/AddLogListenerResponse.java @@ -0,0 +1,49 @@ +package ru.gravit.launchserver.socket.websocket.json.admin; + +import io.netty.channel.ChannelHandlerContext; +import ru.gravit.launcher.events.request.ErrorRequestEvent; +import ru.gravit.launcher.events.request.LogEvent; +import ru.gravit.launchserver.socket.Client; +import ru.gravit.launchserver.socket.websocket.WebSocketService; +import ru.gravit.launchserver.socket.websocket.json.JsonResponseInterface; +import ru.gravit.utils.helper.LogHelper; + +public class AddLogListenerResponse implements JsonResponseInterface { + @Override + public String getType() { + return "addLogListener"; + } + + @Override + public void execute(WebSocketService service, ChannelHandlerContext ctx, Client client) throws Exception { + if (!client.isAuth) { + service.sendObject(ctx, new ErrorRequestEvent("Access denied")); + return; + } + if (!client.permissions.canAdmin) { + service.sendObject(ctx, new ErrorRequestEvent("Access denied")); + return; + } + if(client.logOutput != null) + { + LogHelper.info("Client %s remove log listener", client.username); + LogHelper.removeOutput(client.logOutput); + } + else + { + LogHelper.info("Client %s add log listener", client.username); + LogHelper.Output output = (str) -> { + if(!ctx.isRemoved()) + { + service.sendObject(ctx,new LogEvent(str)); + } + else { + LogHelper.info("Client %s remove log listener", client.username); + LogHelper.removeOutput(client.logOutput); + } + }; + client.logOutput = output; + LogHelper.addOutput(output); + } + } +} diff --git a/libLauncher/src/main/java/ru/gravit/launcher/events/request/LogEvent.java b/libLauncher/src/main/java/ru/gravit/launcher/events/request/LogEvent.java new file mode 100644 index 00000000..6afbc640 --- /dev/null +++ b/libLauncher/src/main/java/ru/gravit/launcher/events/request/LogEvent.java @@ -0,0 +1,15 @@ +package ru.gravit.launcher.events.request; + +import ru.gravit.launcher.request.ResultInterface; + +public class LogEvent implements ResultInterface { + @Override + public String getType() { + return "log"; + } + public String string; + + public LogEvent(String string) { + this.string = string; + } +}