예제 #1
0
파일: HItem.cs 프로젝트: ger88555/Tanji
        public HItem(HMessage packet)
        {
            packet.ReadInteger();
            string unknown1 = packet.ReadString();

            Id     = packet.ReadInteger();
            TypeId = packet.ReadInteger();
            packet.ReadInteger();

            Category = packet.ReadInteger();
            ReadData(packet, Category);

            packet.ReadBoolean();
            packet.ReadBoolean();
            packet.ReadBoolean();
            packet.ReadBoolean();
            SecondsToExpiration = packet.ReadInteger();

            HasRentPeriodStarted = packet.ReadBoolean();
            RoomId = packet.ReadInteger();

            if (unknown1 == "S")
            {
                SlotId = packet.ReadString();
                packet.ReadInteger();
            }
        }
예제 #2
0
        public HGroupEntry(HMessage packet)
        {
            Id             = packet.ReadInteger();
            Name           = packet.ReadString();
            BadgeCode      = packet.ReadString();
            PrimaryColor   = packet.ReadString();
            SecondaryColor = packet.ReadString();

            Favorite = packet.ReadBoolean();
            OwnerId  = packet.ReadInteger();
            HasForum = packet.ReadBoolean();
        }
예제 #3
0
        public HCatalogPage(HMessage packet)
        {
            Id          = packet.ReadInteger();
            CatalogType = packet.ReadString();
            LayoutCode  = packet.ReadString();

            Images = new string[packet.ReadInteger()];
            for (int i = 0; i < Images.Length; i++)
            {
                Images[i] = packet.ReadString();
            }

            Texts = new string[packet.ReadInteger()];
            for (int i = 0; i < Texts.Length; i++)
            {
                Texts[i] = packet.ReadString();
            }

            Offers = new HCatalogOffer[packet.ReadInteger()];
            for (int i = 0; i < Offers.Length; i++)
            {
                Offers[i] = new HCatalogOffer(packet);
            }

            OfferId = packet.ReadInteger();
            AcceptSeasonCurrencyAsCredits = packet.ReadBoolean();

            IsFrontPage = (packet.Readable > 0);
        }
예제 #4
0
        public HCatalogProduct(HMessage packet)
        {
            Type = (HProductType)packet.ReadString()[0];
            switch (Type)
            {
            case HProductType.Badge:
            {
                ExtraData    = packet.ReadString();
                ProductCount = 1;
                break;
            }

            default:
            {
                ClassId      = packet.ReadInteger();
                ExtraData    = packet.ReadString();
                ProductCount = packet.ReadInteger();
                if (IsLimited = packet.ReadBoolean())
                {
                    LimitedTotal     = packet.ReadInteger();
                    LimitedRemaining = packet.ReadInteger();
                }
                break;
            }
            }
        }
예제 #5
0
 public HChatlineData(HMessage packet)
 {
     Timestamp     = packet.ReadString();
     Id            = packet.ReadInteger();
     Username      = packet.ReadString();
     Message       = packet.ReadString();
     IsHighlighted = packet.ReadBoolean();
 }
예제 #6
0
        public static HCatalogNode Parse(HMessage packet)
        {
            var    root = new HCatalogNode(packet);
            bool   newAdditionsAvailable = packet.ReadBoolean();
            string catalogType           = packet.ReadString();

            return(root);
        }
예제 #7
0
 public HChatlineData(HMessage packet)
 {
     Timestamp     = packet.ReadUTF8();
     Id            = packet.ReadInt32();
     Username      = packet.ReadUTF8();
     Message       = packet.ReadUTF8();
     IsHighlighted = packet.ReadBoolean();
 }
예제 #8
0
파일: HEntity.cs 프로젝트: ger88555/Tanji
        public HEntity(HMessage packet)
        {
            Id       = packet.ReadInteger();
            Name     = packet.ReadString();
            Motto    = packet.ReadString();
            FigureId = packet.ReadString();
            Index    = packet.ReadInteger();

            Tile = new HPoint(packet.ReadInteger(), packet.ReadInteger(),
                              double.Parse(packet.ReadString(), CultureInfo.InvariantCulture));

            packet.ReadInteger();
            int type = packet.ReadInteger();

            switch (type)
            {
            case 1:
            {
                Gender = SKore.ToGender(packet.ReadString());
                packet.ReadInteger();
                packet.ReadInteger();
                FavoriteGroup = packet.ReadString();
                packet.ReadString();
                packet.ReadInteger();
                packet.ReadBoolean();

                break;
            }

            case 2:
            {
                packet.ReadInteger();
                packet.ReadInteger();
                packet.ReadString();
                packet.ReadInteger();
                packet.ReadBoolean();
                packet.ReadBoolean();
                packet.ReadBoolean();
                packet.ReadBoolean();
                packet.ReadBoolean();
                packet.ReadBoolean();
                packet.ReadInteger();
                packet.ReadString();
                break;
            }

            case 4:
            {
                packet.ReadString();
                packet.ReadInteger();
                packet.ReadString();
                for (int j = packet.ReadInteger(); j > 0; j--)
                {
                    packet.ReadShort();
                }
                break;
            }
            }
        }
예제 #9
0
        public HFriends(HMessage packet)
        {
            Id       = packet.ReadInteger();
            Username = packet.ReadString();
            Gender   = (packet.ReadInteger() == 1 ? HGender.Male : HGender.Female);

            IsOnline   = packet.ReadBoolean();
            CanFollow  = packet.ReadBoolean();
            Figure     = packet.ReadString();
            CategoryId = packet.ReadInteger();
            Motto      = packet.ReadString();
            RealName   = packet.ReadString();
            packet.ReadString();

            IsPersisted = packet.ReadBoolean();
            packet.ReadBoolean();
            IsPocketHabboUser  = packet.ReadBoolean();
            RelationshipStatus = (HRelationship)packet.ReadShort();
        }
예제 #10
0
        public static IReadOnlyList <HItem> Parse(HMessage packet)
        {
            packet.ReadInteger();
            packet.ReadInteger();

            int itemCount = packet.ReadInteger();
            var itemList  = new List <HItem>(itemCount);

            for (int i = 0; i < itemList.Capacity; i++)
            {
                packet.ReadInteger();
                string s1 = packet.ReadString();

                int id     = packet.ReadInteger();
                int typeId = packet.ReadInteger();
                packet.ReadInteger();

                int category = packet.ReadInteger();
                HStuffData.ReadStuffData(category, packet);

                packet.ReadBoolean();
                packet.ReadBoolean();
                packet.ReadBoolean();
                packet.ReadBoolean();
                int secondsToExpiration = packet.ReadInteger();

                bool hasRentPeriodStarted = packet.ReadBoolean();
                int  roomId = packet.ReadInteger();

                var item = new HItem(id, typeId, category,
                                     secondsToExpiration, hasRentPeriodStarted, roomId);

                if (s1 == "S")
                {
                    item.SlotId = packet.ReadString();
                    packet.ReadInteger();
                }
                itemList.Add(item);
            }
            return(itemList);
        }
예제 #11
0
        public string ExtractStructureLog(HMessage packet, bool toServer)
        {
            if (!toServer || _invalidStructures[packet.Destination]
                .Contains(packet.Header))
            {
                return(string.Empty);
            }

            ASInstance messageInstance = (toServer ?
                                          MainUI.ConnectionPg.Game.OutgoingTypes : MainUI.ConnectionPg.Game.IncomingTypes)[packet.Header].Instance;

            string   arguments   = $"{{l}}{{u:{packet.Header}}}";
            ASMethod messageCtor = messageInstance.Constructor;

            foreach (ASParameter param in messageCtor.Parameters)
            {
                try
                {
                    arguments += "{";
                    switch (param.Type.ObjName.ToLower())
                    {
                    default:
                        return(string.Empty);

                    case "string":
                        arguments += "s:" + packet.ReadString();
                        break;

                    case "int":
                        arguments += "i:" + packet.ReadInteger();
                        break;

                    case "boolean":
                        arguments += "b:" + packet.ReadBoolean();
                        break;
                    }
                    arguments += "}";
                }
                catch
                {
                    _invalidStructures[packet.Destination]
                    .Add(packet.Header);
                }
            }

            if (packet.Readable != 0)
            {
                arguments = string.Empty;
            }

            packet.Position = 0;
            return(arguments);
        }
예제 #12
0
        public HUserProfile(HMessage packet)
        {
            Id               = packet.ReadInteger();
            Username         = packet.ReadString();
            Motto            = packet.ReadString();
            Figure           = packet.ReadString();
            CreationDate     = packet.ReadString();
            AchievementScore = packet.ReadInteger();
            FriendCount      = packet.ReadInteger();

            IsFriend            = packet.ReadBoolean();
            IsFriendRequestSent = packet.ReadBoolean();
            IsOnline            = packet.ReadBoolean();

            Groups = new HGroupEntry[packet.ReadInteger()];
            for (int i = 0; i < Groups.Length; i++)
            {
                Groups[i] = new HGroupEntry(packet);
            }
            LastAccessSinceInSeconds = packet.ReadInteger();
            OpenProfileView          = packet.ReadBoolean();
        }
예제 #13
0
        public HCatalogOffer(HMessage packet)
        {
            Id          = packet.ReadInteger();
            DisplayName = packet.ReadString();
            IsRentable  = packet.ReadBoolean();

            CreditCost        = packet.ReadInteger();
            OtherCurrencyCost = packet.ReadInteger();
            OtherCurrencyType = packet.ReadInteger();
            CanGift           = packet.ReadBoolean();

            Products = new HCatalogProduct[packet.ReadInteger()];
            for (int i = 0; i < Products.Length; i++)
            {
                Products[i] = new HCatalogProduct(packet);
            }

            ClubLevel   = packet.ReadInteger();
            IsPet       = packet.ReadBoolean();
            AllowBundle = packet.ReadBoolean();

            PreviewImage = packet.ReadString();
        }
예제 #14
0
        public void WriteStructureLog(HMessage packet, ASClass messageClass)
        {
            if (_invalidStructures.Contains(packet.Header))
            {
                return;
            }

            int      position     = 0;
            string   structureLog = $"{{l}}{{u:{packet.Header}}}";
            ASMethod msgCtor      = messageClass.Instance.Constructor;

            foreach (ASParameter parameter in msgCtor.Parameters)
            {
                switch (parameter.Type.Name.ToLower())
                {
                case "string":
                    if (!packet.CanReadString(position))
                    {
                        continue;
                    }
                    structureLog += ($"{{s:{packet.ReadString(ref position)}}}");
                    break;

                case "boolean":
                    if (packet.ReadableAt(position) < 1)
                    {
                        continue;
                    }
                    structureLog += ($"{{b:{packet.ReadBoolean(ref position)}}}");
                    break;

                case "int":
                    if (packet.ReadableAt(position) < 4)
                    {
                        continue;
                    }
                    structureLog += ($"{{i:{packet.ReadInteger(ref position)}}}");
                    break;
                }
            }
            if (packet.ReadableAt(position) == 0)
            {
                WriteHighlight(structureLog + "\r\n", StructureHighlight);
            }
            else
            {
                _invalidStructures.Add(packet.Header);
            }
        }
예제 #15
0
        public void init(HMessage message)
        {
            Id          = message.ReadInteger();
            Catalogname = message.ReadString();
            message.ReadBoolean();
            CreditCost  = message.ReadInteger();
            SpecialCost = message.ReadInteger();
            SpecialType = message.ReadInteger();
            AllowGift   = message.ReadBoolean();
            int ccount = message.ReadInteger();

            for (int p = 0; p < ccount; p++)
            {
                string type = message.ReadString();
                if (type == "b")
                {
                    Badge = message.ReadString();
                }
                else
                {
                    sprite_id   = message.ReadInteger();
                    SpecialData = message.ReadString();
                    Amount      = message.ReadInteger();
                    Limited     = message.ReadBoolean();
                    if (Limited)
                    {
                        message.ReadInteger();
                        message.ReadInteger();
                    }
                }
            }
            message.ReadInteger();
            message.ReadBoolean();
            message.ReadBoolean();
            message.ReadString();
        }
예제 #16
0
        public HSearchResult(HMessage packet)
        {
            SearchCode = packet.ReadString();
            Text       = packet.ReadString();

            ActionAllowed = packet.ReadInteger();
            ForceClosed   = packet.ReadBoolean();
            ViewMode      = packet.ReadInteger();

            Rooms = new HRoomEntry[packet.ReadInteger()];
            for (int i = 0; i < Rooms.Length; i++)
            {
                Rooms[i] = new HRoomEntry(packet);
            }
        }
예제 #17
0
        public Page ReadPage(HMessage message, int parentId = -2)
        {
            Page page = new Page();

            page.ParentId = parentId;;
            message.ReadBoolean();
            page.Icon = message.ReadInteger();
            page.Id   = message.ReadInteger();
            //   Console.WriteLine($" pageId {page.Id}"); ;
            //   Console.WriteLine($" pageIcon{page.Id}"); ;
            page.Name    = message.ReadString();
            page.Caption = message.ReadString();
            // Console.WriteLine($" pageName {page.Name}"); ;
            // Console.WriteLine($" pageCaption {page.Caption}"); ;
            int idkyet = message.ReadInteger();

            //    Console.WriteLine($" SearchableItems {idkyet}"); ;
            for (int i = 0; i < idkyet; i++)
            {
                message.ReadInteger();
            }
            int pagescount = message.ReadInteger();

            //    Console.WriteLine($"pagescount > " + pagescount);
            for (int i = 0; i < pagescount; i++)
            {
                Page p = ReadPage(message, page.Id);
                if (!allPages.ContainsKey(p.Id))
                {
                    allPages.Add(p.Id, p);
                }
                else
                {
                    allPages[p.Id] = p;
                }

                page.SubPages.Add(allPages[p.Id]);
            }

            return(page);
        }
예제 #18
0
        public HCatalogNode(HMessage packet)
        {
            Visible = packet.ReadBoolean();

            Icon         = packet.ReadInteger();
            PageId       = packet.ReadInteger();
            PageName     = packet.ReadString();
            Localization = packet.ReadString();

            OfferIds = new int[packet.ReadInteger()];
            for (int i = 0; i < OfferIds.Length; i++)
            {
                OfferIds[i] = packet.ReadInteger();
            }

            Children = new HCatalogNode[packet.ReadInteger()];
            for (int i = 0; i < Children.Length; i++)
            {
                Children[i] = new HCatalogNode(packet);
            }
        }
예제 #19
0
        public static void AppendPacketStructure(StringBuilder sb, HMessage packet, StructureType[] structure)
        {
            int originalPosition = packet.Position;

            try
            {
                packet.Position = 0;

                for (int i = 0; i < structure.Length; i++)
                {
                    sb.Append(" ");

                    switch (structure[i])
                    {
                    case StructureType.Boolean:
                        sb.Append(packet.ReadBoolean() ? "true" : "false");
                        break;

                    case StructureType.Byte:
                        sb.Append($"b:{packet.ReadBytes(1)[0]}");
                        break;

                    case StructureType.Short:
                        sb.Append($"s:{(short)packet.ReadShort()}");
                        break;

                    case StructureType.Integer:
                        sb.Append($"{packet.ReadInteger()}");
                        break;

                    case StructureType.String:
                        sb.Append($"\"{EscapeString(packet.ReadString())}\"");
                        break;

                    case StructureType.ByteArray:
                        int    len   = packet.ReadInteger();
                        byte[] bytes = packet.ReadBytes(len);
                        sb.Append("a:[");
                        for (int j = 0; j < bytes.Length; j++)
                        {
                            if (j > 0)
                            {
                                sb.Append(" ");
                            }
                            sb.Append(bytes[j].ToString("x2"));
                        }
                        sb.Append("]");
                        break;

                    default:
                        throw new Exception($"Unknown/unsupported structure type: {structure[i]}");
                    }
                }

                if (packet.Readable > 0)
                {
                    byte[] extra = packet.ReadBytes(packet.Readable);
                    sb.Append(" [");
                    for (int i = 0; i < extra.Length; i++)
                    {
                        if (i > 0)
                        {
                            sb.Append(" ");
                        }
                        sb.Append(extra[i].ToString("x2"));
                    }
                    sb.Append("]");
                }
            }
            finally { packet.Position = originalPosition; }
        }
예제 #20
0
        private async Task ReceiveRemoteModuleDataAsync()
        {
            try
            {
                HMessage packet = await RemoteModule.ReceivePacketAsync().ConfigureAwait(false);

                if (packet == null)
                {
                    DataAwaiters.Values.ToList().ForEach(awaiter =>
                    {
                        if (awaiter != null)
                        {
                            awaiter.SetResult(null);
                        }
                    });

                    RemoteModule = null;
                    Task grabRemoteModuleTask =
                        GrabRemoteModuleAsync();

                    return;
                }

                var response = new HMessage(packet.Header);
                #region Switch: packet.Header
                switch (packet.Header)
                {
                default: response = null; break;

                case 0:
                {
                    response.WriteShort((ushort)Hotel);
                    break;
                }

                case 1:
                {
                    response.WriteString(Game?.Location);
                    if (!string.IsNullOrWhiteSpace(Game?.Location))
                    {
                        response.WriteString(Path.GetFullPath("Hashes.ini"));
                    }
                    break;
                }

                case 2:
                {
                    response.WriteString(GameData.Source);
                    break;
                }

                case 3:
                {
                    response.WriteShort(Connection.Port);
                    response.WriteString(Connection.Host);
                    response.WriteString(Connection.Address);
                    break;
                }

                case 4:
                {
                    if (Connection != null)
                    {
                        int    dataLength = packet.ReadInteger();
                        byte[] data       = packet.ReadBytes(dataLength);

                        await Connection.SendToClientAsync(
                            data).ConfigureAwait(false);

                        response = null;
                    }
                    break;
                }

                case 5:
                {
                    if (Connection != null)
                    {
                        int    dataLength = packet.ReadInteger();
                        byte[] data       = packet.ReadBytes(dataLength);

                        await Connection.SendToServerAsync(
                            data).ConfigureAwait(false);

                        response = null;
                    }
                    break;
                }

                case 6:
                case 7:
                {
                    string stamp = packet.ReadString();
                    if (DataAwaiters.ContainsKey(stamp))
                    {
                        var destination = (HDestination)(packet.Header - 6);

                        int    step        = packet.ReadInteger();
                        bool   isBlocked   = packet.ReadBoolean();
                        int    dataLength  = packet.ReadInteger();
                        byte[] data        = packet.ReadBytes(dataLength);
                        var    interPacket = new HMessage(data, destination);

                        var args = new DataInterceptedEventArgs(interPacket, step, (destination == HDestination.Server));
                        args.IsBlocked = isBlocked;

                        DataAwaiters[stamp].SetResult(args);
                        response = null;
                    }
                    break;
                }
                }
                #endregion

                if (response != null)
                {
                    await RemoteModule.SendPacketAsync(response).ConfigureAwait(false);
                }
            }
            finally
            {
                if (RemoteModule != null)
                {
                    Task receiveRemModuDataTask =
                        ReceiveRemoteModuleDataAsync();
                }
            }
        }
예제 #21
0
파일: HEntity.cs 프로젝트: habb0/Sulakore
        /// <summary>
        /// Returns a <see cref="IReadOnlyList{T}"/> of type <see cref="HEntity"/> found in the <see cref="HMessage"/>.
        /// </summary>
        /// <param name="packet">The <see cref="HMessage"/> that contains the <see cref="HEntity"/> data to parse.</param>
        /// <returns></returns>
        public static IReadOnlyList<HEntity> Parse(HMessage packet)
        {
            int entityCount = packet.ReadInteger();
            var entityList = new List<HEntity>(entityCount);

            for (int i = 0; i < entityList.Capacity; i++)
            {
                int id = packet.ReadInteger();
                string name = packet.ReadString();
                string motto = packet.ReadString();
                string figureId = packet.ReadString();
                int index = packet.ReadInteger();
                int x = packet.ReadInteger();
                int y = packet.ReadInteger();
                double z = double.Parse(packet.ReadString());

                packet.ReadInteger();
                int type = packet.ReadInteger();

                HGender gender = HGender.Unknown;
                string favoriteGroup = string.Empty;
                #region Switch Statement: type
                switch (type)
                {
                    case 1:
                    {
                        gender = SKore.ToGender(packet.ReadString());
                        packet.ReadInteger();
                        packet.ReadInteger();
                        favoriteGroup = packet.ReadString();
                        packet.ReadString();
                        packet.ReadInteger();
                        packet.ReadBoolean();

                        break;
                    }
                    case 2:
                    {
                        packet.ReadInteger();
                        packet.ReadInteger();
                        packet.ReadString();
                        packet.ReadInteger();
                        packet.ReadBoolean();
                        packet.ReadBoolean();
                        packet.ReadBoolean();
                        packet.ReadBoolean();
                        packet.ReadBoolean();
                        packet.ReadBoolean();
                        packet.ReadInteger();
                        packet.ReadString();
                        break;
                    }
                    case 4:
                    {
                        packet.ReadString();
                        packet.ReadInteger();
                        packet.ReadString();

                        for (int j = packet.ReadInteger(); j > 0; j--)
                            packet.ReadShort();

                        break;
                    }
                }
                #endregion

                var entity = new HEntity(id, index, name,
                    new HPoint(x, y, z), motto, gender, figureId, favoriteGroup);

                entityList.Add(entity);
            }

            return entityList;
        }
예제 #22
0
        /// <summary>
        /// Returns a <see cref="IReadOnlyList{T}"/> of type <see cref="HEntity"/> found in the <see cref="HMessage"/>.
        /// </summary>
        /// <param name="packet">The <see cref="HMessage"/> that contains the <see cref="HEntity"/> data to parse.</param>
        /// <returns></returns>
        public static IReadOnlyList <HEntity> Parse(HMessage packet)
        {
            int entityCount = packet.ReadInteger();
            var entityList  = new List <HEntity>(entityCount);

            for (int i = 0; i < entityList.Capacity; i++)
            {
                int    id       = packet.ReadInteger();
                string name     = packet.ReadString();
                string motto    = packet.ReadString();
                string figureId = packet.ReadString();
                int    index    = packet.ReadInteger();
                int    x        = packet.ReadInteger();
                int    y        = packet.ReadInteger();
                double z        = double.Parse(packet.ReadString());

                packet.ReadInteger();
                int type = packet.ReadInteger();

                HGender gender        = HGender.Unknown;
                string  favoriteGroup = string.Empty;
                #region Switch Statement: type
                switch (type)
                {
                case 1:
                {
                    gender = SKore.ToGender(packet.ReadString());
                    packet.ReadInteger();
                    packet.ReadInteger();
                    favoriteGroup = packet.ReadString();
                    packet.ReadString();
                    packet.ReadInteger();
                    packet.ReadBoolean();

                    break;
                }

                case 2:
                {
                    packet.ReadInteger();
                    packet.ReadInteger();
                    packet.ReadString();
                    packet.ReadInteger();
                    packet.ReadBoolean();
                    packet.ReadBoolean();
                    packet.ReadBoolean();
                    packet.ReadBoolean();
                    packet.ReadBoolean();
                    packet.ReadBoolean();
                    packet.ReadInteger();
                    packet.ReadString();
                    break;
                }

                case 4:
                {
                    packet.ReadString();
                    packet.ReadInteger();
                    packet.ReadString();

                    for (int j = packet.ReadInteger(); j > 0; j--)
                    {
                        packet.ReadShort();
                    }

                    break;
                }
                }
                #endregion

                var entity = new HEntity(id, index, name,
                                         new HPoint(x, y, z), motto, gender, figureId, favoriteGroup);

                entityList.Add(entity);
            }

            return(entityList);
        }
예제 #23
0
        private async Task ReceiveRemoteContractorDataAsync()
        {
            try
            {
                HMessage packet = await _remoteContractor.ReceivePacketAsync().ConfigureAwait(false);

                if (packet == null)
                {
                    Environment.Exit(0);
                }
                #region Switch: packet.Header
                switch (packet.Header)
                {
                case 0:
                {
                    _initStep++;
                    _hotel = (HHotel)packet.ReadShort();
                    break;
                }

                case 1:
                {
                    _initStep++;
                    _in  = new Incoming();
                    _out = new Outgoing();

                    string location = packet.ReadString();
                    if (!string.IsNullOrWhiteSpace(location))
                    {
                        _game = new HGame(location);
                        _game.Disassemble();

                        _game.GenerateMessageHashes();
                        if (packet.Readable > 0)
                        {
                            string hashesPath = packet.ReadString();
                            _in.Load(_game, hashesPath);
                            _out.Load(_game, hashesPath);
                        }
                        _module.ModifyGame(_game);
                    }
                    break;
                }

                case 2:
                {
                    _initStep++;
                    _gameData = new HGameData(packet.ReadString());
                    _module.ModifyGameData(_gameData);
                    break;
                }

                case 3:
                {
                    _initStep++;
                    var connection = (ContractorProxy)_connection;
                    connection.Port    = packet.ReadShort();
                    connection.Host    = packet.ReadString();
                    connection.Address = packet.ReadString();
                    break;
                }

                case 4:
                case 5:
                {
                    var destination = (HDestination)(packet.Header - 4);

                    string stamp       = packet.ReadString();
                    int    step        = packet.ReadInteger();
                    bool   isBlocked   = packet.ReadBoolean();
                    int    dataLength  = packet.ReadInteger();
                    byte[] data        = packet.ReadBytes(dataLength);
                    var    interPacket = new HMessage(data, destination);

                    var args = new DataInterceptedEventArgs(interPacket, step, (destination == HDestination.Server));
                    try
                    {
                        if (destination == HDestination.Server)
                        {
                            _module.HandleOutgoing(args);
                        }
                        else
                        {
                            _module.HandleIncoming(args);
                        }
                    }
                    finally
                    {
                        await SendInterceptedDataResponseAsync(
                            stamp, args).ConfigureAwait(false);
                    }
                    break;
                }
                }
                #endregion

                if (_initStep == 4)
                {
                    _initializationSource?.SetResult(true);
                }
            }
            finally
            {
                Task receiveRemContDataTask = ReceiveRemoteContractorDataAsync();
            }
        }