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> </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()); }
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); } }
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("<" + roller + "> " + 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("<", "<").Replace(">", ">"); 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); }
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;\"> </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> </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("<", "<").Replace(">", ">")); } 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("<", "<").Replace(">", ">")); } 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()); }
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(" * "); } b.AppendFormat("<a href=\"/calendar//{0}\">{0}</a> \r\n", r); } else { if (fFirstNonYear) { fFirstNonYear = false; b.AppendLine("<br><br>"); } else { b.Append(" * "); } 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()); }