Created
December 24, 2010 14:42
-
-
Save follesoe/754299 to your computer and use it in GitHub Desktop.
Using protocol handlers as a ultra thin layer of integration
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// <summary> | |
/// Starts the Http Listener on a background thread. | |
/// </summary> | |
private void StartHttpListener() | |
{ | |
if (HttpListener.IsSupported) | |
{ | |
try | |
{ | |
//Creates a HttpListener with two urls for RSS and HTML. | |
HttpListener listener = new HttpListener(); | |
listener.Prefixes.Add("http://localhost:8080/taskfeed/"); | |
listener.Prefixes.Add("http://localhost:8080/taskhtml/"); | |
listener.Start(); | |
while (true) | |
{ | |
HttpListenerContext context = listener.GetContext(); | |
HttpListenerRequest request = context.Request; | |
HttpListenerResponse response = context.Response; | |
//Checks if the user is requesting the HTML page or the RSS feed. | |
if (context.Request.RawUrl.EndsWith("feed")) | |
{ | |
//Renders the RSS feed. | |
context.Response.ContentType = "application/xml"; | |
XmlTextWriter xmlWriter = new XmlTextWriter(context.Response.OutputStream, Encoding.UTF8); | |
xmlWriter.WriteStartDocument(); | |
xmlWriter.WriteStartElement("rss"); | |
xmlWriter.WriteAttributeString("version", "2.0"); | |
xmlWriter.WriteStartElement("channel"); | |
xmlWriter.WriteElementString("title", "HelpDesk Application - Open Requests"); | |
xmlWriter.WriteElementString("description", "An RSS feed of open HelpDesk Requests. Can be used by gadgets, feed readers etc."); | |
xmlWriter.WriteElementString("link", "http://localhost:8080/taskhtml/"); | |
foreach (HelpDeskRequest hr in logic.RequestDatabase) | |
{ | |
if (!hr.Closed) | |
{ | |
xmlWriter.WriteStartElement("item"); | |
xmlWriter.WriteElementString("guid", hr.ID.ToString()); | |
xmlWriter.WriteElementString("title", hr.Subject); | |
xmlWriter.WriteElementString("link", "helpdesk://open?id=" + hr.ID.ToString()); | |
xmlWriter.WriteElementString("pubDate", hr.Date.ToString("r")); | |
xmlWriter.WriteEndElement(); | |
} | |
} | |
xmlWriter.WriteEndElement(); | |
xmlWriter.WriteEndElement(); | |
xmlWriter.WriteEndDocument(); | |
xmlWriter.Flush(); | |
xmlWriter.Close(); | |
} | |
else | |
{ | |
//Renders the HTML page. | |
context.Response.ContentType = "text/html"; | |
StringBuilder sb = new StringBuilder(); | |
sb.Append("<html><head><title>HelpDesk Application</title>"); | |
sb.Append("<link rel='alternate' type='application/rss+xml' title='HelpDesk Request Feed' href='taskfeed' />"); | |
sb.Append("<style>body { font-family: verdana; }</style></head><body>"); | |
sb.Append("<h1 style='color: red;'>Open HelpDesk Requests</h1><ul>"); | |
foreach (HelpDeskRequest openItem in logic.RequestDatabase.FindAll(delegate(HelpDeskRequest hr) { return !hr.Closed; })) | |
{ | |
sb.Append(string.Format("<li><a href='helpdesk://open?id={0}'>{1}</a></li>", openItem.ID, openItem.Subject)); | |
} | |
sb.Append("</ul><h1 style='color: green;'>Closed HelpDesk Requests</h1><ul>"); | |
foreach (HelpDeskRequest closedItem in logic.RequestDatabase.FindAll(delegate(HelpDeskRequest hr) { return hr.Closed; })) | |
{ | |
sb.Append(string.Format("<li><a href='helpdesk://open?id={0}'>{1}</a></li>", closedItem.ID, closedItem.Subject)); | |
} | |
sb.Append("</ul></body></html>"); | |
StreamWriter streamWriter = new StreamWriter(response.OutputStream); | |
streamWriter.WriteLine(sb.ToString()); | |
streamWriter.Flush(); | |
streamWriter.Dispose(); | |
} | |
response.Close(); | |
} | |
} | |
catch (Exception) | |
{ | |
MessageBox.Show("Unable to start HttpHandler. Are you running this application as an administrator?", "Running as administrator?", MessageBoxButtons.OK, MessageBoxIcon.Error); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment