Есть код:
в server.js
const http = require('http').Server(express);
const io = require('socket.io')(http);
function readSegmentFromFile(pos) { // pos - позиция слайдера
// ********** Чтение сегмента из двоичного файла *********
segmentSize = segmentMap[pos]; // Размер сегмента, который считывается в данный момент
var startPos = getStartPos();
var SegmentBuf = Buffer.alloc(segmentSize);
var data = null;
fs.open(pathRead, 'r', function (error, fd) {
if (error) {
console.error('Error write: ' + error.message);
return 0;
}
fs.read(fd, SegmentBuf, 0, segmentSize, startPos, function (err) {
if (err) {
console.error('Error write: ' + err.message);
}
setSliderPosition(sliderPos);
var segmentHeader = new Parser()
.doublebe('timestamp')
.uint32('size')
.uint8('type')
.string('bytes', {
length: function () {
return this.size - 13; // Вычисляем размер бинарной строки
}
});
//data = segmentHeader.parse( zlib.inflate(SegmentBuf));
data = segmentHeader.parse(SegmentBuf);
//sendDataFromSegmentToFile(zlib.inflate(JSON.parse(data.bytes)));
sendDataFromSegmentToFile(JSON.parse(data.bytes));
fs.close(fd, function (error) {
if (error) {
console.error("Error: " + error.message);
}
});
});
});
}
function setPlayButton(param) {
UIcommand.element = 'UIplay';
UIcommand.action = param;
console.log("стоп "+UIcommand.element+" "+UIcommand.action);
io.emit('UI_stop', UIcommand);
}
function sendDataFromSegmentToFile(obj) {// вызывается из readSegmentFromFile
if(VelocityProphet!=undefined){
//console.log('VelocityProphet');
io.emit('VelocityProphet', VelocityProphet);
}
if(smoothedProfile!=undefined){
//console.log('smoothedProfile');
io.emit('smoothedProfile', smoothedProfile);
}
//.....(if(...) еще десяток
}
setInterval(function () {
if ((mode == 'file') && (replayState) && (segmentMapIsReady) && (!replayPause)) {
readSegmentFromFile(sliderPos); // функция readSegmentFromFile() вернет время записи сегмента
setSliderPosition(sliderPos);
console.log(sliderPos);
sliderPos++;
if (sliderPos == numberOfSegments) {
sliderPos = 0;
setPlayButton('stop');
}
}
}, 10);//1000
в browser.js
function InitSocketIO(){
socketio = io.connect('http://localhost:3000', {reconnect: true}); // Создаем соединение с сервером http://localhost:3000
socketio.on('UI_stop', function (msg) {
console.log("UI: "+msg.element);
switch (msg.element) {
case 'UIplay':
var $playbutton = $('#playbutton');
console.log("UIplay playbutton");
if (msg.action == 'stop') {
console.log("UIplay Остановка чтения");
$playbutton.click();
}
break;
//...
default:
break;
}
});
socketio.on('VelocityProphet', function (msg) {
//Код
});
socketio.on('smoothedProfile', function (msg) {
// Код
});
программа считывает данные из файла по сегментам. функция sendDataFromSegmentToFile вызывается больше 2000 раз, и socketio.on('VelocityProphet'..., socketio.on('smoothedProfile'... и т. п. отрабатывают штатно.
функция setPlayButton должна вызываеться один раз когда все сегменты считались. и остановить считывание. Но io.emit('UI_stop', UIcommand); и socketio.on('UI_stop', function (msg) не срабатывают соответственно считывание начинается с начала.
при этом если проследить очередность вызова всех io.emit то на последнем шаге io.emit('UI_stop' вызывается раньше чем io.emit('VelocityProphet' и им подобные, хотя по коду должно быть наоборот.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Javascript код веб сайта находятся в директории pulbic, должен ли я минифицировать свой код для готовой версии сайта ?