Senbonzakuraa
@Senbonzakuraa
Начинаю начинать

Можно ли использовать паттерн или как лучше решить задачу?

Имеется socket.io server и класс Random

class Random {
    constructor(timer) {
        this.timer = timer
        this.status = 0
    }
    async setStatus() {
        const interval = setInterval(()=> {
            this.timer -= 1
            if(this.timer <= 0) {
                this.status = 1
            }
        }, 1000)
    }

}

Код Socket.io server

const Random = require('../Random').Random
const chanels = {}
const timers = [{timer: 20, name: "chanel1"},{timer: 400, "chanel2"}]
timers.map((timer,id) => chanels[timer.name] = new Random(timer.time))

socket.on('startTimer', async (name, callback) => {
    await chanels[name].setStatus()
})


Проблема:

Я хочу выполнять определенное событие на socket-сервере в том случае, если this.status = 1. Т.е мне нужно отслеживать смену this.status и оповещать об этом socket часть

Вопрос:

Каким образом это можно реализовать? Пытался сделать через setInterval на стороне сокета запрашивая каждую секундуthis.state, но на мой взгляд это крайне плохое решение. Наткнулся на паттерн observer, но возможна ли его реализация в моем случае?
  • Вопрос задан
  • 88 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Azperin
Дилетант
Мб чем поможет
function Timer(t, ch) {
	this.time = t;
	this.channel = ch;
	
	this.interval = setInterval(() => {
		if (--this.time < 1) {
			clearInterval(this.interval);
			// здесь можно делать ченить с сокетом, он же полюбому глобальный
			// либо сделать свои ивенты через эммитер
			socket.to(this.channel).emit('TIMEOUT - STATUS ZERO');
		};
	}, 1000);
	
	this.getTimeleft = () => this.time;
	
	socket.to(this.channel).emit(`TIMER STARTS, YOU HAVE - ${this.time} SECONDS TO DO SOMETHING`);
};

var timer = new Timer(10, 'chanel2');
var timer2 = new Timer(3, 'chanel5');
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
от 50 000 до 140 000 ₽
Яндекс Москва
от 100 000 до 300 000 ₽
Яндекс Санкт-Петербург
от 100 000 до 300 000 ₽
17 янв. 2021, в 08:35
50000 руб./за проект
17 янв. 2021, в 01:26
100000 руб./за проект
16 янв. 2021, в 22:34
10000 руб./за проект