SuperZen, радость была преждевременной)))))))))))))))
Дабы исключить ошибку соединения сокета, я перед созданием экземпляра, пульнул ajax на сервер, и если он мне вернул код 200 то все ок, создаем и вешаем слушатели open и close. по событию close просто снова вызываем connection. Вот код:
'use strict';
window.SocketModule = (function(window) {
class SocketModule {
constructor(options) {
this.socket;
this.path = options.path;
this.connection();
this.reconnectCount = 60;
}
connection() {
const _t = this;
this.checkServer(function(server) {
if (!server) return;
_t.socket = new WebSocket(_t.path);
_t.socket.addEventListener('open', function() {
_t.indicatorControl(true);
});
_t.socket.addEventListener('close', function() {
_t.indicatorControl(false);
_t.connection();
});
});
return this;
}
checkServer(callback) {
let timer;
const _t = this;
let count = 0;
timer = setInterval(function() {
const req = new XMLHttpRequest();
req.open('GET', '/api/connect', true);
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
req.send(null);
req.addEventListener('load', function() {
if (req.status === 200) {
clearInterval(timer);
callback(true);
}
});
count++;
if (count === _t.reconnectCount) {
clearInterval(timer);
console.log('Превышен лимит ожидания!');
}
}, 200);
return this;
}
sendMessage(event_name, data) {
if (event_name.constructor.name === 'String') {
const _t = this;
// this.readyStateConnection(function() {
_t.socket.send(JSON.stringify({event_name, data}));
// });
} else return;
return this;
}
readyStateConnection(callback) {
let timer;
clearTimeout(timer);
if (this.socket.readyState === 1) {
callback();
} else {
const _t = this;
timer = setTimeout(function() {
_t.readyStateConnection(callback);
}, 0);
}
}
};
return SocketModule;
})(window);
НО!!!!!!!!!!!!!!!!!!!!!!!!!))))))))))))))))))))) )
Когда я вызываю метод sendMessage в другом классе:
'use strict';
window.Chat = (function(window) {
const options = window.options;
const socketModule = window.SocketModule;
const ServiceModule = window.ServiceModule;
const MessageModule = window.MessageModule;
class Chat {
constructor() {
this.transport = new socketModule({
path: options.socketPath
});
}
init() {
this.transport.sendMessage('chat_message', {
type: 'text',
text: 'Lorem ipsum dolor sit amet, megatron7000'
});
}
}
return Chat;
})(window);
Эта шайтан машина))) выдает мне - annot read property 'send' of undefined! В методе readyStateConnection this.socket = undefined!!!! если вывести в консоль this, то он есть, а если this.socket его нет.