物联网邮箱模拟器
等级: 初级
物联网邮箱模拟器的目标是模仿一个物联网(IoT)启用的物理邮箱如何通知你“蜗牛”邮件已到达。通过这样做,它将为你提供使用回调在应用程序的不同组件之间通信状态的经验,这些组件相互依赖。
要求与约束
-
尽管这个应用程序是使用Javascript概念和术语指定的,但你可以选择使用你自己的语言来实现它。
-
提供以下Javascript类来启动和停止监控过程,并以预设的间隔向应用程序网页发送邮箱门的状态信号(打开或关闭)。请记住,你指定的间隔不应该超过打开或关闭门所需的时间,否则你可能会错过一个递送!
/**
* 监控物联网启用蜗牛邮箱内的光线水平,以检测邮箱门何时被打开和关闭。
* @class IOTMailbox
*/
class IOTMailbox {
/**
* 创建一个IOTMailbox实例。
* @param {number} [signalInterval=500] 检查邮箱状态的计时器间隔。
* @param {function} signalCallback 函数,当计时器间隔到期时将被调用。
* @memberof IOTMailbox
*/
constructor(signalInterval = 500, signalCallback) {
this.signalInterval = signalInterval;
this.signalCallback = signalCallback;
this.intervalID = null;
this.lastLightLevel = 0;
}
/**
* 开始监控邮箱并调用调用者指定的回调函数,该函数在间隔到期时被调用。
* @memberof IOTMailbox
*/
startMonitoring = () => {
console.log(`开始监控邮箱...`);
this.intervalID = window.setInterval(this.signalStateChange, this.signalInterval);
}
/**
* 停止监控邮箱状态
* @memberof IOTMailbox
*/
stopMonitoring = () => {
if (this.intervalID === null) return;
window.clearInterval(this.intervalID);
this.intervalID = null;
console.log(`邮箱监控已停止...`);
}
/**
* 将邮箱内的当前光线水平传递给用户的回调函数。正的光线水平表示门是打开的,而负水平表示它是关闭的。根据采样间隔,邮箱门可能处于从完全关闭到完全打开的任何位置。这意味着光线水平在间隔到间隔之间变化。
* @memberof IOTMailbox
*/
signalStateChange = () => {
const lightLevel = this.lastLightLevel >= 0
? Math.random().toFixed(2) * -1
: Math.random().toFixed(2);
console.log(`邮箱状态已更改 - 光线水平: ${lightLevel}`);
this.signalCallback(this.lightLevel);
this.lastLightLevel = lightLevel;
}
};
用户故事
- [ ] 用户可以看到一个包含三个按钮的控制面板,分别是“开始监控”、“停止监控”和“重置”。
- [ ] 用户可以看到一个通知面板,其中将发布邮箱状态。
- [ ] 用户可以看到一个可滚动的日志面板,在这里将发布描述应用程序操作和与IOTMailbox实例交互的执行详细信息。
- [ ] 用户可以点击“开始监控”按钮开始从邮箱接收状态通知。
- [ ] 用户可以在日志面板中看到一条消息,当监控开始时添加。
- [ ] 用户可以在日志面板中看到一条消息,当通过回调函数传递光线水平时添加。这应该包括数字光线水平和门是打开还是关闭。
- [ ] 用户可以在通知面板中看到一条消息,当门被打开时添加。
- [ ] 用户可以点击“停止监控”按钮停止从邮箱接收状态通知。
- [ ] 用户可以在日志面板中看到一条消息,当监控停止时添加。
额外功能
- [ ] 用户可以看到“开始监控”按钮在监控停止前是禁用的。
- [ ] 用户可以看到“停止监控”按钮在监控开始前是禁用的。
- [ ] 用户可以在控制面板中看到一个字段,允许指定监控间隔的长度。
- [ ] 用户可以在通知面板中看到一条消息,如果门保持打开。
- [ ] 用户可以在门打开时听到声音警报。
有用的链接和资源
示例项目
不适用