Beispiel #1
0
        public virtual void OnInfoRequest(HPacket packet)
        {
            var infoResponsePacket = new EvaWirePacket(EXTENSION_INFO);

            infoResponsePacket.Write(ModuleAtt?.Title ?? ModuleAssemblyName.Name); // Title
            infoResponsePacket.Write(ModuleAtt?.Author ?? string.Empty);           // Author
            infoResponsePacket.Write(ModuleAssemblyName.Version.ToString());       // Version
            infoResponsePacket.Write(ModuleAtt?.Description ?? string.Empty);
            infoResponsePacket.Write(ModuleAtt.UtilizingOnDoubleClick);            // UtilizingOnDoubleClick

            infoResponsePacket.Write(false);                                       // IsInstalledExtension
            infoResponsePacket.Write(string.Empty);                                // FileName
            infoResponsePacket.Write(string.Empty);                                // Cookie

            infoResponsePacket.Write(ModuleAtt.LeaveButtonVisible);                // LeaveButtonVisible
            infoResponsePacket.Write(false);                                       // DeleteButtonVisible

            _installer.SendPacketAsync(infoResponsePacket);
        }
Beispiel #2
0
        /// <summary>
        /// Converts the alert to a packet.
        /// </summary>
        /// <param name="header">The clientside alert header.</param>
        public HPacket ToPacket(ushort header)
        {
            EvaWirePacket packet = new EvaWirePacket(header, "HAlerts_custom");

            Dictionary <string, string> alertParams = new Dictionary <string, string>(6);

            if (Title != null)
            {
                alertParams.Add("title", Title);
            }
            if (Message != null)
            {
                alertParams.Add("message", Message);
            }

            alertParams.Add("display", (Type == HabboAlertType.Bubble ? "BUBBLE" : "POP_UP"));

            if (Url != null)
            {
                alertParams.Add("linkUrl", Url);
            }
            if (Image != null)
            {
                alertParams.Add("image", Image);
            }
            if (UrlTitle != null)
            {
                alertParams.Add("linkTitle", UrlTitle);
            }

            packet.Write(alertParams.Count);
            foreach (var(key, value) in alertParams)
            {
                packet.Write(key);
                packet.Write(value);
            }
            return(packet);
        }
Beispiel #3
0
 public Task <int> SendToServerAsync(ushort id, params object[] values)
 {
     return(SendToServerAsync(EvaWirePacket.Construct(id, values)));
 }
Beispiel #4
0
 public Task <int> SendPacketAsync(string signature)
 {
     return(SendAsync(EvaWirePacket.ToBytes(signature)));
 }
Beispiel #5
0
            private void HandleData(DataInterceptedEventArgs e)
            {
                string identifier = e.Timestamp.Ticks.ToString();

                identifier += e.IsOutgoing;
                identifier += e.Step;
                try
                {
                    var interceptedData = new EvaWirePacket(1);
                    interceptedData.Write(identifier);

                    interceptedData.Write(e.Step);
                    interceptedData.Write(e.IsOutgoing);
                    interceptedData.Write(e.Packet.Format.Name);
                    interceptedData.Write(e.IsContinuable && !e.HasContinued);

                    interceptedData.Write(e.GetOriginalData().Length);
                    interceptedData.Write(e.GetOriginalData());

                    interceptedData.Write(e.IsOriginal);
                    if (!e.IsOriginal)
                    {
                        byte[] curPacketData = e.Packet.ToBytes();
                        interceptedData.Write(curPacketData.Length);
                        interceptedData.Write(curPacketData);
                    }

                    _module.DataAwaiters.Add(identifier, new TaskCompletionSource <HPacket>());
                    _module.Node.SendPacketAsync(interceptedData);

                    HPacket handledDataPacket = _module.DataAwaiters[identifier].Task.Result;
                    if (handledDataPacket == null)
                    {
                        return;
                    }
                    // This packet contains the identifier at the start, although we do not read it here.

                    bool isContinuing = handledDataPacket.ReadBoolean();
                    if (isContinuing)
                    {
                        _module.DataAwaiters[identifier] = new TaskCompletionSource <HPacket>();

                        bool wasRelayed = handledDataPacket.ReadBoolean();
                        e.Continue(wasRelayed);

                        if (wasRelayed)
                        {
                            return;             // We have nothing else to do here, packet has already been sent/relayed.
                        }
                        handledDataPacket = _module.DataAwaiters[identifier].Task.Result;
                        isContinuing      = handledDataPacket.ReadBoolean(); // We can ignore this one.
                    }

                    int    newPacketLength = handledDataPacket.ReadInt32();
                    byte[] newPacketData   = handledDataPacket.ReadBytes(newPacketLength);

                    e.Packet    = e.Packet.Format.CreatePacket(newPacketData);
                    e.IsBlocked = handledDataPacket.ReadBoolean();
                }
                finally { _module.DataAwaiters.Remove(identifier); }
            }