blob: bb172626eafcf7ccc00c512b85d15985d139db60 [file] [log] [blame] [raw]
using System;
using System.Net;
using System.Windows.Forms;
namespace RemoteView.PageHandlers
{
// This class is responsable for generaring all the HTML and javascript the the application homepage
class HomePageHandler : PageHandler
{
// screen devices list
private Screen[] screens = Screen.AllScreens;
/// <summary>
/// Generate the HTML and javascript needed for this the homepage
/// </summary>
/// <param name="response">not used</param>
/// <param name="uri">raw URI tokenized by '/'</param>
/// <returns>HTML page + javascript</returns>
public override byte[] handleRequest(HttpListenerResponse response, String[] uri)
{
// basic html, including head tags
String staticPage = "<html><head><title>Desktop view</title></head><body>";
// list amount of screen devices
staticPage += "<p>";
for (int i = 0; i < screens.Length; i++)
{
staticPage += "| <a href=\"/home/" + i + "\">Screen:" + i + "</a>";
}
staticPage += "</p>";
// display current screen on image
// if no parameter for screen, default to 0
int screen = getRequestedScreenDevice(uri, screens);
staticPage += "<img id=\"image\" name=\"image\" src=\"/screen/" + screen + "\">";
// script for handling clicks/dblclicks
// page /script/ is called for handling clicks
staticPage += "<script>" +
"image.addEventListener('contextmenu', function(e){ handleInput('r',e); });" +
"image.addEventListener('click', function(e){ handleInput('l',e); });" +
"function handleInput(c, e) { " +
"e.stopPropagation();" +
"e.preventDefault();" +
"px = e.offsetX ? e.offsetX :e.pageX-document.getElementById(\"image\").offsetLeft;" +
"py = e.offsetY ? e.offsetY :e.pageY-document.getElementById(\"image\").offsetTop;" +
"window.location='/click/" + screen + "/' + c + '/' + py + '/' + px;"
+ "}" +
"</script>";
// closing body and html tags
staticPage += "</body></html>";
return System.Text.Encoding.UTF8.GetBytes(staticPage);
}
}
}