You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
2.2 KiB
109 lines
2.2 KiB
const EventEmitter = require("events");
|
|
const _ = require("underscore");
|
|
|
|
class MockDriver {
|
|
constructor() {
|
|
this.started = false;
|
|
this.events = new EventEmitter();
|
|
this.seconds = 0;
|
|
this.level = 1;
|
|
this.workoutState = {
|
|
minutes: 0,
|
|
seconds: 0,
|
|
speed: 0,
|
|
rpm: 0,
|
|
distance: 0,
|
|
calories: 0,
|
|
pulse: 0,
|
|
watt: 0,
|
|
level: 1,
|
|
};
|
|
|
|
this.interval = null;
|
|
}
|
|
|
|
connect() {
|
|
setTimeout(() => {
|
|
this.events.emit("maxLevel", 32);
|
|
})
|
|
|
|
return Promise.resolve();
|
|
}
|
|
|
|
start() {
|
|
if (this.started) {
|
|
return;
|
|
}
|
|
|
|
this.started = true;
|
|
this.interval = setInterval(() => {
|
|
this.seconds++;
|
|
|
|
this.workoutState.minutes = Math.floor(this.seconds / 60);
|
|
this.workoutState.seconds = this.seconds % 60;
|
|
this.workoutState.speed = Math.floor(300 + Math.random() * 200) / 10;
|
|
this.workoutState.rpm = Math.floor(57 + Math.random() * 5);
|
|
this.workoutState.distance += (this.seconds % 5 == 0) ? 0.1 : 0;
|
|
this.workoutState.calories += (this.seconds % 2 == 0) ? 1 : 0;
|
|
this.workoutState.pulse = null;
|
|
this.workoutState.watt = Math.floor(100 + Math.random() * 20);
|
|
this.workoutState.level = this.level;
|
|
|
|
this.events.emit("workoutState", {...this.workoutState});
|
|
}, 1000);
|
|
|
|
this.workoutState.level = 1;
|
|
this.workoutState.speed = 0;
|
|
this.workoutState.rpm = 0;
|
|
this.workoutState.watt = 0;
|
|
|
|
if (this.seconds === 0) {
|
|
this.events.emit("workoutState", {...this.workoutState});
|
|
}
|
|
|
|
return Promise.resolve();
|
|
}
|
|
|
|
setLevel(n) {
|
|
if (n < 0 || n > 32) {
|
|
return Promise.reject(new Error("Level is out of range (0..=32)"))
|
|
}
|
|
|
|
this.level = n;
|
|
|
|
return Promise.resolve();
|
|
}
|
|
|
|
pause() {
|
|
clearInterval(this.interval);
|
|
this.started = false;
|
|
|
|
return Promise.resolve();
|
|
}
|
|
|
|
stop() {
|
|
this.pause();
|
|
this.workoutState = {
|
|
minutes: 0,
|
|
seconds: 0,
|
|
speed: 0,
|
|
rpm: 0,
|
|
distance: 0,
|
|
calories: 0,
|
|
pulse: 0,
|
|
watt: 0,
|
|
level: 1,
|
|
};
|
|
this.seconds = 0;
|
|
|
|
return Promise.resolve();
|
|
}
|
|
|
|
destroy() {
|
|
this.stop();
|
|
this.events.emit("destroy");
|
|
this.events.removeAllListeners();
|
|
}
|
|
}
|
|
|
|
module.exports = MockDriver;
|