Показать сообщение отдельно
Непрочитано 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 вне форума Ответить с цитированием