Newer
Older
2024-Tsubasa / system / websocket_test / em-ws-web(intro) / server / server.js
function init() {
    let songName = document.getElementById("songName"),
        audio = document.getElementById("audio"),
        previousSong = document.getElementById("previousSong"),
        nextSong = document.getElementById("nextSong"),
        speedButtonReset = document.getElementById("speedButtonReset"),
        answerColumn = document.getElementById("answerColumn"),
        counter = 1;

    console.log(audio);
    console.log(previousSong);
    console.log(nextSong);

    fetch("../mp3/mp3_path.csv")
        .then((response) => {
            return response.text();
        })
        .then((data) => {
            let result = data.split(/\r?\n|\r/).map((e) => {
                return e.split(",");
            });
            console.log(result);
            console.log(`このCSVには ${result.length - 1}曲 登録されています。`);
            songName.innerHTML = result[1][0];

            nextSong.addEventListener("click", next, false);
            previousSong.addEventListener("click", previous, false);

            function previous() {
                counter -= 1;
                if (counter == 0) {
                    counter = result.length - 1;
                }
                songName.innerHTML = result[counter][0];
                audio.src = result[counter][1];

                socket.send("reset");
                answerColumn.innerHTML = "";
            }

            function next() {
                counter += 1;
                if (counter == result.length) {
                    counter = 1;
                }
                songName.innerHTML = result[counter][0];
                audio.src = result[counter][1];

                socket.send("reset");
                answerColumn.innerHTML = "";
            }

        })
        .catch((error) => {
            console.log(error);
        });

    let socket;
    function websocket() {
        try {
            if (!socket || socket.readyState !== 1) { //!socketは最初の接続のときに真になる、socket.readyStateは接続後に真になる

                socket = new WebSocket('wss://www.koeki-prj.org/quiz2024');
                // socket = new WebSocket('ws://localhost:8293');
                socket.onopen = function (event) {
                    console.log("JS:接続されました!");
                    socket.send("JS:Hostです!")
                };

                socket.onmessage = function (event) {
                    let receivedMsg = event.data;
                    try {
                        button_clicker = JSON.parse(receivedMsg);
                        console.log(button_clicker);
                        answerColumn.innerHTML = "" //表示場所のリセット
                        for(let i = 0; i < button_clicker.length; i++) {
                            console.log(button_clicker[i][1]);
                            answerColumn.innerHTML += `${i + 1}: ${button_clicker[i][0]} の ${button_clicker[i][1]} です!<br>`
                        }
                    } catch (error) {
                        console.log(event.data);
                        if (event.data.match(/pushed button/)) {
                            console.log(event.data);
                            audio.pause();
                        }
                    }
                }

                socket.onclose = function (event) {
                    if (event.wasClean) {
                        console.log("JS:切断しました!")
                    } else {
                        console.error("JS:切断エラーが起きました!");
                    }
                }

                socket.onerror = function (error) {
                    console.error("JS:WebSocket Error" + error)
                }

                speedButtonReset.addEventListener("click", reset, false);

                function reset() {
                    socket.send("reset");
                    answerColumn.innerHTML = "";
                }
            }
        } catch (error) {
            console.error("エラーが発生しました!" + error);
        }
    }

    document.addEventListener("DOMContentLoaded", websocket, false);
}

init()