Esempio n. 1
0
        void FormatMetaAsHtml(string args, GameBot.Bot.NoteMeta n)
        {
            var bot     = new GameBot.Bot("roller", "roller");
            var results = bot.FindNotes(args, n);

            StringBuilder b = new StringBuilder();

            b.AppendLine("<html>");
            b.AppendFormat("<head><title>{0}</title></head>", n.Title);
            b.AppendLine("<body>");
            b.AppendLine("<style>tr {vertical-align:text-top;} </style>");
            b.AppendLine("<center>");
            b.AppendLine("<table style=\"font-family: arial, sans-serif; font-size:8pt; max-width:800px;\">");
            b.AppendFormat("<tr style=\"text-align:center\"><td colspan=\"2\"><h1>{0}<br><br></h1></td></tr>\r\n", n.Title);

            string personlast = "";

            foreach (var r in results)
            {
                var k = r.key;
                var v = r.val;

                string person, id;

                GameHost.Worker.Parse2Ex(k, out person, out id, "|");

                if (person == personlast)
                {
                    b.AppendFormat("<tr><td></td><td>{0}</td></tr>", v);
                }
                else
                {
                    // b.AppendLine("<tr><td>&nbsp;</td></tr>");
                    b.AppendFormat("<tr><td><a href=\"/who/@{0}\">{0}</a></td><td>{1}</td></tr>", person, v);
                }

                personlast = person;
            }

            if (n.whoPc != null && n.whoPc != "all" && n.Folder == "_who")
            {
                var x = GameBot.Bot.FormatDossier(n);
                b.AppendLine("<tr><td></td><td>");
                b.AppendLine(x.Replace(n.whoPc, "<br>"));
                b.AppendFormat("<br><br>Sheet: <a href=\"/sheet/{0}\">{0}</a>", n.whoPc);
                b.AppendLine("</td></tr>");
            }


            b.AppendLine("</table>");
            b.AppendLine("</center>");
            b.AppendLine("</body>");
            b.AppendLine("</html>");

            WriteRawOutput(b.ToString());
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            Console.WriteLine("Startup");

            HttpResponder.StartHttpListener();
            IrcServer.Start();

            if (args.Length == 1 && args[0] == "console")
            {
                fConsoleMode = true;

                new Worker().loadparty();

                GameBot.Bot b = new GameBot.Bot("roller", "roller");
                b.ConsoleLoop();
                return;
            }

            new Worker().loadparty();

            Thread botThread = new Thread(GameBot.Bot.Start);

            botThread.Start();

            System.Net.Sockets.TcpListener listener;

            listener = new TcpListener(IPAddress.Any, 6668);

            listener.Start();

            for (; ;)
            {
                TcpClient client = listener.AcceptTcpClient();

                Console.WriteLine("Accepting a connection");

                Thread t = new Thread(Program.DoWork);
                t.Start(client);
            }
        }
Esempio n. 3
0
        void ProcessHttpRequest(IAsyncResult result)
        {
            HttpListener listener = (HttpListener)result.AsyncState;

            // Call EndGetContext to complete the asynchronous operation.
            context  = listener.EndGetContext(result);
            request  = context.Request;
            response = context.Response;

            var url  = request.RawUrl;
            var host = request.UserHostName;

            Console.WriteLine(url);
            Console.WriteLine(host);

            url = Uri.UnescapeDataString(url);

            if (url.StartsWith("/bot/"))
            {
                string[] sp   = new string[] { ";" };
                var      cmd  = url.Substring(5);
                var      cmds = cmd.Split(sp, StringSplitOptions.RemoveEmptyEntries);

                var roller = "roller";
                var origin = "#gameroom";

                StringBuilder sb = new StringBuilder();
                foreach (var x in cmds)
                {
                    if (x.StartsWith("!"))
                    {
                        sb.AppendLine("&lt;" + roller + "&gt; " + x);
                        var bot = new GameBot.Bot(roller, x.StartsWith("!help") ? "#null" : origin);
                        bot.SendBufferToIrc("<WebRoller_" + roller + "> " + x);
                        sb.Append(bot.RunCmd(x));
                        sb.AppendLine("---");
                        bot = null;
                    }
                    else if (x.StartsWith("@"))
                    {
                        origin = "#" + x.Substring(1);
                    }
                    else
                    {
                        roller = x;
                    }
                }
                var res = sb.ToString();
                res = res.Replace("<", "&lt;").Replace(">", "&gt;");
                res = res.Replace("\n", "\n<br>");
                WriteSimpleOutput(res);
            }
            else if (url.StartsWith("/notes/"))
            {
                var args = url.Substring(7);
                if (args.Length > 0)
                {
                    FormatMetaAsHtml(args, GameBot.Bot.NoteTypeNote());
                }
            }
            else if (url.StartsWith("/todos/"))
            {
                var args = url.Substring(7);
                if (args.Length > 0)
                {
                    FormatMetaAsHtml(args, GameBot.Bot.NoteTypeTodo());
                }
            }
            else if (url.StartsWith("/who/"))
            {
                var args = url.Substring(5);
                if (args.Length > 0)
                {
                    FormatMetaAsHtml(args, GameBot.Bot.NoteTypeWho());
                }
            }
            else if (url == "/calendar")
            {
                FormatCalendarChoicesHtml();
            }
            else if (url.StartsWith("/calendar/"))
            {
                var args = url.Substring(10);
                if (args.Length > 0)
                {
                    FormatCalendarAsHtml(args);
                }
                else
                {
                    FormatCalendarChoicesHtml();
                }
            }
            else if (url.StartsWith("/sheet/"))
            {
                var pc = url.Substring(7);
                if (pc.Length > 0)
                {
                    FormatPcAsHtml(pc);
                }
                else
                {
                    WriteSimpleOutput("No PC specified");
                }
            }
            else if (host.StartsWith("sheet."))
            {
                var pc = url.Substring(1);
                if (pc.Length > 0)
                {
                    FormatPcAsHtml(pc);
                }
                else
                {
                    WriteSimpleOutput("No PC specified");
                }
            }
            else
            {
                WriteSimpleOutput("Unknown request.");
            }

            // start another one
            listener.BeginGetContext(new AsyncCallback(ProcessHttpRequest), listener);
        }
Esempio n. 4
0
        void FormatCalendarAsHtml(string args)
        {
            var bot     = new GameBot.Bot("roller", "roller");
            var results = bot.FindEvents(args);

            string yearlast   = "";
            string seasonlast = "";
            string weeklast   = "";
            string daylast    = "";
            string taglast    = "";

            StringBuilder b = new StringBuilder();

            b.AppendLine("<html>");
            b.AppendFormat("<head><title>Calendar</title></head>");
            b.AppendLine("<body>");
            b.AppendLine("<style>tr {vertical-align:text-top;} </style>");
            b.AppendLine("<center>");
            b.AppendLine("<table style=\"font-family: arial, sans-serif; font-size:8pt; max-width:800px;\">");

            if (results == null || results.Count == 0)
            {
                WriteSimpleOutput(String.Format("Events for '{0}' not found", args));
                return;
            }

            foreach (var p in results)
            {
                var    v = p.val;
                string date;
                string desc;
                string mm, dd, year;
                string tag, x;

                GameHost.Worker.Parse2(v, out date, out desc);
                GameHost.Worker.Parse3Ex(date, out mm, out dd, out year, "/");
                GameHost.Worker.Parse2Ex(desc, out tag, out x, ":");

                if (x == "")
                {
                    desc = tag;
                    tag  = "";
                }
                else
                {
                    desc = x;
                }

                int m = 0;
                int d = 0;
                Int32.TryParse(mm, out m);
                Int32.TryParse(dd, out d);

                if (m < 1 || m > 6)
                {
                    continue;
                }
                if (d < 1 || d > 56)
                {
                    continue;
                }
                if (m == 6 && d > 14)
                {
                    continue;
                }

                string season = seasons[m - 1];
                string week   = m == 6 ? hweeks[(d - 1) / 7] : weeks[(d - 1) / 7];

                if (yearlast != year)
                {
                    if (yearlast != "")
                    {
                        b.AppendLine("<tr><td style=\"width:3em;\">&nbsp;</td></tr>");
                    }
                    b.AppendFormat("<tr style=\"text-align:center\"><td colspan=\"3\"><h1><a href=\"/calendar//{0}\">{0}</a><br></h1></td></tr>\r\n", year);
                    seasonlast = "";
                }

                if (seasonlast != season)
                {
                    if (seasonlast != "")
                    {
                        b.AppendLine("<tr><td>&nbsp;</td></tr>");
                    }
                    b.AppendFormat("<tr style=\"text-align:center\"><td colspan=\"3\"><h2><a href=\"/calendar/{0}/[0-9]+/{1}\">{2} Season</a><br></h2></td></tr>\r\n", m, year, season);
                    weeklast = "";
                }

                if (weeklast != week)
                {
                    b.AppendFormat("<tr><td colspan=\"2\"><h3>{0} Week<br></h3></td></tr>\r\n", week);
                    daylast = "";
                    taglast = "";
                }

                string day = m + "/" + d;

                string dprint = (day == daylast) ? "" : day;

                if (dprint != "")
                {
                    dprint = String.Format("<a href=\"/calendar/{0}/\">{0}</a>", dprint);
                }

                if (tag == taglast)
                {
                    b.AppendFormat("<tr><td style=\"text-align:right\">{0}</td><td style=\"text-align:right\">*</td><td>{1}</td></tr>\r\n", dprint, desc.Replace("<", "&lt;").Replace(">", "&gt;"));
                }
                else
                {
                    b.AppendFormat("<tr><td style=\"text-align:right\">{0}</td><td style=\"text-align:right\"><a href=\"/calendar/{1}:\">{1}:</a></td><td>{2}</td></tr>\r\n", dprint, tag, desc.Replace("<", "&lt;").Replace(">", "&gt;"));
                }

                seasonlast = season;
                yearlast   = year;
                weeklast   = week;
                daylast    = day;
                taglast    = tag;
            }
            b.AppendLine("</table>");
            b.AppendLine("</center>");
            b.AppendLine("</body>");
            b.AppendLine("</html>");

            WriteRawOutput(b.ToString());
        }
Esempio n. 5
0
        void FormatCalendarChoicesHtml()
        {
            var bot     = new GameBot.Bot("roller", "roller");
            var results = bot.FindEvents(".");

            StringBuilder b = new StringBuilder();

            b.AppendLine("<html>");
            b.AppendFormat("<head><title>Calendar</title></head>");
            b.AppendLine("<body>");
            b.AppendLine("<center>");
            b.AppendLine("<div style=\"font-family: arial, sans-serif; font-size:8pt; max-width:800px;\">");
            b.AppendLine("<br>The following tags are in use in the events calendar:<br><br>");

            var dict = new Dictionary <string, int>();

            foreach (var r in results)
            {
                var v = r.val;

                string date;
                string desc;
                string mm, dd, year;
                string tag;
                string x;

                GameHost.Worker.Parse2(v, out date, out desc);
                GameHost.Worker.Parse3Ex(date, out mm, out dd, out year, "/");

                GameHost.Worker.Parse2Ex(desc, out tag, out x, ":");

                if (!dict.ContainsKey(year))
                {
                    dict[year] = 1;
                }

                if (tag.Length > 0 && x != null && x.Length > 0)
                {
                    if (!dict.ContainsKey(tag))
                    {
                        dict[tag] = 1;
                    }
                }
            }

            var tags = dict.Keys.ToList();

            tags.Sort();


            bool fFirst        = true;
            bool fFirstNonYear = true;

            foreach (var r in tags)
            {
                if (Char.IsDigit(r[0]))
                {
                    if (!fFirst)
                    {
                        b.Append("&nbsp; * &nbsp;");
                    }

                    b.AppendFormat("<a href=\"/calendar//{0}\">{0}</a> \r\n", r);
                }
                else
                {
                    if (fFirstNonYear)
                    {
                        fFirstNonYear = false;
                        b.AppendLine("<br><br>");
                    }
                    else
                    {
                        b.Append("&nbsp; * &nbsp;");
                    }

                    b.AppendFormat("<a href=\"/calendar/{0}:\">{0}</a> \r\n", r);
                }

                fFirst = false;
            }

            b.AppendLine("</div>");
            b.AppendLine("</center>");
            b.AppendLine("</body>");
            b.AppendLine("</html>");
            WriteRawOutput(b.ToString());
        }