From fdc5961a4b8423ffe5e6e4939f9f709f8e7e34c9 Mon Sep 17 00:00:00 2001 From: "(quasar) nebula" Date: Mon, 15 May 2023 16:06:04 -0300 Subject: WIP socket shenanigans this commit is mostly trash lol --- socket.js | 249 ++++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 137 insertions(+), 112 deletions(-) (limited to 'socket.js') diff --git a/socket.js b/socket.js index 59f70d9..5c54bbc 100644 --- a/socket.js +++ b/socket.js @@ -247,6 +247,10 @@ function validateCommand(command) { command.sender === 'server' ) || !command.startingTrack ) + case 'added queue player': + return ( + typeof command.id === 'string' + ) case 'share with party': return ( typeof command.item === 'string' || @@ -397,8 +401,6 @@ export function makeSocketServer() { if (readySockets && !readySockets.includes(socketId)) { readySockets.push(socketId) if (readySockets.length === Object.keys(socketMap).length) { - // const QP = server.canonicalBackend.queuePlayers.find(QP => QP.id === command.queuePlayer) - // silenceEvents(QP, ['set pause'], () => QP.setPause(false)) for (const socket of Object.values(socketMap)) { socket.write(serializeCommandToData({ sender: 'server', @@ -649,6 +651,9 @@ export function attachBackendToSocketClient(backend, client) { case 'unqueue': actionmsg = `removed ${itemToMessage(command.topItem)} from the queue` break + case 'added queue player': + actionmsg = `created a new playback queue` + break case 'status': isVerbose = true switch (command.status) { @@ -715,6 +720,7 @@ export function attachBackendToSocketClient(backend, client) { backend.loadSharedSources(socketId, sharedSources) } await restoreBackend(backend, command.backend) + attachPlaybackBackendListeners() // backend.on('QP: playing', QP => { // QP.once('received time data', () => { // client.sendCommand({code: 'status', status: 'sync playback'}) @@ -774,9 +780,9 @@ export function attachBackendToSocketClient(backend, client) { queuePlayer: QP.id }) }) - silenceEvents(QP, ['playing'], () => QP.play( - restoreNewItem(command.track, getPlaylistSources()) - )) + silenceEvents(QP, ['playing'], () => { + QP.play(restoreNewItem(command.track, getPlaylistSources())) + }) } return case 'queue': @@ -806,6 +812,8 @@ export function attachBackendToSocketClient(backend, client) { return } case 'set pause': { + // All this code looks very scary??? + /* // TODO: there's an event leak here when toggling pause while // nothing is playing let playingThisTrack = true @@ -817,6 +825,15 @@ export function attachBackendToSocketClient(backend, client) { if (QP) silenceEvents(QP, ['set pause'], () => QP.setPause(command.paused)) } }, command.startingTrack ? 500 : 0) + */ + silenceEvents(QP, ['set pause'], () => QP.setPause(command.paused)) + return + } + case 'added queue player': { + silenceEvents(backend, ['added queue player'], () => { + const QP = backend.addQueuePlayer() + QP.id = command.id + }) return } case 'share with party': { @@ -839,148 +856,156 @@ export function attachBackendToSocketClient(backend, client) { } }) - backend.on('QP: clear queue', queuePlayer => { + backend.on('announce join party', () => { client.sendCommand({ - code: 'clear queue', - queuePlayer: queuePlayer.id + code: 'announce join' }) }) - backend.on('QP: clear queue past', (queuePlayer, track) => { - client.sendCommand({ - code: 'clear queue past', - queuePlayer: queuePlayer.id, - track: saveItemReference(track) - }) + backend.on('share with party', item => { + if (sharedSources.items.every(x => x[originalSymbol] !== item)) { + const serialized = serializePartySource(item) + const deserialized = deserializePartySource(serialized) + + deserialized[parentSymbol] = sharedSources + deserialized[originalSymbol] = item + + sharedSources.items.push(deserialized) + backend.sharedSourcesUpdated(client.socketId, sharedSources) + + updateRestoredTracksUsingPlaylists(backend, getPlaylistSources()) + + client.sendCommand({ + code: 'share with party', + item: serialized + }) + } }) - backend.on('QP: clear queue up to', (queuePlayer, track) => { - client.sendCommand({ - code: 'clear queue up to', - queuePlayer: queuePlayer.id, - track: saveItemReference(track) - }) + backend.on('set party nickname', nickname => { + let oldNickname = client.nickname + sharedSources.name = namePartySources(nickname) + client.nickname = nickname + client.sendCommand({code: 'set nickname', nickname, oldNickname}) }) - backend.on('QP: distribute queue', (queuePlayer, topItem, opts) => { - client.sendCommand({ - code: 'distribute queue', - queuePlayer: queuePlayer.id, - topItem: saveItemReference(topItem), - opts + function attachPlaybackBackendListeners() { + backend.on('QP: clear queue', queuePlayer => { + client.sendCommand({ + code: 'clear queue', + queuePlayer: queuePlayer.id + }) }) - }) - backend.on('QP: done playing', queuePlayer => { - client.sendCommand({ - code: 'status', - status: 'done playing', - queuePlayer: queuePlayer.id + backend.on('QP: clear queue past', (queuePlayer, track) => { + client.sendCommand({ + code: 'clear queue past', + queuePlayer: queuePlayer.id, + track: saveItemReference(track) + }) }) - }) - backend.on('QP: playing', (queuePlayer, track) => { - if (track) { + backend.on('QP: clear queue up to', (queuePlayer, track) => { client.sendCommand({ - code: 'play', + code: 'clear queue up to', queuePlayer: queuePlayer.id, track: saveItemReference(track) }) - queuePlayer.once('received time data', data => { - client.sendCommand({ - code: 'status', - status: 'ready to resume', - queuePlayer: queuePlayer.id - }) + }) + + backend.on('QP: distribute queue', (queuePlayer, topItem, opts) => { + client.sendCommand({ + code: 'distribute queue', + queuePlayer: queuePlayer.id, + topItem: saveItemReference(topItem), + opts }) - } else { + }) + + backend.on('QP: done playing', queuePlayer => { client.sendCommand({ - code: 'stop playing', + code: 'status', + status: 'done playing', queuePlayer: queuePlayer.id }) - } - }) - - let n = 0 - backend.on('QP: queue', (queuePlayer, topItem, afterItem, opts) => { - client.sendCommand({ - code: 'queue', - queuePlayer: queuePlayer.id, - topItem: saveItemReference(topItem), - afterItem: saveItemReference(afterItem), - opts }) - }) - function handleSeek(queuePlayer) { - client.sendCommand({ - code: 'seek to', - queuePlayer: queuePlayer.id, - time: queuePlayer.time + backend.on('QP: playing', (queuePlayer, track) => { + if (track) { + client.sendCommand({ + code: 'play', + queuePlayer: queuePlayer.id, + track: saveItemReference(track) + }) + queuePlayer.once('received time data', data => { + client.sendCommand({ + code: 'status', + status: 'ready to resume', + queuePlayer: queuePlayer.id + }) + }) + } else { + client.sendCommand({ + code: 'stop playing', + queuePlayer: queuePlayer.id + }) + } }) - } - backend.on('QP: seek ahead', handleSeek) - backend.on('QP: seek back', handleSeek) - backend.on('QP: seek to', handleSeek) + backend.on('QP: queue', (queuePlayer, topItem, afterItem, opts) => { + client.sendCommand({ + code: 'queue', + queuePlayer: queuePlayer.id, + topItem: saveItemReference(topItem), + afterItem: saveItemReference(afterItem), + opts + }) + }) - backend.on('set party nickname', nickname => { - let oldNickname = client.nickname - sharedSources.name = namePartySources(nickname) - client.nickname = nickname - client.sendCommand({code: 'set nickname', nickname, oldNickname}) - }) + function handleSeek(queuePlayer) { + client.sendCommand({ + code: 'seek to', + queuePlayer: queuePlayer.id, + time: queuePlayer.time + }) + } - backend.on('QP: shuffle queue', queuePlayer => { - client.sendCommand({ - code: 'restore queue', - why: 'shuffle', - queuePlayer: queuePlayer.id, - tracks: queuePlayer.queueGrouplike.items.map(saveItemReference) - }) - }) + backend.on('QP: seek ahead', handleSeek) + backend.on('QP: seek back', handleSeek) + backend.on('QP: seek to', handleSeek) - backend.on('QP: toggle pause', queuePlayer => { - client.sendCommand({ - code: 'set pause', - queuePlayer: queuePlayer.id, - paused: queuePlayer.player.isPaused + backend.on('QP: shuffle queue', queuePlayer => { + client.sendCommand({ + code: 'restore queue', + why: 'shuffle', + queuePlayer: queuePlayer.id, + tracks: queuePlayer.queueGrouplike.items.map(saveItemReference) + }) }) - }) - backend.on('QP: unqueue', (queuePlayer, topItem) => { - client.sendCommand({ - code: 'unqueue', - queuePlayer: queuePlayer.id, - topItem: saveItemReference(topItem) + backend.on('QP: toggle pause', queuePlayer => { + client.sendCommand({ + code: 'set pause', + queuePlayer: queuePlayer.id, + paused: queuePlayer.player.isPaused + }) }) - }) - backend.on('announce join party', () => { - client.sendCommand({ - code: 'announce join' + backend.on('QP: unqueue', (queuePlayer, topItem) => { + client.sendCommand({ + code: 'unqueue', + queuePlayer: queuePlayer.id, + topItem: saveItemReference(topItem) + }) }) - }) - - backend.on('share with party', item => { - if (sharedSources.items.every(x => x[originalSymbol] !== item)) { - const serialized = serializePartySource(item) - const deserialized = deserializePartySource(serialized) - - deserialized[parentSymbol] = sharedSources - deserialized[originalSymbol] = item - - sharedSources.items.push(deserialized) - backend.sharedSourcesUpdated(client.socketId, sharedSources) - - updateRestoredTracksUsingPlaylists(backend, getPlaylistSources()) + backend.on('added queue player', (queuePlayer) => { client.sendCommand({ - code: 'share with party', - item: serialized + code: 'added queue player', + id: queuePlayer.id, }) - } - }) + }) + } } export function attachSocketServerToBackend(server, backend) { -- cgit 1.3.0-6-gf8a5