public string RenderPage(RequestContext request) { if (File.Exists(Template)) { string page = ApplyTemplate(request, File.ReadAllText(Template)); //Global tags //Do page parts first. Scripting.ApplyTag("section:Header", File.ReadAllText("Data/templates/section.header.html"), ref page); Scripting.ApplyTag("section:Footer", File.ReadAllText("Data/templates/section.footer.html"), ref page); //Then persistance objects. foreach (var v in Persistance.API) { Scripting.ApplyTag("persistance:" + v.Key, v.Value.ToString(), ref page); } //User tags. Scripting.ApplyTag("user:Id", UserSession.CurrentSession.UserId.ToString(), ref page); Scripting.ApplyTag("user:Name", UserSession.CurrentSession.Username, ref page); Scripting.ApplyTag("session:Id", UserSession.CurrentSession.SessionId.ToString(), ref page); //Then the nav. Scripting.ApplyTag("nav", ApplyNav(), ref page); //End return page; } else { return Render(); } }
public ProcessingResult Process(RequestContext context) { // Init our vars. IRequest request = context.Request; IResponse response = context.Response; StreamWriter sw = new StreamWriter(response.Body); sw.AutoFlush = true; // Get the page. Page page; string uri = request.Uri.AbsolutePath.Remove(0, 1); // Check if it exists. if (!_pages.ContainsKey(uri)) { return ProcessingResult.Continue; } // Handle content. page = _pages[uri]; if ((request.Method == Method.Post || (request.Method == Method.Get && request.QueryString.Count > 0)) && page is IPostHandler) { sw.WriteLine(((IPostHandler)page).Post(request.Parameters)); } else { sw.Write(page.RenderPage(context)); } response.Add(new StringHeader("X-Content-Class", "Dynamic")); return ProcessingResult.SendResponse; }
public ProcessingResult Process(RequestContext context) { var ep = endpoints.Where(e => context.Request.Uri.AbsolutePath.StartsWith(e.Url)).ToList(); if (ep.Count == 0) throw new NotFoundException("Handler not found"); foreach (var endpoint in ep) endpoint.Process(context); context.Response.Status = HttpStatusCode.OK; context.Response.Connection.Type = ConnectionType.Close; return ProcessingResult.Abort; }
/// <summary> /// Process a request. /// </summary> /// <param name="context">Request information</param> /// <returns>What to do next.</returns> public ProcessingResult Process(RequestContext context) { // should add information about the file here. // Lets send the header. ResponseWriter generator = new ResponseWriter(); generator.SendHeaders(context.HttpContext, context.Response); // loop through file contents. BinaryWriter writer = new BinaryWriter(context.HttpContext.Stream); // Abort is needed since we've used the network // stream directly. Else the framework will try to use the // response object + network stream to send another response. return ProcessingResult.Abort; }
public ProcessingResult Process(RequestContext requestcontext) { IRequest request = requestcontext.Request; IResponse response = requestcontext.Response; IHttpContext context = requestcontext.HttpContext; if (SessionManager.Current.SessionId == null) { SessionManager.Create(); SessionManager.Current.SessionId = Guid.NewGuid().ToString().Replace("-", String.Empty); } if (request.Method == Method.Post && request.Parameters.Count == 3) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("({0}) <Web Interface> AJAX request from {1} {2} {3} {4}", DateTime.Now.ToString("hh:mm"), context.RemoteEndPoint, request.HttpVersion, request.Method, request.Uri.AbsoluteUri); Console.WriteLine("({0}) <Web Interface> AJAX parameters width={1}&height={2}&rooturl={3}", DateTime.Now.ToString("hh:mm"), request.Parameters.Get("width").Value, request.Parameters.Get("height").Value, request.Parameters.Get("rooturl").Value); Console.WriteLine("({0}) <Web Interface> AJAX session id {1}", DateTime.Now.ToString("hh:mm"), SessionManager.Current.SessionId); response.ContentType = new ContentTypeHeader("application/json"); response.Status = HttpStatusCode.OK; var stream = new MemoryStream(ASCIIEncoding.Default.GetBytes("{\"session\":\"" + SessionManager.Current.SessionId + "\",\"data\":\"Connected to server-side. Welcome to WCell.Terminal\"}")); response.ContentLength.Value = stream.Length; var generator = new ResponseWriter(); generator.SendHeaders(context, response); generator.SendBody(context, stream); Console.WriteLine("({0}) <Web Interface> AJAX response {1}", DateTime.Now.ToString("hh:mm"), "{\"session\":\"" + SessionManager.Current.SessionId + "\",\"data\":\"Connected to server-side. Welcome to WCell.Terminal\"}"); return ProcessingResult.Abort; } else { if (context.IsSecure) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("({0}) <Web Interface> Secure HTTP request from {1} {2} {3} {4}", DateTime.Now.ToString("hh:mm"), context.RemoteEndPoint, request.HttpVersion, request.Method, request.Uri.AbsoluteUri); } else { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("({0}) <Web Interface> HTTP request from {1} {2} {3} {4}", DateTime.Now.ToString("hh:mm"), context.RemoteEndPoint, request.HttpVersion, request.Method, request.Uri.AbsoluteUri); } } return ProcessingResult.Continue; }
public ProcessingResult Process(RequestContext context) { // Init our vars. IRequest request = context.Request; IResponse response = context.Response; // Get the page. byte[] resource; string uri = request.Uri.AbsolutePath.Remove(0, 1); // Check if it exists. if (!File.Exists("Data/static/" + uri)) { return ProcessingResult.Continue; } resource = File.ReadAllBytes("Data/static/" + uri); response.Add(new StringHeader("Cache-Control", "max-age=28800")); response.Add(new StringHeader("X-Content-Class", "Static")); response.Body.Write(resource, 0, resource.Length); response.ContentType = new ContentTypeHeader(MIMEAssistant.GetMIMEType("Data/static/" + uri)); return ProcessingResult.SendResponse; }
public ProcessingResult Process(RequestContext context) { IRequest request = context.Request; IResponse response = context.Response; var nancyRequest = ConvertRequestToNancyRequest(request); using (var nancyContext = engine.HandleRequest(nancyRequest)) { using (MemoryStream mstream = new MemoryStream()) { nancyContext.Response.Contents.Invoke(mstream); response.ContentType.Value = nancyContext.Response.ContentType; response.ContentLength.Value = mstream.Length; var generator = HttpFactory.Current.Get<ResponseWriter>(); generator.SendHeaders(context.HttpContext, response); generator.SendBody(context.HttpContext, mstream); } } return ProcessingResult.Abort; }
/// <summary> /// A request have arrived but not yet been processed yet. /// </summary> /// <param name="context">The context.</param> /// <remarks> /// Default implementation adds a <c>Date</c> header and <c>Server</c> header. /// </remarks> protected virtual void OnBeforeRequest(RequestContext context) { if (context.Request.ContentLength.Value > MaxContentSize) throw new HttpException(HttpStatusCode.RequestEntityTooLarge, "Too large body, limit is " + MaxContentSize); context.Response.Add(new DateHeader("Date", DateTime.UtcNow)); context.Response.Add(new StringHeader("Server", ServerName)); }
/// <summary> /// All server modules are about to be invoked. /// </summary> /// <param name="context">The context.</param> /// <remarks> /// Called when routers have been invoked but no modules yet. /// </remarks> protected virtual void OnBeforeModules(RequestContext context) { }
/// <summary> /// Called before anything else. /// </summary> /// <param name="context">The context.</param> /// <remarks> /// Looks after a <see cref="AuthorizationHeader"/> in the request and will /// use the <see cref="AuthenticationProvider"/> if found. /// </remarks> protected virtual void OnAuthentication(RequestContext context) { var authHeader = (AuthorizationHeader) context.Request.Headers[AuthorizationHeader.NAME]; if (authHeader != null) AuthenticationProvider.Authenticate(context.Request); }
private ProcessingResult HandleRequest(RequestEventArgs e) { var context = new RequestContext { HttpContext = e.Context, Request = e.Request, Response = e.Response }; OnAuthentication(context); OnBeforeRequest(context); PrepareRequest(this, e); if (e.Request.ContentLength.Value > 0) DecodeBody(e.Request); // Process routers. ProcessingResult result = ProcessRouters(context); if (ProcessResult(result, e)) _logger.Debug("Routers processed the request."); // process modules. result = ProcessModules(context); if (ProcessResult(result, e)) return result; RequestReceived(this, e); return ProcessingResult.Continue; }
public ProcessingResult Process(RequestContext context) { int intServerID = 0; MCServer s; string json; JObject jProps; if (context.Request.Uri.AbsoluteUri.Contains(@"/api/")) { //must be authenticated //what is the action? if (context.Request.Method == Method.Post && WebSession.Current.UserName == "admin") { String strResponse = ""; IParameterCollection param = context.Request.Parameters; switch (context.Request.Parameters["action"]) { case "log": //grabs lines from the log. int intStartID = Convert.ToInt32(context.Request.Parameters["start"]); int intNumRows = Convert.ToInt32(context.Request.Parameters["rows"]); int intServer = Convert.ToInt32(context.Request.Parameters["serverid"]); string strLevel = context.Request.Parameters["level"]; DataSet ds = Database.ReturnLogRows(intStartID, intNumRows, strLevel, intServer); strResponse = JsonConvert.SerializeObject(ds, Formatting.Indented); break; case "list": //List available servers strResponse = "{ \"servers\" : ["; foreach (KeyValuePair<int, MCServer> kvp in Core.Servers) { strResponse += "{ \"id\" : " + kvp.Value.ServerID + ", " + "\"title\" : \"" + kvp.Value.ServerTitle + "\", " + "\"ver\" : \"" + kvp.Value.ServerVersion + "\" } ,"; }; strResponse = strResponse.Remove(strResponse.Length - 1); strResponse += "]}"; break; case "status": //Get status of a server s = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])]; strResponse = "{ \"serverid\" : " + s.ServerID + "," + "\"status\" : \"" + s.Running + "\"," + "\"ram\" : " + s.GetMemory() + "," + "\"vm\" : " + s.GetVMemory() + "," + "\"restartneeded\" : \"" + s.RestartNeeded + "\"," + "\"restartwhenfree\" : \"" + s.RestartWhenFree + "\"," + "\"gamemode\" : \"" + s.GameMode + "\"," + "\"players\" : ["; if (s.Players.Count > 0) { foreach (KeyValuePair<string, Objects.Player> kvp in s.Players) { strResponse += " { \"name\": \"" + kvp.Value.Username + "\", \"level\": \"" + kvp.Value.Level + "\" },"; }; strResponse = strResponse.Remove(strResponse.Length - 1); } strResponse += "]}"; break; case "overviewer": //Maps a server s = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])]; string strRenderModes = ""; if (param["normal"] == "true") strRenderModes += "normal"; if (param["lighting"] == "true") { if (strRenderModes != "") strRenderModes += ","; strRenderModes += "lighting"; } if (param["night"] == "true") { if (strRenderModes != "") strRenderModes += ","; strRenderModes += "night"; } if (param["spawn"] == "true") { if (strRenderModes != "") strRenderModes += ","; strRenderModes += "spawn"; } if (param["cave"] == "true") { if (strRenderModes != "") strRenderModes += ","; strRenderModes += "cave"; } AddOns.Overviewer over = new AddOns.Overviewer(s, "rendermodes=" + strRenderModes); over.Start(); strResponse = "{ \"result\" : \"sent\" }"; break; case "c10t": //Images a server s = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])]; AddOns.c10t c10t = new AddOns.c10t(s, "night=" + param["night"] + "&mode=" + param["mode"]); c10t.Start(); strResponse = "{ \"result\" : \"sent\" }"; break; case "tectonicus": //Maps a server s = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])]; AddOns.Tectonicus tecton = new AddOns.Tectonicus(s, "lighting=" + param["lighting"] + "&night=" + param["night"] + "&delete=" + param["delete"]); tecton.Start(); strResponse = "{ \"result\" : \"sent\" }"; break; case "start": //Starts a server Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].Start(); strResponse = "{ \"result\" : \"sent\" }"; break; case "stop": //Stops a server Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].Stop(); strResponse = "{ \"result\" : \"sent\" }"; break; case "restart": //Restarts a server Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].Restart(); strResponse = "{ \"result\" : \"sent\" }"; break; case "delayed-restart": //Restarts a server after a specified time and warns players Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].DelayedRestart(Convert.ToInt32(param["delay"])); strResponse = "{ \"result\" : \"sent\" }"; break; case "restart-when-free": Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].RestartIfEmpty(); strResponse = "{ \"result\" : \"sent\" }"; break; case "command": //Sends literal command to a server Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].Send(context.Request.Parameters["message"]); strResponse = "{ \"result\" : \"sent\" }"; break; case "get-yams-settings": DataSet dsSettings = Database.ReturnSettings(); JsonConvert.SerializeObject(dsSettings, Formatting.Indented); break; case "save-yams-settings": //Settings update foreach (Parameter p in param) { if (p.Name != "action") Database.SaveSetting(p.Name, p.Value); } break; case "get-server-settings": //retrieve all server settings as JSON intServerID = Convert.ToInt32(param["serverid"]); strResponse = "{ \"serverid\" : " + intServerID + "," + "\"title\" : \"" + Database.GetSetting(intServerID, "ServerTitle") + "\"," + "\"optimisations\" : \"" + Database.GetSetting(intServerID, "ServerEnableOptimisations") + "\"," + "\"memory\" : \"" + Database.GetSetting(intServerID, "ServerAssignedMemory") + "\"," + "\"autostart\" : \"" + Database.GetSetting(intServerID, "ServerAutoStart") + "\"," + "\"type\" : \"" + Database.GetSetting(intServerID, "ServerType") + "\"," + "\"motd\" : \"" + Database.GetSetting("motd", "MC", intServerID) + "\""; strResponse += "}"; break; case "get-mc-settings": //retrieve all server settings as JSON intServerID = Convert.ToInt32(param["serverid"]); json = File.ReadAllText(YAMS.Core.RootFolder + @"\lib\properties.json"); jProps = JObject.Parse(json); strResponse = ""; foreach(JObject option in jProps["options"]) { strResponse += "<p><label for=\"" + (string)option["key"] + "\" title=\"" + (string)option["description"] + "\">" + (string)option["name"] + "</label>"; string strValue = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].GetProperty((string)option["key"]); switch ((string)option["type"]) { case "string": strResponse += "<input type=\"text\" name=\"" + (string)option["key"] + "\" value=\"" + strValue + "\" />"; break; case "boolean": strResponse += "<select name=\"" + (string)option["key"] + "\">"; strResponse += "<option value=\"true\""; if (strValue == "true") strResponse += " selected"; strResponse += ">True</option>"; strResponse += "<option value=\"false\""; if (strValue == "false") strResponse += " selected"; strResponse += ">False</option>"; strResponse += "</select>"; break; case "integer": strResponse += "<select name=\"" + (string)option["key"] + "\">"; int intValue = Convert.ToInt32(strValue); for (var i = Convert.ToInt32((string)option["min"]); i <= Convert.ToInt32((string)option["max"]); i++) { strResponse += "<option value=\"" + i.ToString() + "\""; if (intValue == i) strResponse += " selected"; strResponse += ">" + i.ToString() + "</option>"; } strResponse += "</select>"; break; case "array": strResponse += "<select name=\"" + (string)option["key"] + "\">"; string strValues = (string)option["values"]; string[] elements = strValues.Split(','); foreach (string values in elements) { string[] options = values.Split('|'); strResponse += "<option value=\"" + options[0] + "\""; if (strValue == options[0]) strResponse += " selected"; strResponse += ">" + options[1] + "</option>"; } strResponse += "</select>"; break; } strResponse += "</p>"; } break; case "save-server-settings": intServerID = Convert.ToInt32(param["serverid"]); Database.UpdateServer(intServerID, "ServerTitle", param["title"]); Database.UpdateServer(intServerID, "ServerType", param["type"]); Database.UpdateServer(intServerID, "ServerAssignedMemory", Convert.ToInt32(param["memory"])); if (param["optimisations"] == "true") Database.UpdateServer(intServerID, "ServerEnableOptimisations", true); else Database.UpdateServer(intServerID, "ServerEnableOptimisations", false); if (param["autostart"] == "true") Database.UpdateServer(intServerID, "ServerAutoStart", true); else Database.UpdateServer(intServerID, "ServerAutoStart", false); Database.SaveSetting(intServerID, "motd", param["message"]); //Save the server's MC settings MCServer thisServer = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])]; json = File.ReadAllText(YAMS.Core.RootFolder + @"\lib\properties.json"); jProps = JObject.Parse(json); strResponse = ""; foreach (JObject option in jProps["options"]) { thisServer.SaveProperty((string)option["key"], param[(string)option["key"]]); } if (thisServer.Running) thisServer.RestartIfEmpty(); break; case "get-config-file": List<string> listConfig = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].ReadConfig(param["file"]); strResponse = JsonConvert.SerializeObject(listConfig, Formatting.Indented); break; case "upload-world": var test = context.Request.Files["new-world"]; break; case "delete-world": bool bolRandomSeed = false; if (param["randomseed"] == "true") bolRandomSeed = true; Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].ClearWorld(bolRandomSeed); strResponse = "{ \"result\" : \"sent\" }"; break; case "about": Dictionary<string, string> dicAbout = new Dictionary<string, string> { { "dll" , FileVersionInfo.GetVersionInfo(Path.Combine(Core.RootFolder, "YAMS-Library.dll")).FileVersion }, { "svc" , FileVersionInfo.GetVersionInfo(Path.Combine(Core.RootFolder, "YAMS-Service.exe")).FileVersion }, { "gui" , FileVersionInfo.GetVersionInfo(Path.Combine(Core.RootFolder, "YAMS-Updater.exe")).FileVersion }, { "db" , Database.GetSetting("DBSchema", "YAMS") } }; strResponse = JsonConvert.SerializeObject(dicAbout, Formatting.Indented); break; case "installed-apps": Dictionary<string, string> dicApps = new Dictionary<string, string> { { "bukkit" , Database.GetSetting("BukkitInstalled", "YAMS") }, { "overviewer" , Database.GetSetting("OverviewerInstalled", "YAMS") }, { "c10t" , Database.GetSetting("C10tInstalled", "YAMS") }, { "biomeextractor" , Database.GetSetting("BiomeExtractorInstalled", "YAMS") }, { "tectonicus" , Database.GetSetting("TectonicusInstalled", "YAMS") }, { "nbtoolkit" , Database.GetSetting("NBToolkitInstalled", "YAMS") } }; strResponse = JsonConvert.SerializeObject(dicApps, Formatting.Indented); break; case "update-apps": Database.SaveSetting("OverviewerInstalled", param["overviewer"]); Database.SaveSetting("C10tInstalled", param["c10t"]); Database.SaveSetting("BiomeExtractorInstalled", param["biomeextractor"]); Database.SaveSetting("TectonicusInstalled", param["tectonicus"]); Database.SaveSetting("NBToolkitInstalled", param["nbtoolkit"]); Database.SaveSetting("BukkitInstalled", param["bukkit"]); strResponse = "done"; break; case "force-autoupdate": AutoUpdate.CheckUpdates(); break; default: return ProcessingResult.Abort; } context.Response.Reason = "Completed - YAMS"; context.Response.Connection.Type = ConnectionType.Close; byte[] buffer = Encoding.UTF8.GetBytes(strResponse); context.Response.Body.Write(buffer, 0, buffer.Length); } else { // not a post, so say bye bye! return ProcessingResult.Abort; } return ProcessingResult.SendResponse; } else if (context.Request.Uri.AbsoluteUri.Contains(@"/admin")) { if (WebSession.Current.UserName != "admin") { context.Response.Reason = "Completed - YAMS"; context.Response.Connection.Type = ConnectionType.Close; byte[] buffer = Encoding.UTF8.GetBytes(File.ReadAllText(YAMS.Core.RootFolder + @"\web\admin\login.html")); context.Response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } else { context.Response.Reason = "Completed - YAMS"; context.Response.Connection.Type = ConnectionType.Close; byte[] buffer = Encoding.UTF8.GetBytes(File.ReadAllText(YAMS.Core.RootFolder + @"\web\admin\index.html")); context.Response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } } else if (context.Request.Uri.AbsoluteUri.Contains(@"/login")) { //This is a login request, check it's legit string userName = context.Request.Form["strUsername"]; string password = context.Request.Form["strPassword"]; if (userName == "admin" && password == Database.GetSetting("AdminPassword", "YAMS")) { WebSession.Create(); WebSession.Current.UserName = "******"; context.Response.Redirect(@"/admin"); return ProcessingResult.SendResponse; } else { context.Response.Reason = "Completed - YAMS"; context.Response.Connection.Type = ConnectionType.Close; byte[] buffer = Encoding.UTF8.GetBytes(File.ReadAllText(YAMS.Core.RootFolder + @"\web\admin\login.html")); context.Response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } } else if (context.Request.Uri.AbsoluteUri.Equals(@"/")) { context.Response.Redirect(@"/admin"); return ProcessingResult.SendResponse; } else { return ProcessingResult.Abort; } }
protected virtual string ApplyTemplate(RequestContext request, string template) { return template; }
/// <summary> /// Process a request. /// </summary> /// <param name="context">Request information</param> /// <returns>What to do next.</returns> /// <exception cref="InternalServerException">Failed to find file extension</exception> /// <exception cref="ForbiddenException">Forbidden file type.</exception> public ProcessingResult Process(RequestContext context) { var processingResult = _fileModule.Process(context); if (CacheDuration > 0) context.Response.Add(new StringHeader("Cache-Control", "max-age=" + CacheDuration.ToString())); return processingResult; }
public ProcessingResult Process(RequestContext context) { IServableContent hit = null; content.TryGetValue(context.Request.Uri.AbsolutePath, out hit); var runner = hit as ActionRunner; if (runner != null) { var service = (JsonService)runner.Type.GetConstructor(Type.EmptyTypes).Invoke(null); string result = null; try { result = runner.Invoke(service, context.Request); } catch (Exception e) { Logger.ReportException("Failed to execute action in MBWeb: " + context.Request.Uri.AbsolutePath, e); throw; } var body = new MemoryStream(); var bytes = Encoding.UTF8.GetBytes(result); body.Write(bytes, 0, bytes.Length); context.Response.ContentLength.Value = body.Length; context.Response.Add(new ContentTypeHeader("application/json")); var generator = new ResponseWriter(); generator.SendHeaders(context.HttpContext, context.Response); generator.SendBody(context.HttpContext, body); return ProcessingResult.Abort; } EmbeddedContent embeddedContent = hit as EmbeddedContent; if (embeddedContent != null) { var actual = new MemoryStream(); using (var body = embeddedContent.Stream) { StreamReader reader = new StreamReader(body); var read = reader.ReadToEnd(); var bytes = Encoding.UTF8.GetBytes(read); actual.Write(bytes, 0, bytes.Length); context.Response.ContentLength.Value = bytes.Length; actual.Seek(0, SeekOrigin.Begin); } context.Response.Add(embeddedContent.ContentTypeHeader); var generator = new ResponseWriter(); generator.SendHeaders(context.HttpContext, context.Response); generator.SendBody(context.HttpContext, actual); return ProcessingResult.Abort; } // fake 404 for now var badRequest = new MemoryStream(Encoding.UTF8.GetBytes("Not Found : " + context.Request.Uri.AbsolutePath)); var rw = new ResponseWriter(); context.Response.ContentLength.Value = badRequest.Length; rw.SendHeaders(context.HttpContext, context.Response); rw.SendBody(context.HttpContext, badRequest); return ProcessingResult.Abort; }
public void Process(RequestContext context) { Application.Exit(); }
public ProcessingResult Process(RequestContext requestcontext) { IRequest request = requestcontext.Request; IResponse response = requestcontext.Response; IHttpContext context = requestcontext.HttpContext; if (request.Method == Method.Post) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("({0}) <Web Interface> AJAX request from {1} {2} {3} {4}", DateTime.Now.ToString("hh:mm"), context.RemoteEndPoint, request.HttpVersion, request.Method, request.Uri.AbsoluteUri); if (HasParameter(request.Parameters, request.Parameters.Get("rooturl"))) { if (SessionManager.Current == null) { SessionManager.Create(); SessionManager.Current.FirstRun = true; SessionManager.Save(SessionManager.Current); Console.WriteLine("({0}) <Web Interface> Created new session with id {1}", DateTime.Now.ToString("hh:mm"), SessionManager.Current.SessionId); } Console.WriteLine("({0}) <Web Interface> AJAX parameters width={1}&height={2}&rooturl={3}", DateTime.Now.ToString("hh:mm"), request.Parameters.Get("width").Value, request.Parameters.Get("height").Value, request.Parameters.Get("rooturl").Value); response.ContentType = new ContentTypeHeader("application/json"); response.Status = HttpStatusCode.OK; var stream = new MemoryStream(Encoding.UTF8.GetBytes("{\"session\":\"" + SessionManager.Current.SessionId + "\",\"data\":\"\"}")); response.ContentLength.Value = stream.Length; var generator = new ResponseWriter(); generator.SendHeaders(context, response); generator.SendBody(context, stream); Console.WriteLine("({0}) <Web Interface> AJAX response {1}", DateTime.Now.ToString("hh:mm"), "{\"session\":\"" + SessionManager.Current.SessionId + "\",\"data\":\"\"}"); } if (HasParameter(request.Parameters, request.Parameters.Get("session"))) { Console.WriteLine("({0}) <Web Interface> AJAX parameters width={1}&height={2}&session={3}", DateTime.Now.ToString("hh:mm"), request.Parameters.Get("width").Value, request.Parameters.Get("height").Value, request.Parameters.Get("session").Value); //Console.WriteLine("({0}) <Web Interface> Trying to load session with id {1}", DateTime.Now.ToString("hh:mm"), request.Parameters.Get("session").Value); session = SessionManager.Load(request.Parameters.Get("session").Value); if (session == null) { Console.WriteLine("({0}) <Web Interface> Failed to load session with id {1}", DateTime.Now.ToString("hh:mm"), request.Parameters.Get("session").Value); response.ContentType = new ContentTypeHeader("application/json"); response.Status = HttpStatusCode.OK; var stream = new MemoryStream(Encoding.UTF8.GetBytes("{\"session\":\"" + request.Parameters.Get("session").Value + "\",\"data\":\"Failed to load session !\"}")); response.ContentLength.Value = stream.Length; var generator = new ResponseWriter(); generator.SendHeaders(context, response); generator.SendBody(context, stream); Console.WriteLine("({0}) <Web Interface> AJAX response {1}", DateTime.Now.ToString("hh:mm"), "{\"session\":\"" + request.Parameters.Get("session").Value + "\",\"data\":\"Failed to load session !\"}"); } else { //Console.WriteLine("({0}) <Web Interface> Loaded session with id {1}", DateTime.Now.ToString("hh:mm"), request.Parameters.Get("session").Value); if (request.Parameters.Get("session").Value == session.SessionId) { if (HasParameter(request.Parameters, request.Parameters.Get("keys"))) { lastkeys = request.Parameters.Get("keys").Value; while (lastkeys != null) { Thread.Sleep(50); if (lastkeys == null) { if (request.Parameters.Get("session").Value == lastsession) { response.ContentType = new ContentTypeHeader("text/html; charset=utf-8"); response.Status = HttpStatusCode.OK; var stream2 = new MemoryStream(Encoding.UTF8.GetBytes("OK")); response.ContentLength.Value = stream2.Length; var generator2 = new ResponseWriter(); generator2.SendHeaders(context, response); generator2.SendBody(context, stream2); Console.WriteLine("({0}) <Web Interface> AJAX response {1}", DateTime.Now.ToString("hh:mm"), "OK"); lastsession = null; break; } } } } else { if (session.FirstRun) { lastkeys = null; response.ContentType = new ContentTypeHeader("application/json"); response.Status = HttpStatusCode.OK; var stream = new MemoryStream(Encoding.UTF8.GetBytes("{\"session\":\"" + session.SessionId + "\",\"data\":\"Connected to server-side.\\r\\nWelcome to WCell.Terminal !\\r\\n\"}")); response.ContentLength.Value = stream.Length; var generator = new ResponseWriter(); generator.SendHeaders(context, response); generator.SendBody(context, stream); Console.WriteLine("({0}) <Web Interface> AJAX response {1}", DateTime.Now.ToString("hh:mm"), "{\"session\":\"" + session.SessionId + "\",\"data\":\"Connected to server-side. Welcome to WCell.Terminal !\"}"); session.FirstRun = false; SessionManager.Save(session); } else { while (lastkeys == null) { Thread.Sleep(50); if (lastkeys != null) { string stringValue = ""; if (lastkeys.Length == 2) { int value = Convert.ToInt32(lastkeys, 16); if (value <= Int32.MaxValue) { stringValue = Char.ConvertFromUtf32(value); } else { /*Console.WriteLine("({0}) <Web Interface> Problem with lastkeys ({1}): {2}", DateTime.Now.ToString("hh:mm"), e, lastkeys); stringValue = "\\r\\nProblem with lastkeys: " + lastkeys + "\\r\\n";*/ if (lastkeys.Length > 2) { string[] strArray = SplitString(lastkeys, 2); if (strArray != null) { foreach (string str in strArray) { if (!String.IsNullOrWhiteSpace(str)) { value = Convert.ToInt32(str, 16); stringValue += Char.ConvertFromUtf32(value); } } } } } } else { /*Console.WriteLine("({0}) <Web Interface> Problem with lastkeys ({1}): {2}", DateTime.Now.ToString("hh:mm"), e, lastkeys); stringValue = "\\r\\nProblem with lastkeys: " + lastkeys + "\\r\\n";*/ if (lastkeys.Length > 2) { string[] strArray = SplitString(lastkeys, 2); if (strArray != null) { foreach (string str in strArray) { if (!String.IsNullOrWhiteSpace(str)) { int value = Convert.ToInt32(str, 16); stringValue += Char.ConvertFromUtf32(value); } } } } } if (stringValue == "\r") { stringValue = "\\r\\n"; } if (stringValue == "\x7f") { stringValue = "\\b \\b"; } if (stringValue == "\f") { stringValue = "\\f"; } if (stringValue == "\t") { stringValue = "\\t"; } if (lastsession == null) { lastsession = session.SessionId; } response.ContentType = new ContentTypeHeader("application/json"); response.Status = HttpStatusCode.OK; var stream = new MemoryStream(Encoding.UTF8.GetBytes("{\"session\":\"" + lastsession + "\",\"data\":\"" + stringValue + "\"}")); response.ContentLength.Value = stream.Length; var generator = new ResponseWriter(); generator.SendHeaders(context, response); generator.SendBody(context, stream); Console.WriteLine("({0}) <Web Interface> AJAX response {1}", DateTime.Now.ToString("hh:mm"), "{\"session\":\"" + lastsession + "\",\"data\":\"" + stringValue + "\"}"); lastkeys = null; break; } } } } } else { Console.WriteLine("({0}) <Web Interface> AJAX response {1}", DateTime.Now.ToString("hh:mm"), "Invalid Session: " + request.Parameters.Get("session").Value); } } } return ProcessingResult.Abort; } else { if (context.IsSecure) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("({0}) <Web Interface> Secure HTTP request from {1} {2} {3} {4}", DateTime.Now.ToString("hh:mm"), context.RemoteEndPoint, request.HttpVersion, request.Method, request.Uri.AbsoluteUri); } else { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("({0}) <Web Interface> HTTP request from {1} {2} {3} {4}", DateTime.Now.ToString("hh:mm"), context.RemoteEndPoint, request.HttpVersion, request.Method, request.Uri.AbsoluteUri); } } return ProcessingResult.Continue; }
public ProcessingResult Process(RequestContext context) { //it's a public request, work out what they want // / = list servers // /[0-9]+/ = server home page including chat log // /[0-9]+/map = Google Map // /[0-9]+/renders = c10t renders Regex regRoot = new Regex(@"^/$"); Regex regServerList = new Regex(@"^/servers/$"); Regex regServerHome = new Regex(@"^/servers/([0-9]+)/$"); Regex regServerGMap = new Regex(@"^/servers/([0-9]+)/map/"); Regex regServerRenders = new Regex(@"^/servers/([0-9]+)/renders/"); if (regServerGMap.Match(context.Request.Uri.AbsolutePath).Success || regServerRenders.Match(context.Request.Uri.AbsolutePath).Success) { return ProcessingResult.Continue; } else { string strTemplate = "No matching Template"; Dictionary<string, string> dicTags = new Dictionary<string, string>(); if (regRoot.Match(context.Request.Uri.AbsolutePath).Success) { //Server Root strTemplate = File.ReadAllText(Core.RootFolder + @"\web\templates\root.html"); dicTags.Add("PageTitle", "YAMS Hosted Server"); dicTags.Add("PageBody", "test"); } else if (regServerList.Match(context.Request.Uri.AbsolutePath).Success) { //List of Servers strTemplate = File.ReadAllText(Core.RootFolder + @"\web\templates\server-list.html"); dicTags.Add("PageTitle", "Server List"); dicTags.Add("PageBody", "test"); } else if (regServerHome.Match(context.Request.Uri.AbsolutePath).Success) { //Individual Server home Match matServerHome = regServerHome.Match(context.Request.Uri.AbsolutePath); int intServerID = Convert.ToInt32(matServerHome.Groups[1].Value); MCServer s = Core.Servers[intServerID]; string strOverviewer = ""; string strTectonicus = ""; string strImages = ""; string strBackups = ""; if (File.Exists(s.ServerDirectory + @"\renders\overviewer\output\index.html")) { strOverviewer = "<h3>Overviewer Map</h3><div><a href=\"renders/overviewer/output/index.html\">Click here to open map</a>"; } if (File.Exists(s.ServerDirectory + @"\renders\tectonicus\map.html")) { strTectonicus = "<h3>Tectonicus Map</h3><div><a href=\"renders/tectonicus/map.html\">Click here to open map</a>"; } strImages = "<h3>Images</h3><ul>"; DirectoryInfo di = new DirectoryInfo(s.ServerDirectory + @"\renders\"); FileInfo[] fileEntries = di.GetFiles(); foreach (FileInfo fi in fileEntries) { strImages += "<li><a href=\"renders/" + fi.Name + "\">" + fi.Name + "</a></li>"; } strImages += "</ul>"; strBackups = "<h3>Backups</h3><ul>"; DirectoryInfo di2 = new DirectoryInfo(s.ServerDirectory + @"\backups\"); FileInfo[] fileEntries2 = di2.GetFiles(); foreach (FileInfo fi in fileEntries2) { strBackups += "<li><a href=\"backups/" + fi.Name + "\">" + fi.Name + "</a></li>"; } strBackups += "</ul>"; strTemplate = File.ReadAllText(Core.RootFolder + @"\web\templates\server-home.html"); dicTags.Add("PageTitle", s.ServerTitle); dicTags.Add("RenderOverviewer", strOverviewer); dicTags.Add("RenderTectonicus", strTectonicus); dicTags.Add("RenderImages", strImages); dicTags.Add("BackupList", strBackups); dicTags.Add("PageBody", "Body"); } else { //Unknown context.Response.Status = HttpStatusCode.NotFound; strTemplate = File.ReadAllText(Core.RootFolder + @"\web\templates\server-home.html"); dicTags.Add("PageTitle", "404"); dicTags.Add("PageBody", "<h1>404 - Not Found</h1>"); } //Run through our replacer strTemplate = WebTemplate.ReplaceTags(strTemplate, dicTags); //And send to the browser context.Response.Reason = "Completed - YAMS"; context.Response.Connection.Type = ConnectionType.Close; byte[] buffer = Encoding.UTF8.GetBytes(strTemplate); context.Response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } }
/// <summary> /// Method that process the incoming request. /// </summary> /// <param name="context">Request context (contains request, response, HttpContext)</param> public ProcessingResult Process(RequestContext context) { // Get some vars var request = context.Request; var response = context.Response; var httpContext = context.HttpContext; string[] segments = request.Uri.GetSegments(); // No segments? Do not process if (segments.Length == 0) return ProcessingResult.Continue; // Init more vars string controllerName = ""; string actionName = ""; RestRequestController controller = null; RestControllerContext controllerContext = null; int id = 0; Client client = null; Session session = null; // Set cookie and client var sessionCookie = request.Cookies.FirstOrDefault(c => c.Name == "ToucheeSession"); if (sessionCookie == null) { session = new Session(); //sessionStore.Save(session); response.Cookies.Add(new ResponseCookie("ToucheeSession", session.SessionId, DateTime.MinValue)); } else { //session = sessionStore.Load(sessionCookie.Value); client = Client.FindBySesssionID(sessionCookie.Value); } // Build custom params object var parameters = new Params(request.Parameters); // TODO: check if we have a matching route switch (segments.Length) { // If we have only one part, that is a controller with action Index // /controller case 1: controllerName = segments[0]; actionName = "index"; break; // When we have 2 parts and the second part is an int, do the Show action for that ID. Otherwise, the second part is the action // /controller/12 case 2: controllerName = segments[0]; actionName = int.TryParse(segments[1], out id) ? "show" : segments[1]; break; // In all other cases, we look at the last three parts default: var last = segments.Skip(segments.Length - 3).ToArray(); // If the last part is an int, that is the id // .../12/controller/4 if (int.TryParse(last[2], out id)) { controllerName = last[1]; actionName = "show"; } // If the first of the last parts is an int, no id is given, so we have a collection action on a controller // .../12/controller/action else if (int.TryParse(last[0], out id)) { controllerName = last[1]; actionName = last[2]; id = 0; } // If the middle one is an int, the first should be the controller and the last could be an action or a controller // .../controller/12/action_or_controller else if (int.TryParse(last[1], out id) && _controllers.ContainsKey(last[0])) { controller = _controllers[last[0]].Prototype; // If the last part is a method on the controller, do that if (controller.HasMethod(last[2].ToCamelCase())) { controllerName = last[0]; actionName = last[2]; } // Else, the last part must be a controller else if (_controllers.ContainsKey(last[2])) { controllerName = last[2]; actionName = "index"; id = 0; } // Else, false alarm else { } } // Check the rest of the parts for IDs int partID, tryID; for (var i = 1; i < segments.Length; i++) { if (int.TryParse(segments[i], out partID) && !int.TryParse(segments[i - 1], out tryID)) parameters.Set(segments[i - 1].ToLower() + "_id", partID.ToString()); } break; } // Check if the controller exists and action is not empty if (string.IsNullOrEmpty(controllerName) || !_controllers.ContainsKey(controllerName) || string.IsNullOrEmpty(actionName)) return ProcessingResult.Continue; // Get the controller context and set action name to camelcase controllerContext = _controllers[controllerName]; actionName = actionName.ToCamelCase(); // Set id in parameters if (id > 0) parameters.Set("id", id.ToString()); // Check if controller has method if (!controllerContext.Prototype.HasMethod(actionName)) return ProcessingResult.Continue; Logger.Log(String.Format("{0} - [{1}] \"{2} {3}\"", httpContext.RemoteEndPoint.Address, DateTime.UtcNow, request.Method, request.Uri.AbsolutePath)); controller = null; bool ret = false; try { lock (context) controller = controllerContext.Pop(); controller.SetRequest(request, response, null, parameters, client); // Get controller response object result = controller.GetType().GetMethod(actionName).Invoke(controller, new object[0]); // Check result type var resultType = result == null ? null : result.GetType(); // If we have a string response, set it string resultStr = null; if (resultType == typeof(String)) resultStr = (string)result; // If we have a bool response else if (resultType == typeof(bool)) ret = (bool)result; // If we have a message, we make a JSON response else if (result is Message) { resultStr = Server.Serialize((Message)result); response.ContentType = new HttpServer.Headers.ContentTypeHeader("application/json"); } // If we have a result string, write it to the body if (resultStr != null) { byte[] body = System.Text.Encoding.UTF8.GetBytes((string)resultStr); response.Body.Write(body, 0, body.Length); ret = true; } // If we have a body, but the response is not sent yet, do it now // This enables controllers to customize the response //if (response.Body.Length > 0 && !response.Sent) // response.Send(); } finally { if (controller != null) { lock (controllerContext) controllerContext.Push(controller); } } return ProcessingResult.SendResponse; }
/// <summary> /// Go through all modules and check if any of them can handle the current request. /// </summary> /// <param name="context"></param> /// <returns></returns> private ProcessingResult ProcessModules(RequestContext context) { OnBeforeModules(context); foreach (IModule module in _modules) { ProcessingResult result = module.Process(context); if (result != ProcessingResult.Continue) { _logger.Debug(module.GetType().Name + ": " + result); return result; } } return ProcessingResult.Continue; }
/// <summary> /// Processes all routers. /// </summary> /// <param name="context">Request context.</param> /// <returns>Processing result.</returns> private ProcessingResult ProcessRouters(RequestContext context) { foreach (IRouter router in _routers) { if (router.Process(context) != ProcessingResult.SendResponse) continue; _logger.Debug(router.GetType().Name + " sends the response."); return ProcessingResult.SendResponse; } return ProcessingResult.Continue; }
private ViewEngineResult BuildResult(RequestContext requestContext, ISparkViewEntry entry) { var view = (IView)entry.CreateInstance(); if (view is SparkView) { var sparkView = (SparkView)view; sparkView.ResourcePathManager = Engine.ResourcePathManager; sparkView.CacheService = CacheServiceProvider.GetCacheService(requestContext); } return new ViewEngineResult(view, this); }
public ProcessingResult Process(RequestContext context) { IRequest request = context.Request; IResponse response = context.Response; string path = request.Uri.AbsolutePath; path = Uri.UnescapeDataString(path); Utilities.Log("Connection from " + context.HttpContext.RemoteEndPoint, false); Utilities.Log(" Method: " + request.Method.ToString(), false); Utilities.Log(" Path: " + path, false); /* try { if (request.Method == Method.Get) { string output = ""; response.Add(new ContentTypeHeader("text/html")); response.Add(new StringHeader("Server", "Eye-Fi Agent/3.4.26 (Windows 7 Ultimate Edition Service Pack 1, 32-bit)")); output += context.HttpContext.RemoteEndPoint; foreach (IHeader h in response.Headers) { output += h.Name + ": " + h.ToString(); } SendFile(context.HttpContext, response, output); } else if (request.Method == Method.Post) { response.Add(new DateHeader("Date", DateTime.Now)); response.Add(new StringHeader("Pragma", "no-cache")); response.Add(new StringHeader("Server", "Eye-Fi Agent/3.4.26 (Windows 7 Ultimate Edition Service Pack 1, 32-bit)")); response.Add(new ContentTypeHeader("text/xml; charset=\"utf-8\"")); string soapAction = (from x in request.Headers where x.Name == "SOAPAction" select x.ToString()).FirstOrDefault(); Utilities.Log(" SOAP Action: " + soapAction, false); // A soapAction of StartSession indicates the beginning of an EyeFi auth request if (path == "/api/soap/eyefilm/v1" && soapAction == "\"urn:StartSession\"") SendFile(context.HttpContext, response, StartSession(request.Body)); // GetPhotoStatus allows the card to query if a photo has been uploaded to the server yet else if (path == "/api/soap/eyefilm/v1" && soapAction == "\"urn:GetPhotoStatus\"") SendFile(context.HttpContext, response, GetPhotoStatus(request.Body)); // If the URL is upload and there's no soapAction the card is ready to send a picture else if (path == "/api/soap/eyefilm/v1/upload" && soapAction == null) SendFile(context.HttpContext, response, UploadPhoto(request)); // If the URL is upload and SOAPAction is MarkLastPhotoInRoll else if (path == "/api/soap/eyefilm/v1/upload" && soapAction == "\"urn:MarkLastPhotoInRoll\"") SendFile(context.HttpContext, response, MarkLastPhotoInRoll()); else throw new ArgumentException("Unknown Path or SOAPAction"); } else throw new ArgumentException("Invalid Method"); } catch (Exception ex) { SendFile(context.HttpContext, response, ex.Message); return ProcessingResult.Abort; } */ return ProcessingResult.Abort; }
public ProcessingResult Process(RequestContext context) { //it's a public request, work out what they want // / = list servers // /[0-9]+/ = server home page including chat log // /[0-9]+/map = Google Map // /[0-9]+/renders = c10t renders Regex regRoot = new Regex(@"^/$"); Regex regServerList = new Regex(@"^/servers/$"); Regex regServerHome = new Regex(@"^/servers/([0-9]+)/$"); Regex regServerGMap = new Regex(@"^/servers/([0-9]+)/map/"); Regex regServerRenders = new Regex(@"^/servers/([0-9]+)/renders/"); Regex regServerAPI = new Regex(@"^/servers/([0-9]+)/api/"); if (regServerGMap.Match(context.Request.Uri.AbsolutePath).Success || regServerRenders.Match(context.Request.Uri.AbsolutePath).Success) { return ProcessingResult.Continue; } else { string strTemplate = "No matching Template"; Dictionary<string, string> dicTags = new Dictionary<string, string>(); if (regRoot.Match(context.Request.Uri.AbsolutePath).Success) { //Server Root strTemplate = File.ReadAllText(Core.RootFolder + @"\web\templates\root.html"); dicTags.Add("PageTitle", "YAMS Hosted Server"); dicTags.Add("PageBody", "test"); } else if (regServerList.Match(context.Request.Uri.AbsolutePath).Success) { //List of Servers strTemplate = File.ReadAllText(Core.RootFolder + @"\web\templates\server-list.html"); dicTags.Add("PageTitle", "Server List"); string strServerList; strServerList = "<ul>"; foreach (KeyValuePair<int, MCServer> kvp in Core.Servers) { strServerList += "<li><a href=\"" + kvp.Value.ServerID + "/\">" + kvp.Value.ServerTitle + "</a></li>"; }; strServerList += "</ul>"; dicTags.Add("ServerList", strServerList); } else if (regServerHome.Match(context.Request.Uri.AbsolutePath).Success) { //Individual Server home Match matServerHome = regServerHome.Match(context.Request.Uri.AbsolutePath); int intServerID = Convert.ToInt32(matServerHome.Groups[1].Value); MCServer s = Core.Servers[intServerID]; string strOverviewer = ""; string strImages = ""; string strBackups = ""; if (File.Exists(s.ServerDirectory + @"\renders\overviewer\output\index.html")) { strOverviewer = "<div><a href=\"renders/overviewer/output/index.html\">Click here to open map</a></div>"; } strImages = "<ul>"; DirectoryInfo di = new DirectoryInfo(s.ServerDirectory + @"\renders\"); IEnumerable<FileInfo> fileEntries = di.GetFiles(); var imageFiles = fileEntries.OrderByDescending(f => f.CreationTime).Take(20); foreach (FileInfo fi in imageFiles) strImages += "<li><a href=\"renders/" + fi.Name + "\">" + fi.Name + "</a></li>"; strImages += "</ul>"; strBackups = "<ul>"; DirectoryInfo di2 = new DirectoryInfo(s.ServerDirectory + @"\backups\"); IEnumerable<FileInfo> fileEntries2 = di2.GetFiles(); var backupFiles = fileEntries2.OrderByDescending(f => f.CreationTime).Take(20); foreach (FileInfo fi in backupFiles) strBackups += "<li><a href=\"backups/" + fi.Name + "\">" + fi.Name + "</a></li>"; strBackups += "</ul>"; //Determine if they need a special client URL string strClientURL = ""; if (s.ServerType == "pre") { string json = File.ReadAllText(YAMS.Core.RootFolder + @"\lib\versions.json"); //Dictionary<string, string> dicVers = JsonConvert.DeserializeObject<Dictionary<string, string>>(json); JObject jVers = JObject.Parse(json); strClientURL = "This server is running the weekly snapshots, <a href=\"" + (string)jVers["pre-client"] + "\">download current client</a>."; } //List out players online string strPlayers = ""; if (s.Players.Count > 0) { strPlayers = "<ul>"; foreach (KeyValuePair<string, Player> kvp in s.Players) { Vector playerPos = kvp.Value.Position; strPlayers += "<li>"; if (kvp.Value.Level == "op") strPlayers += "<span class=\"label label-important\">op</span> "; strPlayers += kvp.Value.Username + " <span class=\"label\">" + playerPos.x.ToString("0.##") + ", " + playerPos.y.ToString("0.##") + ", " + playerPos.z.ToString("0.##") + "</span>"; strPlayers += "</li>"; }; strPlayers += "</ul>"; } else { strPlayers = "No players online right now"; } //Connection Addresses string strConnectAddress = ""; if (Database.GetSetting("DNSName", "YAMS") != "") { strConnectAddress = Database.GetSetting("DNSName", "YAMS") + ".yams.in"; } else { strConnectAddress = Networking.GetExternalIP().ToString(); } if (s.GetProperty("server-port") != "25565") strConnectAddress += ":" + s.GetProperty("server-port"); strConnectAddress += "<input type=\"hidden\" id=\"server-host\" value=\"" + Networking.GetExternalIP().ToString() + "\" />" + "<input type=\"hidden\" id=\"server-port\" value=\"" + s.GetProperty("server-port") + "\" />"; strTemplate = File.ReadAllText(Core.RootFolder + @"\web\templates\server-home.html"); dicTags.Add("PageTitle", s.ServerTitle); dicTags.Add("RenderOverviewer", strOverviewer); dicTags.Add("RenderImages", strImages); dicTags.Add("BackupList", strBackups); dicTags.Add("ServerConnectAddress", strConnectAddress); //TODO dicTags.Add("ClientURL", strClientURL); dicTags.Add("PlayersOnline", strPlayers); dicTags.Add("PageBody", Database.GetSetting(intServerID, "ServerWebBody").ToString()); } else if (regServerAPI.Match(context.Request.Uri.AbsolutePath).Success) { string strResponse = ""; IParameterCollection param = context.Request.Parameters; Match matServerAPI = regServerAPI.Match(context.Request.Uri.AbsolutePath); int intServerID = Convert.ToInt32(matServerAPI.Groups[1].Value); MCServer s = Core.Servers[intServerID]; switch (context.Request.Parameters["action"]) { case "players": strResponse = "{\"players\" : ["; if (s.Players.Count > 0) { foreach (KeyValuePair<string, Player> kvp in s.Players) { Vector playerPos = kvp.Value.Position; strResponse += " { \"name\": \"" + kvp.Value.Username + "\", " + "\"level\": \"" + kvp.Value.Level + "\", " + "\"x\": \"" + playerPos.x.ToString("0.##") + "\", " + "\"y\": \"" + playerPos.y.ToString("0.##") + "\", " + "\"z\": \"" + playerPos.z.ToString("0.##") + "\" },"; }; strResponse = strResponse.Remove(strResponse.Length - 1); } strResponse += "]}"; break; } strTemplate = strResponse; } else { //Unknown context.Response.Status = HttpStatusCode.NotFound; strTemplate = File.ReadAllText(Core.RootFolder + @"\web\templates\server-home.html"); dicTags.Add("PageTitle", "404"); dicTags.Add("PageBody", "<h1>404 - Not Found</h1>"); } //Run through our replacer strTemplate = WebTemplate.ReplaceTags(strTemplate, dicTags); //And send to the browser context.Response.Reason = "Completed - YAMS"; context.Response.Connection.Type = ConnectionType.Close; byte[] buffer = Encoding.UTF8.GetBytes(strTemplate); context.Response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } }
/// <summary> /// Executes either a ReceivePrio Receive(channel) or ReceivePage(pageSize). /// </summary> /// <param name="context"></param> public void Process(RequestContext context) { Tasks.ReceivePrio(); }
/// <summary> /// A request have arrived but not yet been processed yet. /// </summary> /// <param name="context">The context.</param> /// <remarks> /// Default implementation adds a <c>Date</c> header and <c>Server</c> header. /// </remarks> protected virtual void OnBeforeRequest(RequestContext context) { context.Response.Add(new DateHeader("Date", DateTime.UtcNow)); context.Response.Add(new StringHeader("Server", ServerName)); }
public ProcessingResult Process(RequestContext context) { int intServerID = 0; MCServer s; string json; JObject jProps; if (context.Request.Uri.AbsoluteUri.Contains(@"/api/")) { //must be authenticated //what is the action? if (context.Request.Method == Method.Post && WebSession.Current.UserName == "admin") { String strResponse = ""; IParameterCollection param = context.Request.Parameters; switch (context.Request.Parameters["action"]) { case "log": //grabs lines from the log. int intStartID = Convert.ToInt32(context.Request.Parameters["start"]); int intNumRows = Convert.ToInt32(context.Request.Parameters["rows"]); int intServer = Convert.ToInt32(context.Request.Parameters["serverid"]); string strLevel = context.Request.Parameters["level"]; DataSet ds = Database.ReturnLogRows(intStartID, intNumRows, strLevel, intServer); strResponse = JsonConvert.SerializeObject(ds, Formatting.Indented); break; case "list": //List available servers strResponse = "{ \"servers\" : ["; foreach (KeyValuePair<int, MCServer> kvp in Core.Servers) { strResponse += "{ \"id\" : " + kvp.Value.ServerID + ", " + "\"title\" : \"" + kvp.Value.ServerTitle + "\", " + "\"ver\" : \"" + kvp.Value.ServerVersion + "\" } ,"; }; strResponse = strResponse.Remove(strResponse.Length - 1); strResponse += "]}"; break; case "status": //Get status of a server s = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])]; strResponse = "{ \"serverid\" : " + s.ServerID + "," + "\"status\" : \"" + s.Running + "\"," + "\"ram\" : " + s.GetMemory() + "," + "\"vm\" : " + s.GetVMemory() + "," + "\"restartneeded\" : \"" + s.RestartNeeded + "\"," + "\"restartwhenfree\" : \"" + s.RestartWhenFree + "\"," + "\"gamemode\" : \"" + s.GameMode + "\"," + "\"players\" : ["; if (s.Players.Count > 0) { foreach (KeyValuePair<string, Player> kvp in s.Players) { Vector playerPos = kvp.Value.Position; strResponse += " { \"name\": \"" + kvp.Value.Username + "\", " + "\"level\": \"" + kvp.Value.Level + "\", " + "\"x\": \"" + playerPos.x.ToString("0.##") + "\", " + "\"y\": \"" + playerPos.y.ToString("0.##") + "\", " + "\"z\": \"" + playerPos.z.ToString("0.##") + "\" },"; }; strResponse = strResponse.Remove(strResponse.Length - 1); } strResponse += "]}"; break; case "get-players": DataSet dsPlayers = Database.GetPlayers(Convert.ToInt32(context.Request.Parameters["serverid"])); JsonConvert.SerializeObject(dsPlayers, Formatting.Indented); break; case "overviewer": //Maps a server s = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])]; StringBuilder sbParams = new StringBuilder(); if (param["spawn"] == "true") sbParams.Append("spawn=y&"); if (!String.IsNullOrEmpty(param["texturepath"])) sbParams.AppendFormat("texturepath={0}&", param["texturepath"]); if (!String.IsNullOrEmpty(param["overworld"])) sbParams.AppendFormat("overworld={0}&", param["overworld"]); if (!String.IsNullOrEmpty(param["nether"])) sbParams.AppendFormat("nether={0}&", param["nether"]); if (!String.IsNullOrEmpty(param["end"])) sbParams.AppendFormat("end={0}&", param["end"]); AddOns.Overviewer over = new AddOns.Overviewer(s, sbParams.ToString()); over.Start(); strResponse = "{ \"result\" : \"sent\" }"; break; case "c10t": //Images a server s = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])]; AddOns.c10t c10t = new AddOns.c10t(s, "night=" + param["night"] + "&mode=" + param["mode"]); c10t.Start(); strResponse = "{ \"result\" : \"sent\" }"; break; case "tectonicus": //Maps a server s = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])]; AddOns.Tectonicus tecton = new AddOns.Tectonicus(s, "lighting=" + param["lighting"] + "&night=" + param["night"] + "&delete=" + param["delete"]); tecton.Start(); strResponse = "{ \"result\" : \"sent\" }"; break; case "start": //Starts a server Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].Start(); strResponse = "{ \"result\" : \"sent\" }"; break; case "stop": //Stops a server Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].Stop(); strResponse = "{ \"result\" : \"sent\" }"; break; case "forcestop": //Force stops a server Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].ForceStop(); strResponse = "{ \"result\" : \"sent\" }"; break; case "restart": //Restarts a server Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].Restart(); strResponse = "{ \"result\" : \"sent\" }"; break; case "delayed-restart": //Restarts a server after a specified time and warns players Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].DelayedRestart(Convert.ToInt32(param["delay"])); strResponse = "{ \"result\" : \"sent\" }"; break; case "restart-when-free": Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].RestartIfEmpty(); strResponse = "{ \"result\" : \"sent\" }"; break; case "command": //Sends literal command to a server Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].Send(context.Request.Parameters["message"]); strResponse = "{ \"result\" : \"sent\" }"; break; case "get-yams-settings": DataSet dsSettings = Database.ReturnSettings(); JsonConvert.SerializeObject(dsSettings, Formatting.Indented); break; case "save-yams-settings": //Settings update foreach (Parameter p in param) { if (p.Name != "action") Database.SaveSetting(p.Name, p.Value); } break; case "get-server-settings": //retrieve all server settings as JSON List<string> listIPsMC = new List<string>(); IPHostEntry ipListenMC = Dns.GetHostEntry(""); foreach (IPAddress ipaddress in ipListenMC.AddressList) { if (ipaddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) listIPsMC.Add(ipaddress.ToString()); } intServerID = Convert.ToInt32(param["serverid"]); strResponse = "{ \"serverid\" : " + intServerID + "," + "\"title\" : \"" + Database.GetSetting(intServerID, "ServerTitle") + "\"," + "\"optimisations\" : \"" + Database.GetSetting(intServerID, "ServerEnableOptimisations") + "\"," + "\"memory\" : \"" + Database.GetSetting(intServerID, "ServerAssignedMemory") + "\"," + "\"autostart\" : \"" + Database.GetSetting(intServerID, "ServerAutoStart") + "\"," + "\"type\" : \"" + Database.GetSetting(intServerID, "ServerType") + "\"," + "\"custom\" : \"" + Database.GetSetting(intServerID, "ServerCustomJAR").ToString().Replace("\\", "\\\\").Replace("\"", "\\\"") + "\"," + "\"motd\" : \"" + Database.GetSetting("motd", "MC", intServerID) + "\"," + "\"listen\" : \"" + Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].GetProperty("server-ip") + "\"," + "\"port\" : \"" + Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].GetProperty("server-port") + "\"," + "\"IPs\": " + JsonConvert.SerializeObject(listIPsMC, Formatting.None); strResponse += "}"; break; case "get-server-connections": intServerID = Convert.ToInt32(param["serverid"]); strResponse = "{ \"dnsname\" : \"" + Database.GetSetting("DNSName", "YAMS") + "\", " + "\"externalip\" : \"" + Networking.GetExternalIP().ToString() + "\", " + "\"internalip\" : \"" + Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].GetProperty("server-ip") + "\", " + "\"mcport\" : " + Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].GetProperty("server-port") + ", " + "\"publicport\" : " + Database.GetSetting("PublicListenPort", "YAMS") + ", " + "\"message\" : " + JsonConvert.SerializeObject(Database.GetSetting(intServerID, "ServerWebBody"), Formatting.None) + "}"; break; case "save-website-settings": intServerID = Convert.ToInt32(param["serverid"]); Database.UpdateServer(intServerID, "ServerWebBody", param["message"]); break; case "get-mc-settings": //retrieve all server settings as JSON intServerID = Convert.ToInt32(param["serverid"]); json = File.ReadAllText(YAMS.Core.RootFolder + @"\lib\properties.json"); jProps = JObject.Parse(json); strResponse = ""; foreach(JObject option in jProps["options"]) { strResponse += "<p><label for=\"" + (string)option["key"] + "\" title=\"" + (string)option["description"] + "\">" + (string)option["name"] + "</label>"; string strValue = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].GetProperty((string)option["key"]); switch ((string)option["type"]) { case "string": strResponse += "<input type=\"text\" name=\"" + (string)option["key"] + "\" value=\"" + strValue + "\" />"; break; case "boolean": strResponse += "<select name=\"" + (string)option["key"] + "\">"; strResponse += "<option value=\"true\""; if (strValue == "true") strResponse += " selected"; strResponse += ">True</option>"; strResponse += "<option value=\"false\""; if (strValue == "false") strResponse += " selected"; strResponse += ">False</option>"; strResponse += "</select>"; break; case "integer": strResponse += "<select name=\"" + (string)option["key"] + "\">"; int intValue = Convert.ToInt32(strValue); for (var i = Convert.ToInt32((string)option["min"]); i <= Convert.ToInt32((string)option["max"]); i++) { strResponse += "<option value=\"" + i.ToString() + "\""; if (intValue == i) strResponse += " selected"; strResponse += ">" + i.ToString() + "</option>"; } strResponse += "</select>"; break; case "array": strResponse += "<select name=\"" + (string)option["key"] + "\">"; string strValues = (string)option["values"]; string[] elements = strValues.Split(','); foreach (string values in elements) { string[] options = values.Split('|'); strResponse += "<option value=\"" + options[0] + "\""; if (strValue == options[0]) strResponse += " selected"; strResponse += ">" + options[1] + "</option>"; } strResponse += "</select>"; break; } strResponse += "</p>"; } break; case "save-server-settings": intServerID = Convert.ToInt32(param["serverid"]); Database.UpdateServer(intServerID, "ServerTitle", param["title"]); Database.UpdateServer(intServerID, "ServerType", param["type"]); Database.UpdateServer(intServerID, "ServerCustomJAR", param["custom"]); Database.UpdateServer(intServerID, "ServerAssignedMemory", Convert.ToInt32(param["memory"])); if (param["optimisations"] == "true") Database.UpdateServer(intServerID, "ServerEnableOptimisations", true); else Database.UpdateServer(intServerID, "ServerEnableOptimisations", false); if (param["autostart"] == "true") Database.UpdateServer(intServerID, "ServerAutoStart", true); else Database.UpdateServer(intServerID, "ServerAutoStart", false); Database.SaveSetting(intServerID, "motd", param["message"]); //Save the server's MC settings MCServer thisServer = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])]; thisServer.SaveProperty("server-ip", param["cfg_listen-ip"]); thisServer.SaveProperty("server-port", param["cfg_port"]); json = File.ReadAllText(YAMS.Core.RootFolder + @"\lib\properties.json"); jProps = JObject.Parse(json); strResponse = ""; foreach (JObject option in jProps["options"]) { thisServer.SaveProperty((string)option["key"], param[(string)option["key"]]); } //If they've selected a Bukkit but not chosen to have them installed, do it for them if (param["type"] == "bukkit") { if (Database.GetSetting("BukkitInstalled", "YAMS") == "false") { Database.SaveSetting("BukkitInstalled", "true"); AutoUpdate.CheckUpdates(); } } else if (param["type"] == "bukkit-beta") { if (Database.GetSetting("BukkitBetaInstalled", "YAMS") == "false") { Database.SaveSetting("BukkitBetaInstalled", "true"); AutoUpdate.CheckUpdates(); } } else if(param["type"] == "bukkit-dev") { if (Database.GetSetting("BukkitDevInstalled", "YAMS") == "false") { Database.SaveSetting("BukkitDevInstalled", "true"); AutoUpdate.CheckUpdates(); } } if (thisServer.Running) thisServer.RestartIfEmpty(); break; case "get-config-file": List<string> listConfig = Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].ReadConfig(param["file"]); strResponse = JsonConvert.SerializeObject(listConfig, Formatting.Indented); break; case "get-server-whitelist": strResponse = "{ \"enabled\" : " + Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].GetProperty("white-list") + " }"; break; case "upload-world": var test = context.Request.Files["new-world"]; break; case "delete-world": bool bolRandomSeed = false; if (param["randomseed"] == "true") bolRandomSeed = true; Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].ClearWorld(bolRandomSeed); strResponse = "{ \"result\" : \"sent\" }"; break; case "remove-server": Core.Servers[Convert.ToInt32(context.Request.Parameters["serverid"])].Stop(); Core.Servers.Remove(Convert.ToInt32(context.Request.Parameters["serverid"])); Database.DeleteServer(Convert.ToInt32(context.Request.Parameters["serverid"])); strResponse = "{ \"result\" : \"removed\" }"; break; case "about": Dictionary<string, string> dicAbout = new Dictionary<string, string> { { "dll" , FileVersionInfo.GetVersionInfo(Path.Combine(Core.RootFolder, "YAMS-Library.dll")).FileVersion }, { "svc" , FileVersionInfo.GetVersionInfo(Path.Combine(Core.RootFolder, "YAMS-Service.exe")).FileVersion }, { "gui" , FileVersionInfo.GetVersionInfo(Path.Combine(Core.RootFolder, "YAMS-Updater.exe")).FileVersion }, { "db" , Database.GetSetting("DBSchema", "YAMS") } }; strResponse = JsonConvert.SerializeObject(dicAbout, Formatting.Indented); break; case "installed-apps": Dictionary<string, string> dicApps = new Dictionary<string, string> { { "bukkit" , Database.GetSetting("BukkitInstalled", "YAMS") }, { "bukkitBeta" , Database.GetSetting("BukkitBetaInstalled", "YAMS") }, { "bukkitDev" , Database.GetSetting("BukkitDevInstalled", "YAMS") }, { "overviewer" , Database.GetSetting("OverviewerInstalled", "YAMS") }, { "c10t" , Database.GetSetting("C10tInstalled", "YAMS") }, { "biomeextractor" , Database.GetSetting("BiomeExtractorInstalled", "YAMS") }, { "tectonicus" , Database.GetSetting("TectonicusInstalled", "YAMS") }, { "nbtoolkit" , Database.GetSetting("NBToolkitInstalled", "YAMS") } }; strResponse = JsonConvert.SerializeObject(dicApps, Formatting.Indented); break; case "update-apps": Database.SaveSetting("OverviewerInstalled", param["overviewer"]); Database.SaveSetting("C10tInstalled", param["c10t"]); Database.SaveSetting("BiomeExtractorInstalled", param["biomeextractor"]); Database.SaveSetting("BukkitInstalled", param["bukkit"]); Database.SaveSetting("BukkitBetaInstalled", param["bukkitBeta"]); Database.SaveSetting("BukkitDevInstalled", param["bukkitDev"]); strResponse = "done"; break; case "force-autoupdate": AutoUpdate.CheckUpdates(false, true); break; case "network-settings": List<string> listIPs = new List<string>(); IPHostEntry ipListen = Dns.GetHostEntry(""); foreach (IPAddress ipaddress in ipListen.AddressList) { if (ipaddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) listIPs.Add(ipaddress.ToString()); } Dictionary<string, string> dicNetwork = new Dictionary<string, string> { { "portForwarding" , Database.GetSetting("EnablePortForwarding", "YAMS") }, { "openFirewall" , Database.GetSetting("EnableOpenFirewall", "YAMS") }, { "publicEnable" , Database.GetSetting("EnablePublicSite", "YAMS") }, { "adminPort" , Database.GetSetting("AdminListenPort", "YAMS") }, { "publicPort" , Database.GetSetting("PublicListenPort", "YAMS") }, { "currentIP" , Database.GetSetting("YAMSListenIP", "YAMS") }, { "telnetEnable" , Database.GetSetting("EnableTelnet", "YAMS") }, { "telnetPort" , Database.GetSetting("TelnetPort", "YAMS") }, { "IPs" , JsonConvert.SerializeObject(listIPs, Formatting.None) } }; strResponse = JsonConvert.SerializeObject(dicNetwork, Formatting.Indented).Replace(@"\","").Replace("\"[", "[").Replace("]\"", "]"); break; case "save-network-settings": int intTester = 0; try { //Try to convert to integers to make sure something silly isn't put in. TODO: Javascript validation intTester = Convert.ToInt32(param["adminPort"]); intTester = Convert.ToInt32(param["publicPort"]); IPAddress ipTest = IPAddress.Parse(param["listenIp"]); } catch (Exception e) { YAMS.Database.AddLog("Invalid input on network settings", "web", "warn"); return ProcessingResult.Abort; } Database.SaveSetting("EnablePortForwarding", param["portForwarding"]); Database.SaveSetting("EnableOpenFirewall", param["openFirewall"]); Database.SaveSetting("EnablePublicSite", param["publicEnable"]); Database.SaveSetting("AdminListenPort", param["adminPort"]); Database.SaveSetting("PublicListenPort", param["publicPort"]); Database.SaveSetting("YAMSListenIP", param["listenIp"]); Database.SaveSetting("EnableTelnet", param["telnetEnable"]); Database.SaveSetting("TelnetPort", param["telnetPort"]); Database.AddLog("Network settings have been saved, to apply changes a service restart is required. Please check they are correct before restarting", "web", "warn"); break; case "job-list": DataSet rdJobs = Database.ListJobs(); strResponse = JsonConvert.SerializeObject(rdJobs, Formatting.Indented); break; case "delete-job": string strJobID = param["jobid"]; Database.DeleteJob(strJobID); strResponse = "done"; break; case "add-job": intServerID = Convert.ToInt32(param["job-server"]); int intHour = Convert.ToInt32(param["job-hour"]); int intMinute = Convert.ToInt32(param["job-minute"]); Database.AddJob(param["job-type"], intHour, intMinute, param["job-params"], intServerID); break; case "logout": WebSession.Current.UserName = ""; break; case "newserver": var NewServer = new List<KeyValuePair<string, string>>(); NewServer.Add(new KeyValuePair<string, string>("motd", "Welcome to a YAMS server!")); NewServer.Add(new KeyValuePair<string, string>("server-ip", Networking.GetListenIP().ToString())); NewServer.Add(new KeyValuePair<string, string>("server-name", param["name"])); NewServer.Add(new KeyValuePair<string, string>("server-port", Networking.TcpPort.FindNextAvailablePort(25565).ToString())); Database.NewServerWeb(NewServer, param["name"], 1024); strResponse = "done"; break; case "updateDNS": Database.SaveSetting("DNSName", param["dns-name"]); Database.SaveSetting("DNSSecret", param["dns-secret"]); Database.SaveSetting("LastExternalIP", param["dns-external"]); strResponse = "done"; break; case "getDNS": strResponse = "{ \"name\":\"" + Database.GetSetting("DNSName", "YAMS") + "\", \"secret\": \"" + Database.GetSetting("DNSSecret", "YAMS") + "\", \"external\" : \"" + Networking.GetExternalIP().ToString() + "\" }"; break; case "backup-now": Backup.BackupNow(Core.Servers[Convert.ToInt32(param["serverid"])], param["title"]); strResponse = "{ \"result\" : \"sent\" }"; break; default: return ProcessingResult.Abort; } context.Response.Reason = "Completed - YAMS"; context.Response.Connection.Type = ConnectionType.Close; byte[] buffer = Encoding.UTF8.GetBytes(strResponse); context.Response.Body.Write(buffer, 0, buffer.Length); } else { // not a post, so say bye bye! return ProcessingResult.Abort; } return ProcessingResult.SendResponse; } else if (context.Request.Uri.AbsoluteUri.Contains(@"/admin")) { if (WebSession.Current.UserName != "admin") { context.Response.Reason = "Completed - YAMS"; context.Response.Connection.Type = ConnectionType.Close; byte[] buffer = Encoding.UTF8.GetBytes(File.ReadAllText(YAMS.Core.RootFolder + @"\web\admin\login.html")); context.Response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } else { context.Response.Reason = "Completed - YAMS"; context.Response.Connection.Type = ConnectionType.Close; byte[] buffer = Encoding.UTF8.GetBytes(File.ReadAllText(YAMS.Core.RootFolder + @"\web\admin\index.html")); context.Response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } } else if (context.Request.Uri.AbsoluteUri.Contains(@"/login")) { //This is a login request, check it's legit string userName = context.Request.Form["strUsername"]; string password = context.Request.Form["strPassword"]; if (userName == "admin" && password == Database.GetSetting("AdminPassword", "YAMS")) { WebSession.Create(); WebSession.Current.UserName = "******"; context.Response.Redirect(@"/admin"); return ProcessingResult.SendResponse; } else { context.Response.Reason = "Completed - YAMS"; context.Response.Connection.Type = ConnectionType.Close; byte[] buffer = Encoding.UTF8.GetBytes(File.ReadAllText(YAMS.Core.RootFolder + @"\web\admin\login.html")); context.Response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } } else if (context.Request.Uri.AbsoluteUri.Equals(@"/")) { context.Response.Redirect(@"/admin"); return ProcessingResult.SendResponse; } else { return ProcessingResult.Abort; } }
public virtual ProcessingResult Process(RequestContext context) { if (context == null) throw new ArgumentNullException("context"); IRequest request = context.Request; IResponse response = context.Response; try { byte[] buffer; switch (request.Uri.AbsolutePath) { case "/fullAnnouncerPage": response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetAnnouncerPage()); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; case "/deletepenalty": if (request.QueryString["penaltyId"] != null) { var pId = new Guid(request.QueryString["penaltyId"]); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.RemovePenalty(pId)); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/getpenaltiesformember": if (request.QueryString["playerId"] != null && request.QueryString["t"] != null) { var pId = new Guid(request.QueryString["playerId"]); int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString()); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetPenalties(pId, teamNumber)); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/addpenalty": if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["pid"] != null && request.QueryString["mm"] != null && request.QueryString["jamId"] != null) { var pId = new Guid(request.QueryString["playerId"]); int teamNumber = Convert.ToInt32(request.QueryString["t"]); int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]); Guid jamId = new Guid(request.QueryString["jamId"]); int penaltyId = Convert.ToInt32(request.QueryString["pid"]); int minorMajor = Convert.ToInt32(request.QueryString["mm"]); ServerHelper.AddPenalty(pId, teamNumber, jamNumber, penaltyId, minorMajor, jamId); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetPenalties(pId, teamNumber)); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/getallpenaltytypes": response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetAllPenaltyTypes()); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; case "/getRuleSet": response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetRuleSet()); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; case "/GrabMobileUpdate": response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GrabMobileUpdate()); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; case "/GrabOverlayUpdate": response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GrabGameUpdate()); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; case "/GetTeam1Members": response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetTeam1Members()); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; case "/GetTeam2Members": response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetTeam2Members()); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; case "/GetTeamNames": response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetTeamNames()); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; case "/getJamNumber": response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetJamNumber()); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; case "/addAssist": if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null) { var pId = new Guid(request.QueryString["playerId"]); int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString()); int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]); Guid jamId = new Guid(request.QueryString["jamId"]); ServerHelper.AddAssist(pId, teamNumber, jamNumber, jamId); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetAssists(pId, jamNumber, teamNumber, jamId)); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/removeAssist": if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null) { var pId = new Guid(request.QueryString["playerId"]); int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString()); int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]); Guid jamId = new Guid(request.QueryString["jamId"]); ServerHelper.RemoveAssist(pId, teamNumber); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetAssists(pId, jamNumber, teamNumber, jamId)); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/addBlock": if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null) { var pId = new Guid(request.QueryString["playerId"]); int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString()); int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]); Guid jamId = new Guid(request.QueryString["jamId"]); ServerHelper.AddBlock(pId, teamNumber, jamNumber, jamId); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetBlocks(pId, teamNumber, jamId)); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/removeBlock": if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null) { var pId = new Guid(request.QueryString["playerId"]); int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString()); int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]); Guid jamId = new Guid(request.QueryString["jamId"]); ServerHelper.RemoveBlock(pId, teamNumber); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetBlocks(pId, teamNumber, jamId)); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/scoringLoaded": ServerHelper.ScoringLoaded(); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes("{ \"result\": true}"); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; case "/addScore": //used from the jammer screens if (request.QueryString["playerId"] != null && request.QueryString["points"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null) { var pId = new Guid(request.QueryString["playerId"]); int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString()); int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]); int points = Convert.ToInt32(request.QueryString["points"]); Guid jamId = new Guid(request.QueryString["jamId"]); ServerHelper.AddScore(pId, teamNumber, jamId, jamNumber, points); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetScore(pId, jamId, teamNumber)); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/removeScore": if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null) { var pId = new Guid(request.QueryString["playerId"]); int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString()); int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]); Guid jamId = new Guid(request.QueryString["jamId"]); ServerHelper.RemoveScore(pId, teamNumber, jamId); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetScore(pId, jamId, teamNumber)); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/setBlocker1": if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null) { var pId = new Guid(request.QueryString["playerId"]); int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString()); int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]); Guid jamId = new Guid(request.QueryString["jamId"]); ServerHelper.SetBlocker(1, pId, teamNumber, jamId); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetPlayerPositions(pId, teamNumber)); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/setBlocker2": if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null) { var pId = new Guid(request.QueryString["playerId"]); int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString()); int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]); Guid jamId = new Guid(request.QueryString["jamId"]); ServerHelper.SetBlocker(2, pId, teamNumber, jamId); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetPlayerPositions(pId, teamNumber)); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/setBlocker3": if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null) { var pId = new Guid(request.QueryString["playerId"]); int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString()); int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]); Guid jamId = new Guid(request.QueryString["jamId"]); ServerHelper.SetBlocker(3, pId, teamNumber, jamId); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetPlayerPositions(pId, teamNumber)); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/setBlocker4": if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null) { var pId = new Guid(request.QueryString["playerId"]); int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString()); int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]); Guid jamId = new Guid(request.QueryString["jamId"]); ServerHelper.SetBlocker(4, pId, teamNumber, jamId); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetPlayerPositions(pId, teamNumber)); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/setPBox": if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null) { var pId = new Guid(request.QueryString["playerId"]); int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString()); int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]); Guid jamId = new Guid(request.QueryString["jamId"]); ServerHelper.SetPenaltyBox(pId, teamNumber, jamId); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetPlayerPositions(pId, teamNumber)); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/setPivot": if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null) { var pId = new Guid(request.QueryString["playerId"]); int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString()); int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]); Guid jamId = new Guid(request.QueryString["jamId"]); ServerHelper.SetPivot(pId, teamNumber, jamId); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetPlayerPositions(pId, teamNumber)); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/setJammer": if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null) { var pId = new Guid(request.QueryString["playerId"]); int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString()); int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]); Guid jamId = new Guid(request.QueryString["jamId"]); ServerHelper.SetJammer(pId, teamNumber, jamId); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetPlayerPositions(pId, teamNumber)); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/startStopJam": response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.StartStopJam()); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; case "/startOfficialTimeOut": response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.StartOfficialTimeOut()); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; case "/addToScore": //used from the control screen. if (request.QueryString["t"] != null && request.QueryString["points"] != null) { int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString()); int points = Convert.ToInt32(request.QueryString["points"].ToString()); if (teamNumber == 1) GameViewModel.Instance.AddScoreToGame(points, TeamNumberEnum.Team1); else if (teamNumber == 2) GameViewModel.Instance.AddScoreToGame(points, TeamNumberEnum.Team2); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetScore(teamNumber)); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/savePeriodTime": //used from the control screen. if (!String.IsNullOrEmpty(request.QueryString["t"])) { string time = request.QueryString["t"].ToString(); if (Clocks.CLOCK_CHECK.IsMatch(time)) GameViewModel.Instance.PeriodClock.changeSecondsOfClock(Convert.ToInt32(Clocks.convertTimeDisplayToSeconds(Clocks.CLOCK_CHECK.Match(time).Value))); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GrabMobileUpdate()); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/saveJamTime": //used from the control screen. if (!String.IsNullOrEmpty(request.QueryString["t"])) { string time = request.QueryString["t"].ToString(); if (Clocks.CLOCK_CHECK.IsMatch(time)) GameViewModel.Instance.CurrentJam.JamClock.changeSecondsOfClock(Convert.ToInt32(Clocks.convertTimeDisplayToSeconds(Clocks.CLOCK_CHECK.Match(time).Value))); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GrabMobileUpdate()); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/saveJamNumber": //used from the control screen. if (!String.IsNullOrEmpty(request.QueryString["n"])) { string number = request.QueryString["n"].ToString(); if (StringExt.IsNumber(number)) GameViewModel.Instance.CurrentJam.JamNumber = Convert.ToInt32(StringExt.NumberRegex.Match(number).Value); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GrabMobileUpdate()); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/subtractFromScore": if (request.QueryString["t"] != null) { int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString()); ServerHelper.RemoveScore(teamNumber); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetScore(teamNumber)); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/takeTimeOut": if (request.QueryString["t"] != null) { int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString()); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.TakeTimeOut(teamNumber)); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/loadMainScreen": response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.LoadMainControlScreen()); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; case "/addJamPass": if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null) { int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString()); var pId = new Guid(request.QueryString["playerId"]); int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]); Guid jamId = new Guid(request.QueryString["jamId"]); ServerHelper.AddJamPass(teamNumber, pId, jamId, jamNumber); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.GetScore(teamNumber)); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; case "/isLead": if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null) { int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString()); var pId = new Guid(request.QueryString["playerId"]); int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]); Guid jamId = new Guid(request.QueryString["jamId"]); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.IsLead(teamNumber, pId, jamId, jamNumber).ToString()); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; //case "/calledJam": // if (request.QueryString["playerId"] != null && request.QueryString["t"] != null) // { // int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString()); // var pId = new Guid(request.QueryString["playerId"]); // response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); // response.Connection.Type = ConnectionType.KeepAlive; // buffer = Encoding.UTF8.GetBytes(ServerHelper.CalledJam(teamNumber, pId)); // response.Body.Write(buffer, 0, buffer.Length); // return ProcessingResult.SendResponse; // } // break; case "/lostLead": if (request.QueryString["playerId"] != null && request.QueryString["t"] != null && request.QueryString["jamNumber"] != null && request.QueryString["jamId"] != null) { int teamNumber = Convert.ToInt32(request.QueryString["t"].ToString()); var pId = new Guid(request.QueryString["playerId"]); int jamNumber = Convert.ToInt32(request.QueryString["jamNumber"]); Guid jamId = new Guid(request.QueryString["jamId"]); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; buffer = Encoding.UTF8.GetBytes(ServerHelper.LostLeadJammerEligibility(teamNumber, pId, jamId, jamNumber).ToString()); response.Body.Write(buffer, 0, buffer.Length); return ProcessingResult.SendResponse; } break; default: break; } } catch (Exception exception) { ErrorViewModel.Save(exception, exception.GetType(), additionalInformation: request.Uri.OriginalString + Logger.Instance.getLoggedMessages()); response.ContentType = new ContentTypeHeader("application/json; charset=utf-8"); response.Connection.Type = ConnectionType.KeepAlive; byte[] buffer11 = Encoding.UTF8.GetBytes(""); response.Body.Write(buffer11, 0, buffer11.Length); return ProcessingResult.SendResponse; } return ProcessingResult.Continue; }
protected override string ApplyTemplate(RequestContext request, string template) { return template; }
private ProcessingResult HandleRequest(RequestEventArgs e) { var context = new RequestContext { HttpContext = e.Context, Request = e.Request, Response = e.Response }; PrepareRequest(this, e); // standard headers. e.Response.Add(new DateHeader("Date", DateTime.UtcNow)); e.Response.Add(new StringHeader("Server", "C# WebServer")); if (e.Request.ContentLength.Value > 0) DecodeBody(e.Request); // Process routers. ProcessingResult result = ProcessRouters(context); if (ProcessResult(result, e)) _logger.Debug("Routers processed the request."); // process modules. result = ProcessModules(context); if (ProcessResult(result, e)) return result; RequestReceived(this, e); return ProcessingResult.Continue; }