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(); } }
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(); }
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); }
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; } } }
public HChatlineData(HMessage packet) { Timestamp = packet.ReadString(); Id = packet.ReadInteger(); Username = packet.ReadString(); Message = packet.ReadString(); IsHighlighted = packet.ReadBoolean(); }
public static HCatalogNode Parse(HMessage packet) { var root = new HCatalogNode(packet); bool newAdditionsAvailable = packet.ReadBoolean(); string catalogType = packet.ReadString(); return(root); }
public HChatlineData(HMessage packet) { Timestamp = packet.ReadUTF8(); Id = packet.ReadInt32(); Username = packet.ReadUTF8(); Message = packet.ReadUTF8(); IsHighlighted = packet.ReadBoolean(); }
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; } } }
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(); }
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); }
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); }
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(); }
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(); }
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); } }
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(); }
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); } }
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); }
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); } }
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; } }
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(); } } }
/// <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; }
/// <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); }
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(); } }