Структура PROTOCOL_LOGIN_ACK - Страница 2 - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > MMO > Point Blank (Piercing Blow)

Point Blank (Piercing Blow)
Общие вопросы по написанию эмулятора. General questions on developing emulator. При поддержке: Lucera 2 - разработка Java Interlude

Ответ
Опции темы
Непрочитано 19.01.2016, 23:43   #11
Аватар для Sojang
Пользователь

Автор темы (Топик Стартер) Re: Структура PROTOCOL_LOGIN_ACK

Цитата:
Сообщение от PROGRAMMATOR Посмотреть сообщение
А это уже проблема в чтении. Как и раньше, может прилететь несколько пакетов в одном, и например, если там было 2 пакета подряд, вы их декрипнули как один, тогда у второго уже данные будут неверными.

while (received >= 6)
{
    int length = BitConverter.ToUInt16(buffer, 0) & 0x7FFF;
 
    byte[] temp = new byte[length + 2];
    Buffer.BlockCopy(buffer, 2, temp, 0, temp.Length);
 
    BitwiseHelper.Unshift(temp, bits);
 
    packetQueue.Enqueue(new ReceivePacketFrame(this, temp));
    received -= length + 4;
 
    Buffer.BlockCopy(buffer, length + 4, buffer, 0, received); // << Копируем оставшиеся данные в начало буфера
}
 
Code: C#
Сделал так вообще перестало читать пакеты от клиента
 
        void BeginRead(IAsyncResult asyncResult)
        {
            int received = stream.EndRead(asyncResult);
            while (received >= 6)
            {
                int length = BitConverter.ToUInt16(buffer, 0) & 0x7FFF;
 
                byte[] temp = new byte[length + 2];
                Buffer.BlockCopy(buffer, 2, temp, 0, temp.Length);
                int _bits = _sessionId % 7 + 1;
                BitShift.Unshift(temp, _bits);
                byte[] opcode = new byte[] { temp[2], temp[3] };
                RecvOpcode packet = (RecvOpcode)BitConverter.ToUInt16(opcode, 0);
                Type t = Type.GetType("PiercingBlow.Auth.Network.Recv." + packet.ToString());
                log.Info("PacketId = {0} Lenght = {1}", BitConverter.ToUInt16(opcode, 0), buffer.Length);
                if (t != null)
                {
                    ClientPacket clientpacket = (ClientPacket)Activator.CreateInstance(t);
                    clientpacket.client = this;
                    clientpacket.Process(buffer);
                }
                else
                {
                    log.Trace(temp.ToHex());
                }
                received -= length + 4;
                Buffer.BlockCopy(buffer, length + 4, buffer, 0, received); // << Копируем оставшиеся данные в начало буфера
            }
            stream.BeginRead(buffer, 0, buffer.Length, BeginRead, null);
        }
 
Code: C#
Sojang вне форума Ответить с цитированием
Непрочитано 20.01.2016, 00:39   #12
Забанен за кидаловo/обман/развод

По умолчанию Re: Структура PROTOCOL_LOGIN_ACK

тип int received чему равно?
Boris2105 вне форума Ответить с цитированием
Непрочитано 20.01.2016, 00:42   #13
Аватар для Sojang
Пользователь

Автор темы (Топик Стартер) Re: Структура PROTOCOL_LOGIN_ACK

Цитата:
Сообщение от Boris2105 Посмотреть сообщение
тип int received чему равно?
Раньше было = 2 байтам теперь всё норм.
Новый вопрос пакет 528 два раза так и должен приходить?
Код:
[Info] Received = 6

[Info] Received = 7

[Info] PacketId = 528

[Info] PacketId = 528

|--------------------------------------------------------------------------|

| 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |

|--------------------------------------------------------------------------|

| 0000: 00 A0 10 02 ....

|--------------------------------------------------------------------------|

|--------------------------------------------------------------------------|

| 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F |

|--------------------------------------------------------------------------|

| 0000: 00 A0 10 02 ....

|--------------------------------------------------------------------------|
Sojang вне форума Ответить с цитированием
Непрочитано 20.01.2016, 00:57   #14
Аватар для PROGRAMMATOR
Администратор

По умолчанию Re: Структура PROTOCOL_LOGIN_ACK

Нет, один раз. Это настройки клиента.
__________________
composer require laravel/framework
yarn add vue
PROGRAMMATOR вне форума Отправить сообщение для PROGRAMMATOR с помощью ICQ Отправить сообщение для PROGRAMMATOR с помощью Skype™ Ответить с цитированием
Непрочитано 20.01.2016, 00:59   #15
Аватар для Sojang
Пользователь

Автор темы (Топик Стартер) Re: Структура PROTOCOL_LOGIN_ACK

Цитата:
Сообщение от PROGRAMMATOR Посмотреть сообщение
Нет, один раз. Это настройки клиента.
В чём может быть проблема?Вроде всё верно,но пакет почему то приходит 2 раза:
 
        void BeginRead(IAsyncResult asyncResult)
        {
            int received = stream.EndRead(asyncResult);
            log.Info("Received = {0}", received);
            while (received >= 6)
            {
                int length = BitConverter.ToUInt16(buffer, 0) & 0x7FFF;
 
                byte[] temp = new byte[length + 2];
                Buffer.BlockCopy(buffer, 0, temp, 0, temp.Length);
                int _bits = _sessionId % 7 + 1;
                BitShift.Unshift(temp, _bits);
                byte[] opcode = new byte[] { temp[2], temp[3] };
                RecvOpcode packet = (RecvOpcode)BitConverter.ToUInt16(opcode, 0);
                Type t = Type.GetType("PiercingBlow.Auth.Network.Recv." + packet.ToString());
                log.Info("PacketId = {0} Lenght = {1}", BitConverter.ToUInt16(opcode, 0), buffer.Length);
                if (t != null)
                {
                    ClientPacket clientpacket = (ClientPacket)Activator.CreateInstance(t);
                    clientpacket.client = this;
                    clientpacket.Process(buffer);
                }
                else
                {
                    log.Trace(temp.ToHex());
                }
                received -= length + 4;
                Buffer.BlockCopy(buffer, length + 4, buffer, 0, received); // << Копируем оставшиеся данные в начало буфера
            }
            stream.BeginRead(buffer, 0, buffer.Length, BeginRead, null);
        }
 
Code: C#
Sojang вне форума Ответить с цитированием
Непрочитано 20.01.2016, 01:02   #16
Аватар для PROGRAMMATOR
Администратор

По умолчанию Re: Структура PROTOCOL_LOGIN_ACK

Цитата:
Сообщение от Dom2 Посмотреть сообщение
Buffer.BlockCopy(buffer, 0,
В моём примере не так.
__________________
composer require laravel/framework
yarn add vue
PROGRAMMATOR вне форума Отправить сообщение для PROGRAMMATOR с помощью ICQ Отправить сообщение для PROGRAMMATOR с помощью Skype™ Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структура пакета Mousepro Lineage II 7 02.04.2014 15:51
Структура пакетов LineOFWar TERA 17 17.01.2013 21:13
Структура пакетов. Drack Lineage II 5 15.06.2012 22:19
C++ Структура NpcInfo ALF. Lineage II 3 17.01.2012 11:54
Структура Item.edf для 2.2.3 MMd Документация 0 24.12.2009 20:00


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 10:20. Часовой пояс GMT +3.

Вверх