Skip to content

Commit fbc2423

Browse files
committed
Merge branch 'dev'
2 parents 8738c3c + f81b3f3 commit fbc2423

18 files changed

+268
-57
lines changed

LavalinkClient/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
description = 'JDA based client for the Lavalink-Server'
2-
version System.getenv('dev') == 'true' ? '-SNAPSHOT' : '2.0.1'
2+
version System.getenv('dev') == 'true' ? '-SNAPSHOT' : '2.1'
33
ext {
44
moduleName = 'Lavalink-Client'
55
}
@@ -37,6 +37,7 @@ dependencies {
3737
compile group: 'org.slf4j', name: 'slf4j-api', version: slf4jVersion
3838
compile group: 'org.json', name: 'json', version: jsonOrgVersion
3939
compile group: 'net.dv8tion', name: 'JDA', version: jdaVersion
40+
compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: spotbugsAnnotationsVersion
4041
compileOnly group: 'io.prometheus', name: 'simpleclient', version: prometheusVersion
4142
testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: junitJupiterVersion
4243
testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: junitJupiterVersion

LavalinkClient/src/main/java/lavalink/client/io/Lavalink.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
package lavalink.client.io;
2424

25+
import edu.umd.cs.findbugs.annotations.NonNull;
2526
import lavalink.client.LavalinkUtil;
2627
import net.dv8tion.jda.core.JDA;
2728
import net.dv8tion.jda.core.entities.Guild;
@@ -36,7 +37,6 @@
3637
import org.slf4j.Logger;
3738
import org.slf4j.LoggerFactory;
3839

39-
import javax.annotation.Nonnull;
4040
import java.net.URI;
4141
import java.util.Collection;
4242
import java.util.HashMap;
@@ -90,7 +90,7 @@ public boolean getAutoReconnect() {
9090

9191
private static final AtomicInteger nodeCounter = new AtomicInteger(0);
9292

93-
public void addNode(@Nonnull URI serverUri, @Nonnull String password) {
93+
public void addNode(@NonNull URI serverUri, @NonNull String password) {
9494
addNode("Lavalink_Node_#" + nodeCounter.getAndIncrement(), serverUri, password);
9595
}
9696

@@ -102,7 +102,7 @@ public void addNode(@Nonnull URI serverUri, @Nonnull String password) {
102102
* @param password
103103
* password of the node to be added
104104
*/
105-
public void addNode(@Nonnull String name, @Nonnull URI serverUri, @Nonnull String password) {
105+
public void addNode(@NonNull String name, @NonNull URI serverUri, @NonNull String password) {
106106
HashMap<String, String> headers = new HashMap<>();
107107
headers.put("Authorization", password);
108108
headers.put("Num-Shards", Integer.toString(numShards));
@@ -120,19 +120,19 @@ public void removeNode(int key) {
120120
}
121121

122122
@SuppressWarnings("unused")
123-
@Nonnull
123+
@NonNull
124124
public LavalinkLoadBalancer getLoadBalancer() {
125125
return loadBalancer;
126126
}
127127

128128
@SuppressWarnings("WeakerAccess")
129-
@Nonnull
129+
@NonNull
130130
public Link getLink(String guildId) {
131131
return links.computeIfAbsent(guildId, __ -> new Link(this, guildId));
132132
}
133133

134134
@SuppressWarnings("WeakerAccess")
135-
@Nonnull
135+
@NonNull
136136
public Link getLink(Guild guild) {
137137
return getLink(guild.getId());
138138
}
@@ -143,25 +143,25 @@ public int getNumShards() {
143143
}
144144

145145
@SuppressWarnings("WeakerAccess")
146-
@Nonnull
146+
@NonNull
147147
public Collection<Link> getLinks() {
148148
return links.values();
149149
}
150150

151151
@SuppressWarnings("WeakerAccess")
152-
@Nonnull
152+
@NonNull
153153
public List<LavalinkSocket> getNodes() {
154154
return nodes;
155155
}
156156

157157
@SuppressWarnings("WeakerAccess")
158-
@Nonnull
158+
@NonNull
159159
public JDA getJda(int shardId) {
160160
return jdaProvider.apply(shardId);
161161
}
162162

163163
@SuppressWarnings("WeakerAccess")
164-
@Nonnull
164+
@NonNull
165165
public JDA getJdaFromSnowflake(String snowflake) {
166166
return jdaProvider.apply(LavalinkUtil.getShardFromSnowflake(snowflake, numShards));
167167
}

LavalinkClient/src/main/java/lavalink/client/io/LavalinkLoadBalancer.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222

2323
package lavalink.client.io;
2424

25-
import javax.annotation.Nonnull;
25+
import edu.umd.cs.findbugs.annotations.NonNull;
26+
2627
import java.util.ArrayList;
2728
import java.util.Collections;
2829
import java.util.List;
@@ -38,7 +39,7 @@ public class LavalinkLoadBalancer {
3839
this.lavalink = lavalink;
3940
}
4041

41-
@Nonnull
42+
@NonNull
4243
public LavalinkSocket determineBestSocket(long guild) {
4344
LavalinkSocket leastPenalty = null;
4445
int record = Integer.MAX_VALUE;
@@ -75,6 +76,13 @@ void onNodeDisconnect(LavalinkSocket disconnected) {
7576
}
7677

7778
void onNodeConnect(LavalinkSocket connected) {
79+
long otherAvailableNodes = lavalink.getNodes().stream()
80+
.filter(node -> node != connected)
81+
.filter(LavalinkSocket::isAvailable)
82+
.count();
83+
if (otherAvailableNodes > 0) { //only update links if this is the only connected node
84+
return;
85+
}
7886
lavalink.getLinks().forEach(link -> {
7987
if (link.getNode(false) == null)
8088
link.changeNode(connected);

LavalinkClient/src/main/java/lavalink/client/io/LavalinkSocket.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
package lavalink.client.io;
2424

2525
import com.sedmelluq.discord.lavaplayer.track.AudioTrackEndReason;
26+
import edu.umd.cs.findbugs.annotations.NonNull;
27+
import edu.umd.cs.findbugs.annotations.Nullable;
2628
import lavalink.client.LavalinkUtil;
2729
import lavalink.client.player.LavalinkPlayer;
2830
import lavalink.client.player.event.PlayerEvent;
@@ -35,8 +37,6 @@
3537
import org.slf4j.Logger;
3638
import org.slf4j.LoggerFactory;
3739

38-
import javax.annotation.Nonnull;
39-
import javax.annotation.Nullable;
4040
import java.io.IOException;
4141
import java.net.ConnectException;
4242
import java.net.URI;
@@ -49,19 +49,19 @@ public class LavalinkSocket extends ReusableWebSocket {
4949
private static final Logger log = LoggerFactory.getLogger(LavalinkSocket.class);
5050

5151
private static final int TIMEOUT_MS = 5000;
52-
@Nonnull
52+
@NonNull
5353
private final String name;
54-
@Nonnull
54+
@NonNull
5555
private final Lavalink lavalink;
5656
@Nullable
5757
private RemoteStats stats;
5858
long lastReconnectAttempt = 0;
5959
private int reconnectsAttempted = 0;
60-
@Nonnull
60+
@NonNull
6161
private final URI remoteUri;
6262
private boolean available = false;
6363

64-
LavalinkSocket(@Nonnull String name, @Nonnull Lavalink lavalink, @Nonnull URI serverUri, Draft protocolDraft, Map<String, String> headers) {
64+
LavalinkSocket(@NonNull String name, @NonNull Lavalink lavalink, @NonNull URI serverUri, Draft protocolDraft, Map<String, String> headers) {
6565
super(serverUri, protocolDraft, headers, TIMEOUT_MS);
6666
this.name = name;
6767
this.lavalink = lavalink;
@@ -179,7 +179,7 @@ public void send(String text) throws NotYetConnectedException {
179179
}
180180
}
181181

182-
@Nonnull
182+
@NonNull
183183
@SuppressWarnings("unused")
184184
public URI getRemoteUri() {
185185
return remoteUri;
@@ -204,7 +204,7 @@ public boolean isAvailable() {
204204
return available && isOpen() && !isClosing();
205205
}
206206

207-
@Nonnull
207+
@NonNull
208208
public String getName() {
209209
return name;
210210
}

LavalinkClient/src/main/java/lavalink/client/io/Link.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222

2323
package lavalink.client.io;
2424

25+
import edu.umd.cs.findbugs.annotations.NonNull;
26+
import edu.umd.cs.findbugs.annotations.Nullable;
2527
import lavalink.client.player.LavalinkPlayer;
2628
import net.dv8tion.jda.core.JDA;
2729
import net.dv8tion.jda.core.Permission;
@@ -37,8 +39,6 @@
3739
import org.slf4j.Logger;
3840
import org.slf4j.LoggerFactory;
3941

40-
import javax.annotation.Nonnull;
41-
import javax.annotation.Nullable;
4242

4343
/**
4444
* Indicates which node we are linked to, what voice channel to use, and what player we are using
@@ -237,7 +237,7 @@ public State getState() {
237237
return state;
238238
}
239239

240-
void setState(@Nonnull State state) {
240+
void setState(@NonNull State state) {
241241
if (this.state == State.DESTROYED && state != State.DESTROYED)
242242
throw new IllegalStateException("Cannot change state to " + state + " when state is " + State.DESTROYED);
243243
if (this.state == State.DESTROYING && state != State.DESTROYED) {
@@ -248,7 +248,7 @@ void setState(@Nonnull State state) {
248248
}
249249

250250
@SuppressWarnings("WeakerAccess")
251-
@Nonnull
251+
@NonNull
252252
public JDA getJda() {
253253
return lavalink.getJdaFromSnowflake(String.valueOf(guild));
254254
}
@@ -260,7 +260,7 @@ private WebSocketClient getMainWs() {
260260
/**
261261
* Setter used by {@link VoiceStateUpdateInterceptor} to change the expected channel
262262
*/
263-
void setChannel(@Nonnull VoiceChannel channel) {
263+
void setChannel(@NonNull VoiceChannel channel) {
264264
this.channel = channel.getId();
265265
}
266266

LavalinkClient/src/main/java/lavalink/client/io/metrics/LavalinkCollector.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package lavalink.client.io.metrics;
22

3+
import edu.umd.cs.findbugs.annotations.NonNull;
34
import io.prometheus.client.Collector;
45
import io.prometheus.client.GaugeMetricFamily;
56
import lavalink.client.io.Lavalink;
67
import lavalink.client.io.LavalinkSocket;
78
import lavalink.client.io.RemoteStats;
89

9-
import javax.annotation.Nonnull;
1010
import java.util.ArrayList;
1111
import java.util.Collections;
1212
import java.util.List;
@@ -21,7 +21,7 @@ public class LavalinkCollector extends Collector {
2121

2222
private final Lavalink lavalink;
2323

24-
public LavalinkCollector(@Nonnull Lavalink lavalinkInstance) {
24+
public LavalinkCollector(@NonNull Lavalink lavalinkInstance) {
2525
this.lavalink = lavalinkInstance;
2626
}
2727

LavalinkClient/src/main/java/lavalink/client/player/LavalinkPlayer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public LavalinkPlayer(Link link) {
6060

6161
/**
6262
* Invoked by {@link Link} to make sure we keep playing music on the new node
63-
*
63+
* <p>
6464
* Used when we are moved to a new socket
6565
*/
6666
public void onNodeChange() {
@@ -93,6 +93,7 @@ public void playTrack(AudioTrack track) {
9393
json.put("endTime", trackData.endPos);
9494
}
9595
json.put("pause", paused);
96+
json.put("volume", volume);
9697
//noinspection ConstantConditions
9798
link.getNode(true).send(json.toString());
9899

LavalinkServer/application.yml.example

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,9 @@ lavalink:
1919
sentryDsn: ""
2020
bufferDurationMs: 400
2121
youtubePlaylistLoadLimit: 600
22+
gc-warnings: true
23+
24+
metrics:
25+
prometheus:
26+
enabled: false
27+
endpoint: /metrics

LavalinkServer/build.gradle

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,13 @@ apply plugin: 'com.gorylenko.gradle-git-properties'
44

55
description = 'Play audio to discord voice channels'
66
mainClassName = "lavalink.server.Launcher"
7-
version '2.0.1'
7+
version '2.1'
88
ext {
99
moduleName = 'Lavalink-Server'
1010
}
1111

1212
bootJar {
1313
archiveName = "Lavalink.jar"
14-
15-
requiresUnpack '**/jda-nas*.jar' //otherwise we get missing classes exceptions
1614
}
1715

1816
bootRun {
@@ -30,16 +28,21 @@ bootRun {
3028
dependencies {
3129
compile group: 'com.sedmelluq', name: 'lavaplayer', version: lavaplayerVersion
3230
compile group: 'com.github.DV8FromTheWorld', name: 'JDA-Audio', version: jdaAudioVersion
33-
compile group: 'com.github.FredBoat', name: 'jda-nas', version: jdaNasVersion
31+
compile group: 'com.github.FredBoat.jda-nas', name: 'jda-nas', version: jdaNasVersion
3432
compile group: 'com.github.shredder121', name: 'jda-async-packetprovider', version: jappVersion
3533
compile group: 'org.java-websocket', name: 'Java-WebSocket', version: javaWebSocketVersion
3634
compile group: 'ch.qos.logback', name: 'logback-classic', version: logbackVersion
3735
compile group: 'org.slf4j', name: 'slf4j-api', version: slf4jVersion
3836
compile group: 'io.sentry', name: 'sentry-logback', version: sentryLogbackVersion
3937
compile group: 'com.github.oshi', name: 'oshi-core', version: oshiVersion
4038
compile group: 'org.json', name: 'json', version: jsonOrgVersion
41-
compile group: 'com.google.guava', name: 'guava', version: guavaVersion
4239
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: springBootVersion
40+
compileOnly group: 'com.github.spotbugs', name: 'spotbugs-annotations', version: spotbugsAnnotationsVersion
41+
42+
compile group: 'io.prometheus', name: 'simpleclient', version: prometheusVersion
43+
compile group: 'io.prometheus', name: 'simpleclient_hotspot', version: prometheusVersion
44+
compile group: 'io.prometheus', name: 'simpleclient_logback', version: prometheusVersion
45+
compile group: 'io.prometheus', name: 'simpleclient_servlet', version: prometheusVersion
4346
}
4447

4548
//create a simple version file that we will be reading to create appropriate docker tags

LavalinkServer/src/main/java/lavalink/server/config/AudioPlayerConfiguration.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@ public class AudioPlayerConfiguration {
2323
public AudioPlayerManager audioPlayerManager(AudioSourcesConfig sources, ServerConfig serverConfig) {
2424

2525
AudioPlayerManager audioPlayerManager = new DefaultAudioPlayerManager();
26-
audioPlayerManager.enableGcMonitoring();
26+
27+
if (serverConfig.isGcWarnings()) {
28+
audioPlayerManager.enableGcMonitoring();
29+
}
2730

2831
if (sources.isYoutube()) {
2932
YoutubeAudioSourceManager youtube = new YoutubeAudioSourceManager();

0 commit comments

Comments
 (0)