- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
var utils = require('util');
module.exports = class Client {
constructor(Socket) {
this.Socket = Socket;
this.TLSSocket = require('tls');
this.XmlParser = new require('xml2js').Parser();
this.XmlBuilder = require('xmlbuilder');
this.Client = this;
this.Authorized = false;
this.OnlineId = '1';
this.Socket.on('data', (Packet) => this.OnData(Packet));
this.Player = null;
this.Status = 0;
}
// Авторизация.
OnData(Packet) {
if (Packet[0] == 0xad || Packet[1] == 0xde || Packet[2] == 0xed || Packet[3] == 0xfe) {
var PacketBuffer = Buffer.alloc(Number(Packet.readBigInt64LE(4)));
Packet.copy(PacketBuffer, 0, 12);
var Query = PacketBuffer.toString();
console.log('[CLIENT] ',Query);
this.XmlParser.parseString(PacketBuffer.toString(), (err, result) => {
if (result)
{
if (result.starttls && !this.TLSSocket.Authorized && !this.Authorized) {
this.Send(this.XmlBuilder.create({
proceed: {
'@xmlns': 'urn:ietf:params:xml:ns:xmpp-tls'
}
}, {
headless: true
}).end({
pretty: false
}));
this.TLSSocket = new this.TLSSocket.TLSSocket(this.Socket, {
cert: global.Cert,
key: global.CertKey,
ca: global.CertBundle,
minVersion: 'TLSv1',
isServer: true
})
this.TLSSocket.once('secure', () => {
this.TLSSocket.Authorized = true;
console.log('TLS Connection established!');
});
this.TLSSocket.on('data', (Packet)=>this.OnData(Packet));
}
else if (result.iq && result.iq.bind) {
this.Send(this.XmlBuilder.create({
iq: {
'@id': result.iq.$.id,
'@type': 'result',
bind: {
'@xmlns': 'urn:ietf:params:xml:ns:xmpp-bind',
jid: this.OnlineId
}
}
}, {
headless: true
}).end({
pretty: false
}));
} else if (result.iq && result.iq.session) {
this.Send(this.XmlBuilder.create({
iq: {
'@id': result.iq.$.id,
'@type': 'result',
'@to': this.OnlineId,
session: {
'@xmlns': 'urn:ietf:params:xml:ns:xmpp-session'
}
}
}, {
headless: true
}).end({
pretty: false
}));
}
else if (result.iq && result.iq.query) {
var QueryName = Object.keys(result.iq.query[0]).filter(function (str) {
return str != '_' && str != '$'
})[0];
var QueryFunction = global.PacketFactory[QueryName];
if (QueryFunction) {
var Stanza = result.iq.query[0][QueryName][0];
console.log(`\x1b[32mQueryname: ${QueryName} ${utils.inspect(Stanza.$)}\x1b[0m`);
global.PacketFactory[QueryName].handle(this, Stanza, result.iq.$.to, result.iq.$.id);
}
MAKAKA 26.02.2021 01:16 # 0
дальше не читал
перепишите на последнюю версию JS, пожалуйста. И чтобы import вместо require
bootcamp_dropout 26.02.2021 01:51 # +1
И json вместо xml
И async вместо промисов
И замыкания вместо bind
guest6 26.02.2021 01:55 # +2
>И async вместо промисов
да, лапша не нужна
>json
ну это может быть частью бизнес задачи
>замыкания
да
есть же
>?(err, result) => {
guest6 26.02.2021 23:18 # 0
Должно по вебсокету держать связь с беком. Бек переодически посылает команды "в ячейке номер 3 нарисуй то-то".
Некоторые компоненты "активные": при нажатии на них по вебсокету на бек посылается сообщение "пользовтаель нажал кнопку"
Хочу тайпскрипт и удобную шаблонизацию.
Что бы ты взял? React? Angular? Vue?
Собирать буду webpackом
bootcamp_dropout 27.02.2021 00:05 # 0
для таких дел я люблю rxjs
А чем рисовать похер если ячеек не тысячи. Бери с чем ты больше знаком, сейчас внятные интерфейсы на typescript есть везде
В вопросе шаблонизации как мне кажется лидирует react но в его современный стиль работы (хуки, функции, ебанатские апи типа Suspense) въехать не очень просто
Если ты фронтендщик или интересуешься то рекомендую react, если чисто наклепать то говорят vue проще чем angular, поэтому порекомендую vue
MAKAKA 27.02.2021 00:10 # 0
MAKAKA 27.02.2021 00:24 # 0
bootcamp_dropout 27.02.2021 00:31 # 0
есть еще модный https://developers.google.com/web/updates/2019/02/constructable-stylesheets
Но по дефолту только чистый css, переиспользуемость стилей реализуется чисто компонентами а не селекторами дрочеными или препроцессорами
guest6 27.02.2021 00:39 # +1
я погуглил RxJS твой, а там написано, что черная жизнь имеет значение
https://rxjs-dev.firebaseapp.com/
bootcamp_dropout 27.02.2021 01:15 # 0
Fike 27.02.2021 03:54 # 0
заебешься цвета прокидывать же
bootcamp_dropout 27.02.2021 10:55 # 0
Fike 28.02.2021 15:10 # +1
bootcamp_dropout 28.02.2021 15:16 # 0
Fike 28.02.2021 15:21 # +1
bootcamp_dropout 28.02.2021 16:24 # 0
а адопшен комьюинити пусть в жопу идет, чистый css это очень компромиссная вещь, его поймут все и мигрировать с него легко