From 509e8fb6094c090d255b39c2d5965219c52284ff Mon Sep 17 00:00:00 2001 From: JotaChina Date: Tue, 4 Nov 2025 16:33:21 -0300 Subject: [PATCH] Sockets funcionais --- assets/js/creations/config.js | 4 +- assets/js/creations/file.js | 51 +++++++++++- .../data/2025-10-28_19-15-37_sessao-c1rvu.log | 1 + .../data/2025-10-28_19-31-13_sessao-c1rvu.log | 1 + .../data/2025-10-28_19-33-02_sessao-c1rvu.log | 79 +++++++++++++++++++ .../data/2025-10-28_21-56-50_sessao-0xi97.log | 1 + .../server/data/2025-11-04_16-14-11_teste.log | 1 + .../server/data/2025-11-04_16-17-37_teste.log | 68 ++++++++++++++++ .../creations/server/data/sessao-c1rvu.json | 1 + assets/js/creations/server/data/teste.json | 2 +- assets/js/creations/server/server.js | 50 ++++++++---- assets/js/creations/socket.js | 5 +- 12 files changed, 242 insertions(+), 22 deletions(-) create mode 100644 assets/js/creations/server/data/2025-10-28_19-15-37_sessao-c1rvu.log create mode 100644 assets/js/creations/server/data/2025-10-28_19-31-13_sessao-c1rvu.log create mode 100644 assets/js/creations/server/data/2025-10-28_19-33-02_sessao-c1rvu.log create mode 100644 assets/js/creations/server/data/2025-11-04_16-14-11_teste.log create mode 100644 assets/js/creations/server/data/2025-11-04_16-17-37_teste.log create mode 100644 assets/js/creations/server/data/sessao-c1rvu.json diff --git a/assets/js/creations/config.js b/assets/js/creations/config.js index b7a5a2c4..05d4d5fd 100644 --- a/assets/js/creations/config.js +++ b/assets/js/creations/config.js @@ -13,4 +13,6 @@ export const PIXELS_PER_STEP = 32; // Cada step (1/16) terá 32px de largura export const PIXELS_PER_BAR = 512; // 16 steps * 32px/step = 512px por compasso (bar) // Níveis de zoom pré-definidos (fator de multiplicação) -export const ZOOM_LEVELS = [0.25, 0.5, 1.0, 2.0, 4.0, 8.0]; \ No newline at end of file +export const ZOOM_LEVELS = [0.25, 0.5, 1.0, 2.0, 4.0, 8.0]; + +export const PORT_SOCK = 33001; \ No newline at end of file diff --git a/assets/js/creations/file.js b/assets/js/creations/file.js index 79acc0be..1c2ded85 100644 --- a/assets/js/creations/file.js +++ b/assets/js/creations/file.js @@ -61,7 +61,6 @@ export async function loadProjectFromServer(fileName) { } } -// --- NENHUMA MUDANÇA DAQUI PARA BAIXO --- // 'parseMmpContent' agora é chamado pelo 'socket.js' // quando ele recebe a ação 'LOAD_PROJECT' ou 'load_project_state'. @@ -244,6 +243,56 @@ export function generateMmpFile() { } } +// Função auxiliar (pode ser movida para cá) que gera o XML a partir do appState +// Copiada de generateMmpFile/modifyAndSaveExistingMmp +function generateXmlFromState() { + if (!appState.global.originalXmlDoc) { + // Se não houver XML original, precisamos gerar um novo + // Por simplicidade, para este fix, vamos retornar o estado atual do LMMS + // mas o ideal seria gerar o XML completo (como generateNewMmp) + console.warn("Não há XML original para modificar. Usando a base atual do appState."); + // No seu caso, use o conteúdo de generateNewMmp() + return ""; + } + + const xmlDoc = appState.global.originalXmlDoc.cloneNode(true); + const head = xmlDoc.querySelector("head"); + if (head) { + head.setAttribute("bpm", document.getElementById("bpm-input").value); + head.setAttribute("num_bars", document.getElementById("bars-input").value); + head.setAttribute("timesig_numerator", document.getElementById("compasso-a-input").value); + head.setAttribute("timesig_denominator", document.getElementById("compasso-b-input").value); + } + const bbTrackContainer = xmlDoc.querySelector('track[type="1"] > bbtrack > trackcontainer'); + if (bbTrackContainer) { + bbTrackContainer.querySelectorAll('track[type="0"]').forEach(node => node.remove()); + const tracksXml = appState.pattern.tracks.map((track) => createTrackXml(track)).join(""); + const tempDoc = new DOMParser().parseFromString(`${tracksXml}`, "application/xml"); + Array.from(tempDoc.documentElement.children).forEach((newTrackNode) => { + bbTrackContainer.appendChild(newTrackNode); + }); + } + const serializer = new XMLSerializer(); + return serializer.serializeToString(xmlDoc); +} + +/** + * Envia o estado ATUAL do projeto (XML dos padrões) para o servidor + * para que ele persista a "cópia temporária" em disco/memória. + * Deve ser chamado APÓS alterações significativas no padrão (steps, tracks). + */ +export function syncPatternStateToServer() { + if (!window.ROOM_NAME) return; // Não faz nada se não estiver em sala + + const currentXml = generateXmlFromState(); + + // NOTA: Usamos um novo tipo de ação para não confundir com o carregamento de arquivo + sendAction({ + type: 'SYNC_PATTERN_STATE', + xml: currentXml + }); +} + function createTrackXml(track) { if (track.patterns.length === 0) return ""; const ticksPerStep = 12; diff --git a/assets/js/creations/server/data/2025-10-28_19-15-37_sessao-c1rvu.log b/assets/js/creations/server/data/2025-10-28_19-15-37_sessao-c1rvu.log new file mode 100644 index 00000000..b5e0752c --- /dev/null +++ b/assets/js/creations/server/data/2025-10-28_19-15-37_sessao-c1rvu.log @@ -0,0 +1 @@ +{"level":30,"time":1761689737230,"pid":3589288,"hostname":"ubuntu","timestamp":1761689737230,"socketId":"ASQB1EQ3W-aOnI6vAAAD","action":{"type":"AUDIO_SNAPSHOT_REQUEST","__token":"1","__senderId":"ASQB1EQ3W-aOnI6vAAAD","__senderName":"Alicer-ASQB"},"msg":"action_received"} diff --git a/assets/js/creations/server/data/2025-10-28_19-31-13_sessao-c1rvu.log b/assets/js/creations/server/data/2025-10-28_19-31-13_sessao-c1rvu.log new file mode 100644 index 00000000..8c0ea74f --- /dev/null +++ b/assets/js/creations/server/data/2025-10-28_19-31-13_sessao-c1rvu.log @@ -0,0 +1 @@ +{"level":30,"time":1761690673639,"pid":3605182,"hostname":"ubuntu","timestamp":1761690673638,"socketId":"pCS58062xW8Axkl9AAAB","action":{"type":"AUDIO_SNAPSHOT_REQUEST","__token":"1","__senderId":"pCS58062xW8Axkl9AAAB","__senderName":"Alicer-pCS5"},"msg":"action_received"} diff --git a/assets/js/creations/server/data/2025-10-28_19-33-02_sessao-c1rvu.log b/assets/js/creations/server/data/2025-10-28_19-33-02_sessao-c1rvu.log new file mode 100644 index 00000000..aadab30f --- /dev/null +++ b/assets/js/creations/server/data/2025-10-28_19-33-02_sessao-c1rvu.log @@ -0,0 +1,79 @@ +{"level":30,"time":1761690782099,"pid":3607355,"hostname":"ubuntu","timestamp":1761690782098,"socketId":"eA1jxtYqLYZ-G1SgAAAB","action":{"type":"LOAD_PROJECT","xml":"\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Volume\" len=\"9216\" mute=\"0\">\n