using System; using System.Collections.Generic; using System.Linq; using System.Text; using Crestron.SimplSharp; using Crestron.SimplSharp.CrestronIO; using Crestron.SimplSharp.Net.Http; using PepperDash.Core; using PepperDash.Essentials.Core; namespace PepperDash.Essentials { public class HttpLogoServer { /// /// /// HttpServer Server; /// /// /// string FileDirectory; /// /// /// public static Dictionary ExtensionContentTypes; /// /// /// /// /// public HttpLogoServer(int port, string directory) { ExtensionContentTypes = new Dictionary { //{ ".css", "text/css" }, //{ ".htm", "text/html" }, //{ ".html", "text/html" }, { ".jpg", "image/jpeg" }, { ".jpeg", "image/jpeg" }, //{ ".js", "application/javascript" }, //{ ".json", "application/json" }, //{ ".map", "application/x-navimap" }, { ".pdf", "application.pdf" }, { ".png", "image/png" }, //{ ".txt", "text/plain" }, }; Server = new HttpServer(); Server.Port = port; FileDirectory = directory; Server.OnHttpRequest += new OnHttpRequestHandler(Server_OnHttpRequest); Server.Open(); CrestronEnvironment.ProgramStatusEventHandler += new ProgramStatusEventHandler(CrestronEnvironment_ProgramStatusEventHandler); } /// /// /// void Server_OnHttpRequest(object sender, OnHttpRequestArgs args) { var path = args.Request.Path; Debug.Console(2, "HTTP Request with path: '{0}'", args.Request.Path); if (File.Exists(FileDirectory + path)) { string filePath = path.Replace('/', '\\'); string localPath = string.Format(@"{0}{1}", FileDirectory, filePath); Debug.Console(2, "HTTP Logo Server attempting to find file: '{0}'", localPath); if (File.Exists(localPath)) { args.Response.Header.ContentType = GetContentType(new FileInfo(localPath).Extension); args.Response.ContentStream = new FileStream(localPath, FileMode.Open, FileAccess.Read); } else { Debug.Console(2, "HTTP Logo Server Cannot find file '{0}'", localPath); args.Response.ContentString = string.Format("Not found: '{0}'", filePath); args.Response.Code = 404; } } else { Debug.Console(2, "HTTP Logo Server: '{0}' does not exist", FileDirectory + path); } } /// /// /// void CrestronEnvironment_ProgramStatusEventHandler(eProgramStatusEventType programEventType) { if (programEventType == eProgramStatusEventType.Stopping) Server.Close(); } /// /// /// /// /// public static string GetContentType(string extension) { string type; if (ExtensionContentTypes.ContainsKey(extension)) type = ExtensionContentTypes[extension]; else type = "text/plain"; return type; } } }