public override void HandleRequest()
{
// Setup Params
if (!Request.QueryString.ContainsKey("nick"))
{
Response.WriteResponseStart(false);
Response.WriteHeaderLine("asof", "err");
Response.WriteDataLine(DateTime.UtcNow.ToUnixTimestamp(), "Invalid Syntax!");
Response.Send();
return;
}
// NOTE: The HttpServer will handle the DbConnectException
using (Database = new StatsDatabase())
{
// Setup local vars
int i = 0;
string Nick = Request.QueryString["nick"];
string Sort = (Request.QueryString.ContainsKey("sort")) ? Request.QueryString["sort"] : "a";
string Where = (Request.QueryString.ContainsKey("where")) ? Request.QueryString["where"] : "a";
// Timestamp Header
Response.WriteResponseStart();
Response.WriteHeaderLine("asof");
Response.WriteDataLine(DateTime.UtcNow.ToUnixTimestamp());
// Build our query builder
SelectQueryBuilder builder = new SelectQueryBuilder(Database);
builder.SelectColumns("id", "name", "score");
builder.SelectFromTable("player");
builder.Limit(20);
// Where statement for our query
switch (Where.ToLowerInvariant())
{
default:
case "a": // Any
builder.AddWhere("name", Comparison.Like, "%" + Nick + "%");
break;
case "b": // Begins With
builder.AddWhere("name", Comparison.Like, "%" + Nick);
break;
case "e": // Ends With
builder.AddWhere("name", Comparison.Like, Nick + "%");
break;
case "x": // Exactly
builder.AddWhere("name", Comparison.Equals, Nick);
break;
}
// Add sorting (a = ascending, r = reverse (descending))
if (Sort.Equals("r", StringComparison.InvariantCultureIgnoreCase))
builder.AddOrderBy("name", Sorting.Descending);
else
builder.AddOrderBy("name", Sorting.Ascending);
// Output status
Response.WriteHeaderLine("n", "pid", "nick", "score");
foreach (Dictionary<string, object> Player in builder.ExecuteQuery())
{
Response.WriteDataLine(++i, Player["id"], Player["name"].ToString().Trim(), Player["score"]);
}
// Send Response
Response.Send();
}
}