| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- const WebSocket = require('ws');
- const { generateAmplitudeCycle } = require('./generator');
- const { ThresholdManager } = require('./threshold');
- const Parse = require('parse/node');
- // Parse初始化
- Parse.initialize('dev', 'devmk'); // appId, masterKey
- Parse.serverURL = 'http://dev.fmode.cn:1337/parse';
- const wss = new WebSocket.Server({ port: 8080 });
- console.log('WebSocket server started on ws://localhost:8080');
- // 阈值管理器实例
- const thresholdManager = new ThresholdManager();
- function getStageByIndex(index, stageDurations) {
- let sum = 0;
- for (let i = 0; i < stageDurations.length; i++) {
- sum += stageDurations[i];
- if (index < sum) return i;
- }
- return stageDurations.length - 1;
- }
- wss.on('connection', (ws, req) => {
- const url = new URL(req.url, `http://${req.headers.host}`);
- const device = url.searchParams.get('device') || 'A';
- console.log('Client connected, device:', device);
- ws.send(JSON.stringify({ type: 'info', msg: 'Connected to amplitude server.', device }));
- let { cycle, stages, duration } = generateAmplitudeCycle();
- let index = 0;
- const timer = setInterval(() => {
- if (index >= cycle.length) {
- thresholdManager.addNormalCycle(cycle, stages);
- ({ cycle, stages, duration } = generateAmplitudeCycle());
- index = 0;
- }
- const value = cycle[index];
- const { isAbnormal, lower, upper } = thresholdManager.checkAbnormal(value, index, stages);
- const stage = getStageByIndex(index, stages);
- const data = {
- value,
- index,
- isAbnormal,
- lower,
- upper,
- stage,
- timestamp: Date.now()
- };
- console.log('index:', index, 'stage:', stage, 'lower:', lower, 'upper:', upper);
- ws.send(JSON.stringify(data));
- // 写入 Parse Server
- const AmplitudeData = Parse.Object.extend('AmplitudeData');
- const amplitudeData = new AmplitudeData();
- amplitudeData.set('value', value);
- amplitudeData.set('index', index);
- amplitudeData.set('isAbnormal', isAbnormal);
- amplitudeData.set('lower', lower);
- amplitudeData.set('upper', upper);
- amplitudeData.set('stage', stage);
- amplitudeData.set('timestamp', new Date());
- amplitudeData.save().catch(err => {
- console.error('Parse save error:', err.message);
- });
- index++;
- }, 1000);
- ws.on('close', () => {
- clearInterval(timer);
- console.log('Client disconnected');
- });
- });
|