public static void ConnectionInit(string host, int port = 9933) { Connection = new ConnectionToRouter(host, port, Name); Connection.AddHandler("message", CallMatcher); Connection.AddHandler("get_uptime", GetUptime); Connection.AddHandler("send_matchers", (c, m) => { SetUpMatchers(); }); Connection.AddHandler("rehash", (c, m) => { Config.Load(); }); SetUpMatchers(); }
static void Main(string[] args) { CultureInfo.DefaultThreadCurrentCulture = CultureInfo.GetCultureInfo("en-US"); Config.Load(); IrcManager.OnMessage += IrcManager_OnMessage; IrcManager.OnNotice += IrcManager_OnNotice; IrcManager.OnJoin += IrcManager_OnJoin; IrcManager.OnModeChange += IrcManager_OnModeChange; var options = Directory.GetFiles("./servers", "*.json"); foreach (var file in options) { try { var conn = ConnectionOptions.FromFile(file); IrcManager.Connect(conn); Console.WriteLine("Connected to {0}:{1} from file \"{2}\"", conn.Server, conn.Port, file); } catch (Exception ex) { Console.WriteLine("Exception while loading connection options from \"{0}\"", file); Console.WriteLine(ex); } } string host = "localhost"; int port = 9933; if (args.Any(a => !a.StartsWith("--"))) { host = args.First(a => !a.StartsWith("--")); if (host.Contains(':')) { var parts = host.Split(':'); host = parts[0]; port = int.Parse(parts[1]); } } Connection = new ConnectionToRouter(host, port, "irc"); Connection.AddHandler("add_matcher", AddMatcher); Connection.AddHandler("irc_send", SendMessage); Connection.AddHandler("irc_notice", SendNotice); Connection.AddHandler("clear_matchers", ClearMatchers); Connection.AddHandler("get_source", GetSource); Connection.AddHandler("set_mode", SetMode); Connection.AddHandler("set_mode_cs", SetModeChanserv); Connection.AddHandler("get_mode", GetMode); Connection.AddHandler("has_user", HasUser); Connection.AddHandler("get_users", GetUsers); Connection.AddHandler("get_users_noreg", GetUsersNoReg); Connection.AddHandler("is_registered", IsRegistered); Connection.AddHandler("get_ptoken", MakePermanent); foreach (string module in GetModules()) { Connection.SendMessage(new byte[0], "send_matchers", module); } Task.Factory.StartNew(delegate { Thread.Sleep(30000); while (true) { while (!Config.GetValue <bool>("debug.threads")) { Thread.Sleep(1000); } while (Config.GetValue <bool>("debug.threads")) { while (!IrcManager.Clients.Any(c => c.Socket.Connected)) { Thread.Sleep(100); } int num = System.Diagnostics.Process.GetCurrentProcess().Threads.Count; IrcManager.Clients.First().SendMessage(string.Format("{0} active threads", num), "NUL"); if (num > 10) { Thread.Sleep(1000); continue; } Thread.Sleep(5000); } } }); while (true) { if (args.Any() && args[0] == "--daemon") { Thread.Sleep(int.MaxValue); } string str = Console.ReadLine(); if (str == "q") { Connection.End(); } else if (str == "break") { System.Diagnostics.Debugger.Break(); } //else if(str.StartsWith("say")) //{ // Client.SendMessage(string.Join(" ", str.Split(' ').Skip(2)), str.Split(' ')[1]); //} //else //{ // Client.JoinChannel(str); //} } }