Now that LQL-Sharp has been released I thought I should put together a quick little demonstration of just how cool it is.
I have created a extremely simple GUI control that can modify the rate and ceiling parameters of a HTB class. This control should really subclass Gtk.Widget but it serves its purpose as is.
using System; using Gtk; using LQL; class HTBControl { private LQL.ClassHTB klass; private LQL.Con con; private Gtk.SpinButton rateSpin; private Gtk.SpinButton ceilSpin; public HTBControl(LQL.ClassHTB klass, LQL.Con con) { this.klass = klass; this.con = con; Gtk.Window myWin = new Gtk.Window("TC GTK+"); myWin.DeleteEvent += new DeleteEventHandler(WindowDelete); Gtk.VBox vbox = new Gtk.VBox(false, 3); Gtk.HBox hbox1 = new Gtk.HBox(false, 2); hbox1.Add(new Gtk.Label("Rate (bytes/sec): ")); this.rateSpin = new Gtk.SpinButton(0, 10000000, 1); hbox1.Add(this.rateSpin); vbox.Add(hbox1); Gtk.HBox hbox2 = new Gtk.HBox(false, 2); hbox2.Add(new Gtk.Label("Ceiling (bytes/sec): ")); this.ceilSpin = new Gtk.SpinButton(0, 10000000, 1); hbox2.Add(this.ceilSpin); vbox.Add(hbox2); Gtk.Button modifyButton = new Gtk.Button("Modify"); modifyButton.Clicked += new EventHandler(Modify); vbox.Add(modifyButton); rateSpin.Value = this.klass.Rate; ceilSpin.Value = this.klass.Ceiling; myWin.Add(vbox); myWin.ShowAll(); } static void WindowDelete(object o, DeleteEventArgs args) { Gtk.Application.Quit(); args.RetVal = true; } void Modify(object o, EventArgs args) { this.klass.Rate = (uint) this.rateSpin.Value; this.klass.Ceiling = (uint) this.ceilSpin.Value; this.klass.Modify(this.con); } }
using System; using Gtk; using LQL; class MainClass { public static void Main(string[] args) { Application.Init(); LQL.Con con = new LQL.Con(); LQL.Interface nIf = con.FindInterfaceByName("eth0"); GLib.List classes = con.ListClasses(nIf); foreach (LQL.Class klass in classes) { if (klass is LQL.ClassHTB) { new HTBControl((LQL.ClassHTB) klass, con); } } Application.Run(); } }