public static void EventMainLoop() { EventConsumer ec = null; try { ec = new EventConsumer("CUSTOM", "sofia::register_attempt", 100); ec.bind("SHUTDOWN", String.Empty); ec.bind("HEARTBEAT", String.Empty); while (Running) { var evt = ec.pop(0, 0); if (evt == null) { continue; } var en = evt.InternalEvent.GetValueOfHeader("Event-Name"); if (en == "CUSTOM") { en = evt.InternalEvent.GetValueOfHeader("Event-SubClass"); } switch (en) { case @"sofia::register_attempt": { var iev = evt.InternalEvent; var ar = iev.GetValueOfHeader("auth-result"); // get the value of the result to see if it's the case we want var ip = iev.GetValueOfHeader("network-ip"); // and the ip address the register came from if (ar == "FORBIDDEN") { BanTracker.TrackFailure(ip); } } break; case "SHUTDOWN": Log.WriteLine(LogLevel.Critical, "FTB: Processing Shutdown event"); Running = false; break; case "HEARTBEAT": BanTracker.CleanUp(); break; default: break; } } } catch (Exception exx) { Log.WriteLine(LogLevel.Critical, "FailToBan -- Exception in event loop {0}", exx.Message); } finally { if (ec != null) { ec.Dispose(); } _eventThread = null; } }
public static void Startup() { BanTracker.Startup(); EventLoop.StartEvents(); }