1. JavaScript / Говнокод #27272

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 25 Февраля 2021

    Комментарии (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? less? ssas?
              Ответить
              • css с css modules

                есть еще модный https://developers.google.com/web/updates/2019/02/constructable-stylesheets

                Но по дефолту только чистый css, переиспользуемость стилей реализуется чисто компонентами а не селекторами дрочеными или препроцессорами
                Ответить
                • спасибо

                  я погуглил RxJS твой, а там написано, что черная жизнь имеет значение
                  https://rxjs-dev.firebaseapp.com/
                  Ответить
                • > Но по дефолту только чистый css

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

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

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