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); }
/// <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); }
public Task <int> SendToServerAsync(ushort id, params object[] values) { return(SendToServerAsync(EvaWirePacket.Construct(id, values))); }
public Task <int> SendPacketAsync(string signature) { return(SendAsync(EvaWirePacket.ToBytes(signature))); }
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); } }