Newer
Older
2024-Tsubasa / system / websocket_test / em-ws-web(intro) / client / websocket.js
// Node.js file
function init() {
    let connectionButton = document.getElementById("connection"),
        disconnectionButton = document.getElementById("disconnection"),
        websocketStateButton = document.getElementById("websocketState"),
        button = document.getElementById("send"),
        connectState = document.getElementById("connectState"),
        speedButton = document.getElementById("speedButton"),
        answerColumn = document.getElementById("answerColumn"),
        socket,
        button_clicker = [];

    button.addEventListener("click", decideNameAndTeam, false);
    let clientInfo = {
        // id: null,
        name: null,
        team: null
    }

    function decideNameAndTeam() {
        let name = document.getElementById("name").value;
        clientInfo.name = name;
        let team = document.getElementById("team").value;
        clientInfo.team = team;
        // button.disabled = true;
        // teamとnameを変えたいときは,socket.send(clientInfo)で送る、Ruby側で、if idがあれば、名前とチームを変える処理をする
    }

    function websocket() {
        console.log(clientInfo);
        console.log(JSON.stringify(clientInfo));

        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: ${clientInfo["team"]} の ${clientInfo["name"]} です!`)
                };

                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(receivedMsg);
                        if (receivedMsg == "reset") {
                            answerColumn.innerHTML = "";
                        }
                    }
                }

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

                socket.onerror = function (error) {
                    console.error("JS:WebSocket Error" + error)
                }
            }
        } catch (error) {
            console.error("エラーが発生しました!" + error);
        }
    }

    function socketClose() {
        if (socket.readyState == 1) {
            console.log(socket); //このときsocket.readyStateが1になっている
            socket.close();
            console.log(socket); //このときsocket.readyStateが2になる
        }
    }

    function socketState() {
        // console.log(socket.readyState); //websocket切断後にこの関数を実行するとsocket.readyStateが3になる
        switch (socket.readyState) {
            case 0:
                connectState.innerHTML = "CONNECTING";
                break;
            case 1:
                connectState.innerHTML = "OPEN";
                break;
            case 2:
                connectState.innerHTML = "CLOSING";
                break;
            case 3:
                connectState.innerHTML = "CLOSED";
                break;
        }
    }

    function sendAnswer() {
        socket.send(`JS: ${clientInfo["team"]} の ${clientInfo["name"]} がボタンを押しました!`)
        socket.send(JSON.stringify(clientInfo))
    }

    connectionButton.addEventListener("click", websocket, false);
    disconnectionButton.addEventListener("click", socketClose, false);
    websocketStateButton.addEventListener("click", socketState, false);
    speedButton.addEventListener("click", sendAnswer, false);
}

init()