@php_raper

Двойной запрос AXIOS на soket.io, как это возможно?

Голову сломал не пойму куда уже смотреть. Есть проект, крутиться на laravel + vue.js + soket.io. На сокете крутиться игра, длительное время все работает стабильно... В нормальном режиме посылается запрос через библиотеку AXIOS, LARAVEL формирует запись с игрой в БД отдает ее и сокет прокручивает игру.

И в хаотичном режиме происходит следующие, при старте игры сервер на сокетах черех axios дублирует запрос одномоментно

Вот что в логах nginx
127.0.0.1 - - [03/Aug/2021:14:41:33 +0000] "POST /api/bot/getGame HTTP/1.1" 200 1172 "-" "axios/0.21.1"
127.0.0.1 - - [03/Aug/2021:14:41:33 +0000] "POST /api/bot/getGame HTTP/1.1" 200 1172 "-" "axios/0.21.1"

вот часть кода
const startGame = () => {
    let float = MULTIPLIER;
    let _now_old = -1;

    _i = 0,
        _now = 0,
        translateA = 1,
        translateB = 0,
        a = 0,
        b = 0,
        c = 0;

    io.sockets.emit('stopTimer', 1);

    const START_GAME_INTERVAL = setInterval(async () => {
        _i++;
        _now = parseFloat(Math.pow(Math.E, 0.00006 * _i * 1000 / 20));

        if (_now_old.toFixed(2).toString() !== _now.toFixed(2).toString()) {
            _now_old = _now;

            if (parseFloat(_now.toFixed(2)) >= float) {

                //check autoWithdraw and take
                for (const [key, value] of Object.entries(AUTO_WITHDRAWS)) {
                    if (parseFloat(key).toFixed(2) == parseFloat(_now.toFixed(2))) {
                        console.log(_now.toFixed(2));
                        console.log(float.toFixed(2));
                        console.log(parseFloat(key).toFixed(2));

                        if (typeof AUTO_WITHDRAWS[key] !== "undefined") {
                            await withdrawAuto(key, AUTO_WITHDRAWS[key]);
                        }
                    }
                }

                clearInterval(START_GAME_INTERVAL);
                io.sockets.emit('crashCrashed', MULTIPLIER);
                await crashBets();
            } else {
                for (const [key, value] of Object.entries(AUTO_WITHDRAWS)) {
                    if (key <= parseFloat(_now.toFixed(2))) {
                        if (typeof AUTO_WITHDRAWS[key] !== "undefined") {
                            withdrawAuto(key, AUTO_WITHDRAWS[key]);
                        }
                    }
                }

                // if (translateA < 174.188) {
                //     translateA += 0.57396;
                // }

                // if (translateB < 174.188) {
                //     translateB += 0.58062666666;
                // }

                if (translateA < 142.188) {
                    translateA += 0.47396;
                }

                if (translateB < 140.188) {
                    translateB += 0.48062666666;
                }

                if (a < 55.016) {
                    a += 0.18438666666;
                }

                if (b < 128.370666667) {
                    b += 0.43790222222;
                }

                if (c < 181.393333333) {
                    c += 0.61464444444;
                }

                if (parseFloat(_now.toFixed(2)) > parseFloat(parseFloat(multipliers[3]).toFixed(2))) {
                    multipliers.shift();
                    multipliers.push(parseFloat(_now.toFixed(0)) + 3);
                }

                io.sockets.emit('crashMultiplier', {
                    multiplier: _now,
                    translateA,
                    translateB,
                    a,
                    b,
                    c,
                    multipliers
                });
            }
        }
    }, 50)
};

const getGame = () => {
    return axios.post('getGame', {
            secretKey: SECRET_KEY
        })
        .then(res => {
            game = res.data.game;
            bets = res.data.bets;

            console.log(res);

            io.sockets.emit('clearBets', res.data.history);

            if (game.hash) {
                io.sockets.emit('setHash', game.hash);
            }


            WITHDRAWS_MULTIPLIER = [];
            AUTO_WITHDRAWS = [];
            USER_WITHDRAWS = [];

            multipliers = [1.00, 2.00, 3.00, 4.00];

            if (game.status === 0) {
                startTimer();
            }

            if (game.status === 1) {
                startGame();
            }
        })
        .catch(err => {
            console.log(err);
            setTimeout(async () => {
                await getGame();
            }, 3000);
        });
};

const setStatus = (status) => {
    axios.post('setStatus', {
            secretKey: SECRET_KEY,
            status: status
        })
        .then(res => {
            if (status === 1) {
                MULTIPLIER = res.data;
            }
        })
        .catch(err => {
            console.log(err);
        });
};

const crashBets = () => {
    return axios.post('crashBets', {
            secretKey: SECRET_KEY
        })
        .then(res => {
            setStatus(2);
            bets = res.data;
            io.sockets.emit('newBetsCrash', res.data);

            setTimeout(async () => {
                _i = 0, _now = 0;
                await getGame();
            }, 3000);
        })
        .catch(err => {
            console.log(err);
        });
};

const withdrawAuto = (multiplier, members) => {
    if (typeof WITHDRAWS_MULTIPLIER[multiplier] === "undefined") {
        WITHDRAWS_MULTIPLIER[multiplier] = 1;

        //console.log(USER_WITHDRAWS);

        return axios.post('autoTake', {
                secretKey: SECRET_KEY,
                members: members,
                multiplier: multiplier,
                autoWithdraws: USER_WITHDRAWS
            })
            .then(res => {
                const result = res.data;

                bets = result.bets;
                io.sockets.emit('newBets', bets);

                result.members.forEach(member => {
                    io.sockets.emit('successTake', {
                        win: member.win,
                        item: member.item,
                        newBalance: member.newBalance,
                        user_id: member.user_id
                    });
                });
            })
    }
};
  • Вопрос задан
  • 96 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы