const sha256 = require('js-sha256').sha256;
export default class Rocket {
constructor(socketUrl, login, password) {
// Задаем начальные параметры
this.socketUrl = socketUrl
this.connected = false
this.socket = false
this.response = false
this.login = login
this.password = password
// Создаем сокет для общения с сервером
this.createSocket()
this.socket.onopen = () => {
// Событие соеденения с сервером
this.socketOnOpen()
}
this.socket.onmessage = e => {
// Событие отправки сообщения на сервер
this.socketOnMessage(e)
}
}
socketOnOpen() {
// Соеденяемся и логинимся на сервере
this.connect()
this.loginig(this.login, this.password)
}
socketOnMessage(e) {
this.setLastMsg(e)
console.log(this.response.msg)
// Чтобы сервер не разорвал соеденение переодически отправляем ему pong
this.pong()
}
createSocket() {
this.socket = new WebSocket(this.socketUrl)
}
connect() {
let notConnect = !this.connected;
if(notConnect) {
this.send(
{
"msg": "connect",
"version": "1",
"support": ["1"]
}
)
} else {
console.log("Соеденение уже установлено")
}
}
loginig(login, password) {
// Авторизация
this.send(
{
"msg": "method",
"method": "login",
"id": "1",
"params":[
{
"user": { "username": login },
"password": {
"digest": this.hesh(password),
"algorithm":"sha-256"
}
}
]
}
)
}
loadHistory(roomId) {
// Загружаем исторю комнаты
this.send(
{
"msg": "method",
"method": "loadHistory",
"id": "loadHistory",
"params": [ roomId, null, 50, { "$date": 1480377601 } ]
}
)
}
getMsgId(msg=false) {
if(msg) {
return msg.response.id
}
return this.response.id
}
setLastMsg(event) {
this.response = JSON.parse(event.data)
}
send(msg) {
// Отправка сообщения
this.socket.send(JSON.stringify(msg))
}
pong() {
// На ping отвечаем pong
if(this.response.msg == "ping") {
this.send({
"msg": "pong"
})
}
}
hesh(str) {
// Кодирует строку в формат sha256
return sha256(str)
}
}