示例#1
0
        public HFloorItem(HPacket packet)
            : base(packet)
        {
            Id = packet.ReadInt32();
            TypeId = packet.ReadInt32();

            var tile = new HPoint(packet.ReadInt32(), packet.ReadInt32());
            Facing = (HDirection)packet.ReadInt32();

            tile.Z = double.Parse(packet.ReadUTF8(), CultureInfo.InvariantCulture);
            Tile = tile;

            Remnants.Enqueue(packet.ReadUTF8());
            Remnants.Enqueue(packet.ReadInt32());

            Category = packet.ReadInt32();
            Stuff = ReadData(packet, Category);

            SecondsToExpiration = packet.ReadInt32();
            UsagePolicy = packet.ReadInt32();

            OwnerId = packet.ReadInt32();
            if (TypeId < 0)
            {
                Remnants.Enqueue(packet.ReadUTF8());
            }
        }
示例#2
0
        private async Task CaptureModulesAsync(TcpListener listener)
        {
            try
            {
                HNode moduleNode = new HNode(await listener.AcceptSocketAsync());

                moduleNode.InFormat  = HFormat.EvaWire;
                moduleNode.OutFormat = HFormat.EvaWire;
                HPacket infoPacket = await moduleNode.ReceivePacketAsync();

                var module = new ModuleInfo(moduleNode);
                module.PropertyChanged += Module_PropertyChanged;

                module.Version     = Version.Parse(infoPacket.ReadUTF8());
                module.Name        = infoPacket.ReadUTF8();
                module.Description = infoPacket.ReadUTF8();

                module.Authors.Capacity = infoPacket.ReadInt32();
                for (int i = 0; i < module.Authors.Capacity; i++)
                {
                    module.Authors.Add(new AuthorAttribute(infoPacket.ReadUTF8()));
                }
                Modules.Add(module);

                module.Initialize();
                Task handleModuleDataTask = HandleModuleDataAsync(module);
            }
            finally { Task captureModulesAsync = CaptureModulesAsync(listener); }
        }
示例#3
0
        public HFloorObject(HPacket packet)
        {
            Id     = packet.ReadInt32();
            TypeId = packet.ReadInt32();

            var tile = new HPoint(packet.ReadInt32(), packet.ReadInt32());

            Facing = (HDirection)packet.ReadInt32();

            tile.Z = double.Parse(packet.ReadUTF8(), CultureInfo.InvariantCulture);
            Tile   = tile;

            Height = double.Parse(packet.ReadUTF8(), CultureInfo.InvariantCulture);
            Extra  = packet.ReadInt32();

            Category = packet.ReadInt32();
            Stuff    = ReadData(packet, Category);

            SecondsToExpiration = packet.ReadInt32();
            UsagePolicy         = (HUsagePolicy)packet.ReadInt32();

            OwnerId = packet.ReadInt32();
            if (TypeId < 0)
            {
                StaticClass = packet.ReadUTF8();
            }
        }
示例#4
0
文件: HItem.cs 项目: scottstamp/Geode
        public HItem(HPacket packet)
        {
            packet.ReadInt32();

            string loc2 = packet.ReadUTF8();

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

            Category = packet.ReadInt32();
            Stuff    = ReadData(packet, Category);

            IsGroupable = packet.ReadBoolean();
            IsTradeable = packet.ReadBoolean();
            packet.ReadBoolean();
            CanPlaceInMarketplace = packet.ReadBoolean();
            SecondsToExpiration   = packet.ReadInt32();

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

            if (loc2 == "S")
            {
                SlotId = packet.ReadUTF8();
                packet.ReadInt32();
            }
        }
示例#5
0
        public HItem(HPacket packet)
        {
            packet.ReadInt32();

            Type = (HProductType)packet.ReadUTF8()[0];

            Id       = packet.ReadInt32();
            TypeId   = packet.ReadInt32();
            Category = (HFurniCategory)packet.ReadInt32();

            StuffDataFormat = packet.ReadInt32();
            Stuff           = ReadData(packet, StuffDataFormat);

            IsRecyclable = packet.ReadBoolean();
            IsTradable   = packet.ReadBoolean();
            IsGroupable  = packet.ReadBoolean();
            IsSellable   = packet.ReadBoolean();

            CanPlaceInMarketplace = packet.ReadBoolean();
            SecondsToExpiration   = packet.ReadInt32();

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

            if (Type == HProductType.Stuff)
            {
                SlotId = packet.ReadUTF8();
                Extra  = packet.ReadInt32();
            }
        }
示例#6
0
        public HItem(HPacket packet)
            : base(packet)
        {
            Remnants.Enqueue(packet.ReadInt32());

            string unknown1 = packet.ReadUTF8();

            Remnants.Enqueue(unknown1);

            Id     = packet.ReadInt32();
            TypeId = packet.ReadInt32();
            Remnants.Enqueue(packet.ReadInt32());

            Category = packet.ReadInt32();
            Stuff    = ReadData(packet, Category);

            IsGroupable = packet.ReadBoolean();
            Remnants.Enqueue(packet.ReadBoolean());
            Remnants.Enqueue(packet.ReadBoolean());
            Remnants.Enqueue(packet.ReadBoolean());
            SecondsToExpiration = packet.ReadInt32();

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

            if (unknown1 == "S")
            {
                SlotId = packet.ReadUTF8();
                Remnants.Enqueue(packet.ReadInt32());
            }
        }
示例#7
0
        public override void WriteTo(HPacket packet)
        {
            packet.Write((char)Type);
            switch (Type)
            {
            case HProductType.Badge:
            {
                packet.Write(ExtraData);
                break;
            }

            default:
            {
                packet.Write(ClassId);
                packet.Write(ExtraData);
                packet.Write(ProductCount);

                packet.Write(IsLimited);
                if (IsLimited)
                {
                    packet.Write(LimitedTotal);
                    packet.Write(LimitedRemaining);
                }
                break;
            }
            }
        }
示例#8
0
        public HAchievementLevel(string name, HPacket packet)
        {
            Level      = packet.ReadInt32();
            PointLimit = packet.ReadInt32();

            BadgeId = "ACH_" + name + Level;
        }
示例#9
0
        public HCatalogPage(HPacket packet)
            : base(packet)
        {
            Id          = packet.ReadInt32();
            CatalogType = packet.ReadUTF8();
            LayoutCode  = packet.ReadUTF8();

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

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

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

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

            //TODO: ?????????????
            IsFrontPage = (packet.ReadableBytes > 0);
        }
示例#10
0
        public virtual HPacket ToPacket()
        {
            HPacket packet = Format.CreatePacket(PacketId);

            WriteTo(packet);
            return(packet);
        }
示例#11
0
        public static HPacket ToPacket(ushort packetId, HFormat format, IList <HWallItem> wallItems)
        {
            HPacket packet = format.CreatePacket(packetId);

            packet.Write(0);
            var owners = new Dictionary <int, string>();

            foreach (HWallItem wallItem in wallItems)
            {
                if (owners.ContainsKey(wallItem.OwnerId))
                {
                    continue;
                }
                owners.Add(wallItem.OwnerId, wallItem.OwnerName);

                packet.Write(wallItem.OwnerId);
                packet.Write(wallItem.OwnerName);
            }
            packet.Write(owners.Count, 0);

            packet.Write(wallItems.Count);
            foreach (HWallItem wallItem in wallItems)
            {
                wallItem.WriteTo(packet);
            }

            return(packet);
        }
示例#12
0
        private async Task InterceptOutgoingAsync(DataInterceptedEventArgs continuedFrom = null)
        {
            HPacket packet = await Local.ReceivePacketAsync().ConfigureAwait(false);

            if (packet != null)
            {
                var args = new DataInterceptedEventArgs(packet, ++_outSteps, true,
                                                        InterceptOutgoingAsync, ServerRelayer);

                try { OnDataOutgoing(args); }
                catch { args.Restore(); }

                if (!args.IsBlocked && !args.WasRelayed)
                {
                    await SendToServerAsync(args.Packet).ConfigureAwait(false);
                }
                if (!args.HasContinued)
                {
                    args.Continue();
                }
            }
            else
            {
                Disconnect();
            }
        }
示例#13
0
        public HCatalogProduct(HPacket packet)
        {
            Type = (HProductType)packet.ReadUTF8()[0];
            switch (Type)
            {
            case HProductType.Badge:
            {
                ExtraData    = packet.ReadUTF8();
                ProductCount = 1;
                break;
            }

            default:
            {
                ClassId      = packet.ReadInt32();
                ExtraData    = packet.ReadUTF8();
                ProductCount = packet.ReadInt32();
                if (IsLimited = packet.ReadBoolean())
                {
                    LimitedTotal     = packet.ReadInt32();
                    LimitedRemaining = packet.ReadInt32();
                }
                break;
            }
            }
        }
示例#14
0
文件: HItem.cs 项目: Nestor/Tanji-1
        public HItem(HPacket packet)
        {
            packet.ReadInt32();
            string unknown1 = packet.ReadUTF8();

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

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

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

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

            if (unknown1 == "S")
            {
                SlotId = packet.ReadUTF8();
                packet.ReadInt32();
            }
        }
示例#15
0
        public HFurniture(HPacket packet)
        {
            Id     = packet.ReadInt32();
            TypeId = packet.ReadInt32();

            Tile   = new HPoint(packet.ReadInt32(), packet.ReadInt32());
            Facing = (HDirection)packet.ReadInt32();
            Tile.Z = double.Parse(packet.ReadUTF8(), CultureInfo.InvariantCulture);

            var loc1 = packet.ReadUTF8();
            var loc3 = packet.ReadInt32();

            int category = packet.ReadInt32();

            ReadData(packet, category);

            var loc4 = packet.ReadInt32();
            var loc5 = packet.ReadInt32();

            OwnerId = packet.ReadInt32();
            if (TypeId < 0)
            {
                var loc6 = packet.ReadUTF8();
            }
        }
示例#16
0
        private async Task InterceptIncomingAsync(DataInterceptedEventArgs continuedFrom = null)
        {
            HPacket packet = await Remote.ReceivePacketAsync().ConfigureAwait(false);

            if (packet != null)
            {
                var args = new DataInterceptedEventArgs(packet, ++_inSteps, false,
                                                        InterceptIncomingAsync, ClientRelayer);

                try { OnDataIncoming(args); }
                catch { args.Restore(); }

                if (!args.IsBlocked && !args.WasRelayed)
                {
                    await SendToClientAsync(args.Packet).ConfigureAwait(false);
                }
                if (!args.HasContinued)
                {
                    args.Continue();
                }
            }
            else
            {
                Disconnect();
            }
        }
示例#17
0
 private void Extension_OnDoubleClickEvent(object sender, HPacket e) // G-Earth extension play button clicked.
 {
     if (IsConnected)
     {
         BotShowAndWelcome();
     }
 }
示例#18
0
        public HSlideObjectBundle(HPacket packet)
        {
            HPoint location = new HPoint(packet.ReadInt32(), packet.ReadInt32());
            HPoint target   = new HPoint(packet.ReadInt32(), packet.ReadInt32());

            Objects = new HSlideObject[packet.ReadInt32()];
            for (int i = 0; i < Objects.Length; i++)
            {
                int objectId = packet.ReadInt32();
                location.Z = double.Parse(packet.ReadUTF8(), CultureInfo.InvariantCulture);
                target.Z   = double.Parse(packet.ReadUTF8(), CultureInfo.InvariantCulture);

                Objects[i] = new HSlideObject(objectId, location, target);
            }

            Id = packet.ReadInt32();

            if (packet.ReadableBytes > 0)
            {
                HMoveType type = (HMoveType)packet.ReadInt32();

                int entityIndex = packet.ReadInt32();
                location.Z = double.Parse(packet.ReadUTF8(), CultureInfo.InvariantCulture);
                target.Z   = double.Parse(packet.ReadUTF8(), CultureInfo.InvariantCulture);

                Entity = new HSlideObject(entityIndex, location, target, type);
            }
        }
示例#19
0
        public override void WriteTo(HPacket packet)
        {
            packet.Write(Id);
            packet.Write(CatalogType);
            packet.Write(LayoutCode);

            packet.Write(Images.Length);
            foreach (string image in Images)
            {
                packet.Write(image);
            }

            packet.Write(Texts.Length);
            foreach (string text in Texts)
            {
                packet.Write(text);
            }

            packet.Write(Offers.Length);
            foreach (HCatalogOffer offer in Offers)
            {
                offer.WriteTo(packet);
            }

            packet.Write(OfferId);
            packet.Write(AcceptSeasonCurrencyAsCredits);

            // TODO: ????????????????????
            // IsFrontPage??
        }
示例#20
0
 public virtual void OnDoubleClick(HPacket packet)
 {
     if (DisableEventHandlers == false)
     {
         try { OnDoubleClickEvent.Invoke(this, packet); } catch { }; //Invoke event handler
     }
 }
示例#21
0
        public HFloorItem(HPacket packet)
        {
            Id     = packet.ReadInt32();
            TypeId = packet.ReadInt32();

            var tile = new HPoint(packet.ReadInt32(), packet.ReadInt32());

            Facing = (HDirection)packet.ReadInt32();

            tile.Z = double.Parse(packet.ReadUTF8(), CultureInfo.InvariantCulture);
            Tile   = tile;

            var loc1 = packet.ReadUTF8();
            var loc3 = packet.ReadInt32();

            Category = packet.ReadInt32();
            Stuff    = ReadData(packet, Category);

            var loc4 = packet.ReadInt32();
            var loc5 = packet.ReadInt32();

            OwnerId = packet.ReadInt32();
            if (TypeId < 0)
            {
                var loc6 = packet.ReadUTF8();
            }
        }
示例#22
0
        public HEntity(HPacket packet)
            : base(packet)
        {
            Id       = packet.ReadInt32();
            Name     = packet.ReadUTF8();
            Motto    = packet.ReadUTF8();
            FigureId = packet.ReadUTF8();
            Index    = packet.ReadInt32();

            Tile = new HPoint(packet.ReadInt32(), packet.ReadInt32(),
                              double.Parse(packet.ReadUTF8(), CultureInfo.InvariantCulture));

            Remnants.Enqueue(packet.ReadInt32());
            EntityType = packet.ReadInt32();

            switch (EntityType)
            {
            case 1:
            {
                Gender = (HGender)packet.ReadUTF8().ToLower()[0];
                Remnants.Enqueue(packet.ReadInt32());
                Remnants.Enqueue(packet.ReadInt32());
                FavoriteGroup = packet.ReadUTF8();
                Remnants.Enqueue(packet.ReadUTF8());
                Remnants.Enqueue(packet.ReadInt32());
                Remnants.Enqueue(packet.ReadBoolean());
                break;
            }

            case 2:
            {
                Remnants.Enqueue(packet.ReadInt32());
                Remnants.Enqueue(packet.ReadInt32());
                Remnants.Enqueue(packet.ReadUTF8());
                Remnants.Enqueue(packet.ReadInt32());
                Remnants.Enqueue(packet.ReadBoolean());
                Remnants.Enqueue(packet.ReadBoolean());
                Remnants.Enqueue(packet.ReadBoolean());
                Remnants.Enqueue(packet.ReadBoolean());
                Remnants.Enqueue(packet.ReadBoolean());
                Remnants.Enqueue(packet.ReadBoolean());
                Remnants.Enqueue(packet.ReadInt32());
                Remnants.Enqueue(packet.ReadUTF8());
                break;
            }

            case 4:
            {
                Remnants.Enqueue(packet.ReadUTF8());
                Remnants.Enqueue(packet.ReadInt32());
                Remnants.Enqueue(packet.ReadUTF8());
                for (int j = packet.ReadInt32(); j > 0; j--)
                {
                    Remnants.Enqueue(packet.ReadUInt16());
                }
                break;
            }
            }
        }
示例#23
0
        public HWallItem(HPacket packet)
        {
            Id                  = int.Parse(packet.ReadUTF8());
            TypeId              = packet.ReadInt32();
            Location            = packet.ReadUTF8();
            Data                = packet.ReadUTF8();
            SecondsToExpiration = packet.ReadInt32();
            UsagePolicy         = packet.ReadInt32();
            OwnerId             = packet.ReadInt32();

            if (float.TryParse(Data, out float fResult))
            {
                State = int.Parse(Data);
            }

            string[] locations = Location.Split(' ');
            if (Location.IndexOf(":") == 0 && locations.Length >= 3) // False
            {
                Placement = locations[2];

                if (locations[0].Length <= 3 || locations[1].Length <= 2)
                {
                    return;
                }
                string firstLoc  = locations[0].Substring(3);
                string secondLoc = locations[1].Substring(2);

                locations = firstLoc.Split(',');
                if (locations.Length >= 2)
                {
                    Global    = new HPoint(int.Parse(locations[0]), int.Parse(locations[1]));
                    locations = secondLoc.Split(',');

                    if (locations.Length >= 2)
                    {
                        Local = new HPoint(int.Parse(locations[0]), int.Parse(locations[1]));
                    }
                }
            }
            else if (locations.Length >= 2) // True
            {
                Placement = locations[0];
                if (Placement == "rightwall" || Placement == "frontwall")
                {
                    Placement = "r";
                }
                else
                {
                    Placement = "l";
                }

                string[] coords = locations[1].Split(',');
                if (coords.Length >= 3)
                {
                    Y = float.Parse(coords[0]);
                    Z = float.Parse(coords[1]);
                }
            }
        }
示例#24
0
        public static HCatalogNode Parse(HPacket packet)
        {
            var    root = new HCatalogNode(packet);
            bool   newAdditionsAvailable = packet.ReadBoolean();
            string catalogType           = packet.ReadUTF8();

            return(root);
        }
示例#25
0
 public Task <int> SendPacketAsync(string signature)
 {
     if (OutFormat == null)
     {
         throw new NullReferenceException("Outgoing format cannot be null.");
     }
     return(SendAsync(HPacket.ToBytes(OutFormat, signature)));
 }
示例#26
0
        public override void WriteTo(HPacket packet)
        {
            packet.Write((int)Remnants.Dequeue());

            string unknown1 = (string)Remnants.Dequeue();

            packet.Write(unknown1);
        }
示例#27
0
        public HData(HPacket packet)
        {
            _remnantQueue = new Dictionary <int, object>();

            PacketId = packet.Id;
            Format   = packet.Format;
            Remnants = new Queue <object>();
        }
示例#28
0
        /// <summary>Gets a histogram of the specified channel. The histogram contains 28 bins each holding the number of pixels that occurred within that bin's range of color values. So bin 0 contains the number of red pixels that were between 16 and 23 in value. The value returned in each bin is the number of pixels in that bin divided by the total number of pixels multiplied 256 and capped at 255.</summary>
        public HPacket GetHistogram(Channel channel)
        {
            HPacketReader rdr = new HPacketReader();

            HPacket hpak = _c.SendCommandGetPacket(rdr, "GH", (byte)channel);

            return(hpak);
        }
示例#29
0
        public static IEnumerable <HEntityAction> Parse(HPacket packet)
        {
            int entityActionCount = packet.ReadInt32();

            for (int i = 0; i < entityActionCount; i++)
            {
                yield return(new HEntityAction(packet));
            }
        }
示例#30
0
        public virtual void OnPacketIntercept(HPacket packet)
        {
            int    stringifiedInteceptionDataLength = packet.ReadInt32();
            string stringifiedInterceptionData      = Encoding.GetEncoding("latin1").GetString(packet.ReadBytes(stringifiedInteceptionDataLength));

            var dataInterceptedArgs = new DataInterceptedEventArgs(stringifiedInterceptionData);

            OnDataIntercept(dataInterceptedArgs);
        }