Build AsminVoicechat / prepare-release (push) Successful in 14s
Build AsminVoicechat / build-and-test (17) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (18) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (19) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (20) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (21) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (22) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (23) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (24) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (25) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (26) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (27-ea) (push) Canceled after 0s
Build AsminVoicechat / build-and-test (16) (push) Canceled after 38s
100 lines
2.8 KiB
Java
100 lines
2.8 KiB
Java
/*
|
|
* Decompiled with CFR 0.152.
|
|
*/
|
|
package de.maxhenkel.voicechat.plugins.impl.audiosender;
|
|
|
|
import de.maxhenkel.voicechat.Voicechat;
|
|
import de.maxhenkel.voicechat.api.audiosender.AudioSender;
|
|
import de.maxhenkel.voicechat.voice.common.MicPacket;
|
|
import de.maxhenkel.voicechat.voice.server.Server;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.UUID;
|
|
|
|
public class AudioSenderImpl
|
|
implements AudioSender {
|
|
private static final Map<UUID, AudioSenderImpl> AUDIO_SENDERS = new HashMap<UUID, AudioSenderImpl>();
|
|
private final UUID uuid;
|
|
private boolean whispering;
|
|
private long nextSequenceNumber;
|
|
|
|
public AudioSenderImpl(UUID uuid) {
|
|
this.uuid = uuid;
|
|
}
|
|
|
|
public static boolean registerAudioSender(AudioSenderImpl audioSender) {
|
|
if (Voicechat.SERVER.isCompatible(audioSender.uuid)) {
|
|
return false;
|
|
}
|
|
if (AUDIO_SENDERS.containsKey(audioSender.uuid)) {
|
|
return false;
|
|
}
|
|
AUDIO_SENDERS.put(audioSender.uuid, audioSender);
|
|
return true;
|
|
}
|
|
|
|
public static boolean unregisterAudioSender(AudioSenderImpl audioSender) {
|
|
return AUDIO_SENDERS.remove(audioSender.uuid) != null;
|
|
}
|
|
|
|
@Override
|
|
public AudioSender whispering(boolean whispering) {
|
|
this.whispering = whispering;
|
|
return this;
|
|
}
|
|
|
|
@Override
|
|
public boolean isWhispering() {
|
|
return this.whispering;
|
|
}
|
|
|
|
@Override
|
|
public AudioSender sequenceNumber(long sequenceNumber) {
|
|
if (sequenceNumber < 0L) {
|
|
throw new IllegalArgumentException("Sequence number must be positive");
|
|
}
|
|
this.nextSequenceNumber = sequenceNumber;
|
|
return this;
|
|
}
|
|
|
|
@Override
|
|
public boolean canSend() {
|
|
return !Voicechat.SERVER.isCompatible(this.uuid) && AUDIO_SENDERS.get(this.uuid) == this;
|
|
}
|
|
|
|
@Override
|
|
public boolean send(byte[] opusEncodedAudioData) {
|
|
return this.sendMicrophonePacket(opusEncodedAudioData);
|
|
}
|
|
|
|
@Override
|
|
public boolean reset() {
|
|
return this.sendMicrophonePacket(new byte[0]);
|
|
}
|
|
|
|
public boolean sendMicrophonePacket(byte[] data) {
|
|
if (data == null) {
|
|
throw new IllegalStateException("opusEncodedData is not set");
|
|
}
|
|
if (!this.canSend()) {
|
|
return false;
|
|
}
|
|
Server server = Voicechat.SERVER.getServer();
|
|
if (server == null) {
|
|
return true;
|
|
}
|
|
try {
|
|
MicPacket packet = new MicPacket(data, data.length > 0 && this.whispering, this.nextSequenceNumber++);
|
|
if (data.length <= 0) {
|
|
this.nextSequenceNumber = 0L;
|
|
}
|
|
server.onMicPacket(this.uuid, packet);
|
|
}
|
|
catch (Exception e) {
|
|
Voicechat.LOGGER.error("Failed to send audio", e);
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
|