ЙажаСценарий / Говнокод #27272 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 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);
                        }

Nodejs вход пользователя

Запостил: Seagate Seagate, (Updated )

Комментарии (16) RSS

  • >var
    дальше не читал

    перепишите на последнюю версию JS, пожалуйста. И чтобы import вместо require
    Ответить
    • И промисы вместо коллбеков
      И json вместо xml
      И async вместо промисов
      И замыкания вместо bind
      Ответить
      • >И промисы вместо коллбеков
        >И async вместо промисов

        да, лапша не нужна

        >json
        ну это может быть частью бизнес задачи
        >замыкания
        да
        есть же
        >?(err, result) => {
        Ответить
      • буткемп, есть веб приложение на фронте. Страница разделена на условные "ячейки".
        Должно по вебсокету держать связь с беком. Бек переодически посылает команды "в ячейке номер 3 нарисуй то-то".
        Некоторые компоненты "активные": при нажатии на них по вебсокету на бек посылается сообщение "пользовтаель нажал кнопку"

        Хочу тайпскрипт и удобную шаблонизацию.

        Что бы ты взял? React? Angular? Vue?
        Собирать буду webpackом
        Ответить
        • вроде как самое сложное это не отрисовать ячейки а организовать работу с вебсокетом

          для таких дел я люблю rxjs

          А чем рисовать похер если ячеек не тысячи. Бери с чем ты больше знаком, сейчас внятные интерфейсы на typescript есть везде

          В вопросе шаблонизации как мне кажется лидирует react но в его современный стиль работы (хуки, функции, ебанатские апи типа Suspense) въехать не очень просто

          Если ты фронтендщик или интересуешься то рекомендую react, если чисто наклепать то говорят vue проще чем angular, поэтому порекомендую vue
          Ответить
              • > Но по дефолту только чистый css

                заебешься цвета прокидывать же
                Ответить
                  • А их уже можно использовать везде? Я прост отстал от всеё темы.
                    Ответить
                      • мне это не так много говорит, просто какие-то вещи уже принято использовать, несмотря на то что в ие 6 их нет, какие-то нет, я скорее про общий адопшен коммьюнити. но когда я по необходимости забегал на caniuse, 95% в целом еще не считалось достаточным числом и обходились либо полифиллами, либо упрощенной версией для ие 6, либо отказом от фичи.
                        Ответить
                        • они не являются мейнстримом но проще препроцессоров и css in js так что я считаю их адекватными для задачи гостя

                          а адопшен комьюинити пусть в жопу идет, чистый css это очень компромиссная вещь, его поймут все и мигрировать с него легко
                          Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8