Quiz

Форк
0
/
queue_functions.js 
153 строки · 5.6 Кб
1
function start_count() {
2
    $('.lobby_countdown_block').css('display', 'block');
3
    $('#min').html('0' + min);
4
    $('#sec').html('0' + sec);
5
    interval = window.setInterval(() => {
6
        if(sec == 59) {
7
            sec = 0;
8
            min++;
9
            if(min < 10) {
10
                $('#min').html('0' + min);
11
            } else {
12
                $('#min').html(min);
13
            }
14
        } else {
15
            sec++;
16
        }
17
        if(sec < 10) {
18
            $('#sec').html('0' + sec);
19
        } else {
20
            $('#sec').html(sec);
21
        }
22
    }, 1000);
23
}
24

25
// функция создания сокета очереди
26
function create_queue_socket(queue_id) {
27
    // запуск сокета
28
    queueSocket = new WebSocket (
29
        'ws://' + window.location.host + '/ws/queue/' + queue_id
30
    );
31

32
    // метод при открытии сокета (пусто)
33
    queueSocket.onopen = (e) => {
34
        console.log('open')
35
        console.log(e)
36
    }
37

38
    // метод при получении сообщения
39
    queueSocket.onmessage = (e) => {
40
        // получение объекта сообщения и действия из него
41
        const data = JSON.parse(e.data)['message'];
42
        let action = data['action'];
43

44
        // запрос на подтверждение - создание кнопки и установление таймайта на её исчезновение
45
        if(action == 'accept_request') {
46
            $('body').append('<div class="lobby_accept_request_bg"><div class="lobby_accept_request_button"><span>Подтвердить</span></div></div>');
47
            window.setTimeout(() => {
48
                $('.lobby_accept_request_bg').remove();
49
                accept_count = 0;
50
                themes = [];
51
                if(accepted == false) {
52
                    cancel_queue(true);
53
                } else {
54
                    accepted = false;
55
                }
56
            }, 10000);
57
        // подсчёт подтверждений, если это последний пользователь, присоединившийся к очереди
58
        } else if(action == 'accept_count' && is_last_player) {
59
            accept_count++;
60
            if(Object.keys(data).includes('theme')) {
61
                themes.push(data['theme']);
62
            }
63
            // если получено необходимое количество подтверждений, запуск действий на серверной части,
64
            // необходимых для запуска игры
65
            if(accept_count == max_players) {
66
                $.ajax({
67
                    method: "get",
68
                    url: "/games/create_game/",
69
                    data: {themes: JSON.stringify(themes)},
70
                    success: (data) => {
71
                        // отправка пользователям в очереди ссылки для перехода в игру
72
                        queueSocket.send(
73
                            JSON.stringify({'message': {'action': 'create_game', 'url': data.url}})
74
                        )
75
                    },
76
                    error: (data) => {
77
                    }
78
                });
79
            };
80
        // переход в игру по ссылке
81
        } else if(action == 'create_game') {
82
            window.location.href = data['url'];
83
        };
84
    };
85

86
    // метод при закрытии сокета (пусто)
87
    queueSocket.onclose = (e) => {
88
        console.log('close')
89
        console.log(e);
90
    }
91

92
    // метод при ошибке у сокета (пусто)
93
    queueSocket.onerror = (e) => {
94
        console.log('error')
95
        console.log(e)
96
    }
97
};
98

99
// функция проверки сокета и отправки запросов на подтверждение игры пользователям от последнего игрока в очереди
100
function connection_check() {
101
    // если сокет подключён и готов к работе, отправка запросов
102
    if(queueSocket.readyState === 1) {
103
        queueSocket.send(
104
            JSON.stringify({'message': {'action': 'accept_request'}})
105
        )
106
    // если нет, пробуем снова через 0.5 секунды
107
    } else {
108
        window.setTimeout(connection_check, 500);
109
    }
110
};
111

112
// функция выхода из очереди
113
function cancel_queue(is_canceler) {
114
    // необходимые изменения интерфейса
115
    $('.lobby_cancel_queue_button').html('Начать игру');
116
    $('.lobby_cancel_queue_button').addClass('lobby_start_game_button');
117
    $('.lobby_cancel_queue_button').removeClass('lobby_cancel_queue_button');
118

119
    // очистка отсчёта
120
    window.clearInterval(interval);
121
    sec = 0;
122
    min = 0;
123
    $('.lobby_countdown_block').css('display', '');
124
    $('#sec').html('');
125
    $('#min').html('');
126

127
    // закрытие сокета очереди и запуск соответствующих действий на серверной части
128
    queueSocket.close();
129
    if(is_canceler) {
130
        $.ajax({
131
        method: "get",
132
        url: "/games/cancel_queue/",
133
        data: {},
134
        success: (data) => {
135
        },
136
        error: (data) => {
137
        }
138
    });
139
    }
140
}
141

142
// функция выхода из лобби (запуск соответствующих действий на серверной части)
143
function quit_lobby() {
144
    $.ajax({
145
        method: "get",
146
        url: "/games/quit_lobby/",
147
        data: {},
148
        success: (data) => {
149
        },
150
        error: (data) => {
151
        }
152
    });
153
}
154

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.