diff --git a/src/main/java/com/github/manevolent/ts3j/event/ClientUpdatedEvent.java b/src/main/java/com/github/manevolent/ts3j/event/ClientUpdatedEvent.java new file mode 100644 index 0000000..1b4fc58 --- /dev/null +++ b/src/main/java/com/github/manevolent/ts3j/event/ClientUpdatedEvent.java @@ -0,0 +1,45 @@ +package com.github.manevolent.ts3j.event; + +/* + * #%L + * TeamSpeak 3 Java API + * %% + * Copyright (C) 2014 Bert De Geyter + * %% + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * #L% + */ + +import java.util.Map; + +public class ClientUpdatedEvent extends BaseEvent { + + public ClientUpdatedEvent(Map map) { + super(map); + } + + public int getClientId() { + return getInt("clid"); + } + + @Override + public void fire(TS3Listener listener) { + listener.onClientChanged(this); + } +} 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 f9fd8bd..2b42b88 100644 --- a/src/main/java/com/github/manevolent/ts3j/event/TS3Event.java +++ b/src/main/java/com/github/manevolent/ts3j/event/TS3Event.java @@ -61,8 +61,12 @@ public interface TS3Event { return new ServerGroupListEvent(command.toMap()); case "notifychannelgrouplist": // CLIENT return new ChannelGroupListEvent(command.toMap()); + case "notifyclientchannelgroupchanged": // CLIENT + return new ClientChannelGroupChangedEvent(command.toMap()); case "notifyclientneededpermissions": // CLIENT return new ClientNeededPermissionsEvent(command.toMap()); + case "notifyclientupdated": // CLIENT + return new ClientUpdatedEvent(command.toMap()); default: throw new IllegalArgumentException("unknown event: " + command.getName()); } 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 41c20c9..9f73d6e 100644 --- a/src/main/java/com/github/manevolent/ts3j/event/TS3Listener.java +++ b/src/main/java/com/github/manevolent/ts3j/event/TS3Listener.java @@ -60,4 +60,6 @@ public interface TS3Listener { void onClientChannelGroupChanged(ClientChannelGroupChangedEvent e); + void onClientChanged(ClientUpdatedEvent e); + } diff --git a/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/AbstractTeamspeakClientSocket.java b/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/AbstractTeamspeakClientSocket.java index 8403c22..9af8c5d 100644 --- a/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/AbstractTeamspeakClientSocket.java +++ b/src/main/java/com/github/manevolent/ts3j/protocol/socket/client/AbstractTeamspeakClientSocket.java @@ -472,6 +472,8 @@ public abstract class AbstractTeamspeakClientSocket // Finally, handle compressed bodies if (packet.getBody() instanceof PacketBodyCompressed) { + Ts3Debugging.debug("[PROTOCOL] DECOMPRESS " + networkPacket.getHeader().getType().name()); + byte[] decompressed = QuickLZ.decompress(((PacketBodyCompressed) packet.getBody()).getCompressed()); packetBuffer = ByteBuffer @@ -481,8 +483,6 @@ public abstract class AbstractTeamspeakClientSocket packet = new Packet(packet.getRole(), packet.getHeader()); packet.readBody(packetBuffer); - - Ts3Debugging.debug("[PROTOCOL] DECOMPRESS " + networkPacket.getHeader().getType().name()); } // Return to parent handler @@ -988,7 +988,6 @@ public abstract class AbstractTeamspeakClientSocket private boolean putRelative(int index, int generation) { Integer existing = buffer[index]; - Ts3Debugging.debug("putRelative: " + index); if (existing == null || existing != generation) { buffer[index] = generation; return true; diff --git a/src/main/java/com/github/manevolent/ts3j/util/QuickLZ.java b/src/main/java/com/github/manevolent/ts3j/util/QuickLZ.java index 10e4d25..858d97f 100644 --- a/src/main/java/com/github/manevolent/ts3j/util/QuickLZ.java +++ b/src/main/java/com/github/manevolent/ts3j/util/QuickLZ.java @@ -324,7 +324,7 @@ public final class QuickLZ int level = (source[0] >>> 2) & 0x3; if (level != 1 && level != 3) - return source; + throw new IllegalArgumentException("unsupported QuickLZ level: " + level); if ((source[0] & 1) != 1) {