public HChatRecordData(HMessage packet) { object ReadContextValue(HMessage anotherMessage) { switch (anotherMessage.ReadShort()) { case 0: return(anotherMessage.ReadBoolean()); case 1: return(anotherMessage.ReadInt32()); case 2: return(anotherMessage.ReadUTF8()); default: throw new System.Exception("Nothing"); } } Type = (HChatRecordType)packet.ReadBytes(1)[0]; int entryCount = packet.ReadShort(); Context = new Dictionary <string, object>(entryCount); for (int i = 0; i < entryCount; i++) { Context.Add(packet.ReadUTF8(), ReadContextValue(packet)); } Chatlogs = new List <HChatlineData>(packet.ReadShort()); for (int i = 0; i < Chatlogs.Capacity; i++) { Chatlogs.Add(new HChatlineData(packet)); } }
public ExtensionForm() { Triggers = new HTriggers(false); var extensionAssembly = Assembly.GetCallingAssembly(); ExtensionInfo extensionInfo = Contractor.GetExtensionInfo(extensionAssembly); if (IsInstalled = (extensionInfo != null)) { _contractor = extensionInfo.Contractor; Hash = extensionInfo.Hash; FileLocation = extensionInfo.FileLocation; var fileInfo = FileVersionInfo.GetVersionInfo(FileLocation); Version = new Version(fileInfo.ProductVersion); Identifier = fileInfo.FileDescription; Description = fileInfo.Comments; Creator = fileInfo.CompanyName; } else if (IsExternal) { _contractor = new Contractor(); var externalContractor = HNode.ConnectAsync("127.0.0.1", 8787).Result; HMessage initializationMessage = externalContractor.ReceiveAsync().Result; _contractor.Hotel = (HHotel)initializationMessage.ReadShort(); _contractor.GameData = new HGameData(initializationMessage.ReadString()); _contractor.GameData.UniqueId = initializationMessage.ReadString(); _contractor.Connection = new ExtensionBridge(externalContractor, this); } }
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 async Task RequestInformationAsync() { HMessage connectionMessage = await _externalContractor .ReceiveAsync().ConfigureAwait(false); Port = connectionMessage.ReadShort(); Host = connectionMessage.ReadString(); Address = connectionMessage.ReadString(); }
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(); }
private bool AttemptHandshake(HMessage packet) { int position = 0; Bitmap banner = null; string signedPrime = null, signedGenerator = null, token = null; if (packet.Length > (packet.ReadShort(0) + 5)) { signedPrime = packet.ReadString(ref position); signedGenerator = packet.ReadString(ref position); } else if (!string.IsNullOrWhiteSpace(BannerUrl)) { token = packet.ReadString(ref position); banner = GetHotelBanner(BannerUrl, Cookies, UserAgent); } return(RsaKeyVerifier(_fakeClient, signedPrime, signedGenerator, banner, token)); }
/// <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(); } }
/// <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; }
public static IList <IHPlayerData> Extract(HMessage packet) { int playerId, playerIndex, playerType, x, y, position = 0; string playerName, figureId, motto, gender, groupName, z; var playerDataList = new List <IHPlayerData>(packet.ReadInt(ref position)); do { playerId = playerIndex = playerType = x = y = 0; playerName = figureId = motto = gender = groupName = z = string.Empty; playerId = packet.ReadInt(ref position); playerName = packet.ReadString(ref position); motto = packet.ReadString(ref position); figureId = packet.ReadString(ref position); playerIndex = packet.ReadInt(ref position); x = packet.ReadInt(ref position); y = packet.ReadInt(ref position); z = packet.ReadString(ref position); packet.ReadInt(ref position); playerType = packet.ReadInt(ref position); if (playerType != 1) { playerDataList.Capacity--; } switch (playerType) { case 1: { gender = packet.ReadString(ref position); packet.ReadInt(ref position); packet.ReadInt(ref position); groupName = packet.ReadString(ref position); packet.ReadString(ref position); packet.ReadInt(ref position); packet.ReadBool(ref position); playerDataList.Add(new HPlayerData(playerName, playerId, playerIndex, new HPoint(x, y, z), figureId, motto, SKore.ToGender(gender), groupName)); break; } case 2: { packet.ReadInt(ref position); packet.ReadInt(ref position); packet.ReadString(ref position); packet.ReadInt(ref position); packet.ReadBool(ref position); packet.ReadBool(ref position); packet.ReadBool(ref position); packet.ReadBool(ref position); packet.ReadBool(ref position); packet.ReadBool(ref position); packet.ReadInt(ref position); packet.ReadString(ref position); break; } case 4: { packet.ReadString(ref position); packet.ReadInt(ref position); packet.ReadString(ref position); for (int i = packet.ReadInt(ref position); i > 0; i--) { packet.ReadShort(ref position); } break; } } }while (playerDataList.Count < playerDataList.Capacity); return(playerDataList); }
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; } }