From 0b5d63b6f7addb4a57ed5360dfbf8aeac61f3ed9 Mon Sep 17 00:00:00 2001 From: Phyrone Date: Thu, 21 May 2020 13:06:27 +0200 Subject: [PATCH 1/2] unknown events will be catched and no longer break the whole client (f.e. on teaspeak servers) --- .../socket/client/LocalTeamspeakClientSocket.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/LocalTeamspeakClientSocket.java b/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/LocalTeamspeakClientSocket.java index fbd6322..086f3a7 100644 --- a/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/LocalTeamspeakClientSocket.java +++ b/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/LocalTeamspeakClientSocket.java @@ -433,9 +433,13 @@ public class LocalTeamspeakClientSocket if (processor != null) { processor.process(client, singleCommand); } else if (singleCommand.getName().startsWith("notify")) { - TS3Event event = TS3Event.createEvent(singleCommand); + try { + TS3Event event = TS3Event.createEvent(singleCommand); + commandExecutionService.submit(() -> listeners.forEach(event::fire)); + } catch (IllegalArgumentException exception) { + exception.printStackTrace(); + } - commandExecutionService.submit(() -> listeners.forEach(event::fire)); } else { CommandProcessor awaitingCommandProcessor; @@ -521,9 +525,9 @@ public class LocalTeamspeakClientSocket if (microphone != null && microphoneThread == null) { microphoneThread = new HighPrecisionTimer( - 20, - 5F, // up to 100ms of drift/catchup - new MicrophoneTask() + 20, + 5F, // up to 100ms of drift/catchup + new MicrophoneTask() ); microphoneThread.setDaemon(true); From baf74654f11a25812fe80db9eea9e3d51b0e9967 Mon Sep 17 00:00:00 2001 From: Phyrone Date: Sat, 23 May 2020 15:43:00 +0200 Subject: [PATCH 2/2] replaced IllegalArgumentException with an UnknownTeamspeakEvent if the event is not registered --- .../manevolent/ts3j/event/TS3Event.java | 2 +- .../manevolent/ts3j/event/TS3Listener.java | 1 + .../ts3j/event/UnknownTeamspeakEvent.java | 21 +++++++++++++++++++ .../client/LocalTeamspeakClientSocket.java | 9 ++------ 4 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/github/manevolent/ts3j/event/UnknownTeamspeakEvent.java diff --git a/src/main/java/com/github/manevolent/ts3j/event/TS3Event.java b/src/main/java/com/github/manevolent/ts3j/event/TS3Event.java index c38ffae..e84c561 100644 --- a/src/main/java/com/github/manevolent/ts3j/event/TS3Event.java +++ b/src/main/java/com/github/manevolent/ts3j/event/TS3Event.java @@ -88,7 +88,7 @@ public interface TS3Event { case "notifychannelpermhints": // CLIENT return new ChannelPermHintsEvent(command.toMap()); default: - throw new IllegalArgumentException("unknown event: " + command.getName()); + return new UnknownTeamspeakEvent(command.getName(),command.toMap()); } } } diff --git a/src/main/java/com/github/manevolent/ts3j/event/TS3Listener.java b/src/main/java/com/github/manevolent/ts3j/event/TS3Listener.java index e2024fd..0f68c23 100644 --- a/src/main/java/com/github/manevolent/ts3j/event/TS3Listener.java +++ b/src/main/java/com/github/manevolent/ts3j/event/TS3Listener.java @@ -57,4 +57,5 @@ public interface TS3Listener { default void onClientChatClosed(ClientChatClosedEvent e) {} default void onClientPermHints(ClientPermHintsEvent e) {} default void onChannelPermHints(ChannelPermHintsEvent e) {} + default void onUnknownEvent(UnknownTeamspeakEvent e){} } diff --git a/src/main/java/com/github/manevolent/ts3j/event/UnknownTeamspeakEvent.java b/src/main/java/com/github/manevolent/ts3j/event/UnknownTeamspeakEvent.java new file mode 100644 index 0000000..7303b4d --- /dev/null +++ b/src/main/java/com/github/manevolent/ts3j/event/UnknownTeamspeakEvent.java @@ -0,0 +1,21 @@ +package com.github.manevolent.ts3j.event; + +import java.util.Map; + +public class UnknownTeamspeakEvent extends BaseEvent { + String command; + + public UnknownTeamspeakEvent(String command, Map map) { + super(map); + this.command = command; + } + + public String getCommand() { + return command; + } + + @Override + public void fire(TS3Listener listener) { + listener.onUnknownEvent(this); + } +} diff --git a/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/LocalTeamspeakClientSocket.java b/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/LocalTeamspeakClientSocket.java index 086f3a7..6de839a 100644 --- a/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/LocalTeamspeakClientSocket.java +++ b/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/LocalTeamspeakClientSocket.java @@ -433,13 +433,8 @@ public class LocalTeamspeakClientSocket if (processor != null) { processor.process(client, singleCommand); } else if (singleCommand.getName().startsWith("notify")) { - try { - TS3Event event = TS3Event.createEvent(singleCommand); - commandExecutionService.submit(() -> listeners.forEach(event::fire)); - } catch (IllegalArgumentException exception) { - exception.printStackTrace(); - } - + TS3Event event = TS3Event.createEvent(singleCommand); + commandExecutionService.submit(() -> listeners.forEach(event::fire)); } else { CommandProcessor awaitingCommandProcessor;