Example #1
0
        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();
        }
Example #2
0
        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);
                //}
            }
        }