@@ -18,6 +18,7 @@ import java.io.EOFException
1818import java.net.ConnectException
1919import java.net.SocketException
2020import java.net.SocketTimeoutException
21+ import java.util.concurrent.atomic.AtomicBoolean
2122
2223class LavalinkSocket (private val node : LavalinkNode ) : WebSocketListener(), Closeable {
2324 private val logger = LoggerFactory .getLogger(LavalinkSocket ::class .java)
@@ -27,11 +28,14 @@ class LavalinkSocket(private val node: LavalinkNode) : WebSocketListener(), Clos
2728 var mayReconnect = true
2829 var lastReconnectAttempt = 0L
2930 @Volatile
30- private var connectionsAttempted = 0
31+ private var reconnectsAttempted = 0
3132 val reconnectInterval: Int
32- get() = connectionsAttempted * 2000 - 2000
33+ get() = reconnectsAttempted * 2000 - 2000
3334 var open: Boolean = false
3435 private set
36+ @Volatile
37+ private var hasEverConnected = false
38+ private val isAttemptingResume = AtomicBoolean (node.sessionId != null )
3539
3640 init {
3741 connect()
@@ -40,7 +44,9 @@ class LavalinkSocket(private val node: LavalinkNode) : WebSocketListener(), Clos
4044 override fun onOpen (webSocket : WebSocket , response : Response ) {
4145 logger.info(" ${node.name} has been connected!" )
4246 open = true
43- connectionsAttempted = 0
47+ reconnectsAttempted = 0
48+ hasEverConnected = true
49+ isAttemptingResume.set(false )
4450 }
4551
4652 override fun onMessage (webSocket : WebSocket , text : String ) {
@@ -190,8 +196,8 @@ class LavalinkSocket(private val node: LavalinkNode) : WebSocketListener(), Clos
190196 }
191197 }
192198
193- if (connectionsAttempted == 1 && lastReconnectAttempt > 0 ) {
194- node.lavalink.onNodeFirstReconnectFailed (node)
199+ if (hasEverConnected && isAttemptingResume.getAndSet( false ) ) {
200+ node.lavalink.onResumeReconnectFailed (node)
195201 }
196202 }
197203
@@ -221,6 +227,7 @@ class LavalinkSocket(private val node: LavalinkNode) : WebSocketListener(), Clos
221227
222228 fun attemptReconnect () {
223229 lastReconnectAttempt = System .currentTimeMillis()
230+ reconnectsAttempted++
224231 connect()
225232 }
226233
@@ -236,14 +243,13 @@ class LavalinkSocket(private val node: LavalinkNode) : WebSocketListener(), Clos
236243 .addHeader(" Client-Name" , " Lavalink-Client/${CLIENT_VERSION } " )
237244 .addHeader(" User-Id" , node.lavalink.userId.toString())
238245 .apply {
239- if (node.sessionId != null && connectionsAttempted == 0 ) {
246+ if (node.sessionId != null && isAttemptingResume.get() ) {
240247 addHeader(" Session-Id" , node.sessionId!! )
241248 }
242249 }
243250 .build()
244251
245252 mayReconnect = true
246- connectionsAttempted++
247253 socket = node.httpClient.newWebSocket(request, this )
248254 }
249255
@@ -254,4 +260,8 @@ class LavalinkSocket(private val node: LavalinkNode) : WebSocketListener(), Clos
254260 socket?.close(1000 , " Client shutdown" )
255261 socket?.cancel()
256262 }
263+
264+ internal fun onResumableConnectionDisconnected () {
265+ isAttemptingResume.set(true )
266+ }
257267}
0 commit comments