Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Committing the new version!

  • Loading branch information...
commit d9ec7e3dfd5094fe6e6bb283d1b8c4f1d33d0dbd 0 parents
@jkbbwr authored
Showing with 16,168 additions and 0 deletions.
  1. +31 −0 Arguments.cs
  2. +35 −0 Filetemplate.cs
  3. +12 −0 ITemplate.cs
  4. +22 −0 Metadata.cs
  5. +81 −0 Node.cs
  6. +38 −0 Properties/AssemblyInfo.cs
  7. +36 −0 RawTemplate.cs
  8. +49 −0 Request.cs
  9. +56 −0 Response.cs
  10. +18 −0 Route.cs
  11. +105 −0 RoutingSystem.cs
  12. +38 −0 Session.cs
  13. +42 −0 SessionOverlord.cs
  14. +188 −0 TaoEngine.cs
  15. +78 −0 TaoEngineRelease.csproj
  16. BIN  bin/Debug/Antlr3.StringTemplate.dll
  17. BIN  bin/Debug/Antlr3.StringTemplate.pdb
  18. BIN  bin/Debug/Newtonsoft.Json.dll
  19. +7,659 −0 bin/Debug/Newtonsoft.Json.xml
  20. BIN  bin/Debug/TaoEngine.dll
  21. BIN  bin/Debug/TaoEngine.pdb
  22. BIN  bin/Final/Antlr3.StringTemplate.dll
  23. BIN  bin/Final/Antlr3.StringTemplate.pdb
  24. BIN  bin/Final/Newtonsoft.Json.dll
  25. +7,659 −0 bin/Final/Newtonsoft.Json.xml
  26. BIN  bin/Final/TaoEngine.dll
  27. BIN  obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
  28. BIN  obj/Debug/TaoEngine.dll
  29. BIN  obj/Debug/TaoEngine.pdb
  30. +9 −0 obj/Debug/TaoEngineRelease.csproj.FileListAbsolute.txt
  31. BIN  obj/Final/DesignTimeResolveAssemblyReferencesInput.cache
  32. BIN  obj/Final/TaoEngine.dll
  33. +7 −0 obj/Final/TaoEngineRelease.csproj.FileListAbsolute.txt
  34. +5 −0 packages.config
31 Arguments.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace TaoEngine
+{
+ /*
+ * What looks like a silly wrapper class for a Dictionary, its really just
+ * syntaxical sugar to make it nice and clear.
+ */
+ public class Args
+ {
+ private Dictionary<string, dynamic> args;
+
+ public Args(Dictionary<string, dynamic> args)
+ {
+ this.args = args;
+ }
+
+ public dynamic get(string key, dynamic failure = null)
+ {
+ dynamic value;
+ if (args.TryGetValue(key, out value))
+ {
+ return value;
+ }
+ return failure;
+ }
+ }
+}
35 Filetemplate.cs
@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.IO;
+
+using Antlr3.ST;
+using Antlr3.ST.Language;
+
+namespace TaoEngine
+{
+ class FileTemplate : ITemplate
+ {
+ private string path;
+ private StreamReader fileobj;
+ private string content;
+
+ public FileTemplate(string path)
+ {
+ this.path = path;
+ this.fileobj = new StreamReader(path);
+ this.content = this.fileobj.ReadToEnd();
+ }
+
+ public string render(Dictionary<string, string> nmspace)
+ {
+ StringTemplate template = new StringTemplate(this.content, typeof(TemplateLexer));
+ foreach (String key in nmspace.Keys)
+ {
+ template.SetAttribute(key, nmspace[key]);
+ }
+ return template.ToString();
+ }
+ }
+}
12 ITemplate.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace TaoEngine
+{
+ interface ITemplate
+ {
+ string render(Dictionary<string, string> nmspace);
+ }
+}
22 Metadata.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Reflection;
+
+namespace TaoEngine
+{
+ class Metadata
+ {
+ public object klass;
+ public MethodInfo method;
+ public Args methArgs;
+
+ public Metadata(object klass, MethodInfo method)
+ {
+ this.klass = klass;
+ this.method = method;
+ this.methArgs = null;
+ }
+ }
+}
81 Node.cs
@@ -0,0 +1,81 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace TaoEngine
+{
+ public class Node
+ {
+ private string fragment;
+ private bool isDynamic;
+ private Node parent;
+ private Dictionary<String, Node> children = new Dictionary<string, Node>();
+
+ public Dictionary<String, Node> Children
+ {
+ get { return children; }
+ set { children = value; }
+ }
+
+ public Node(String fragment, Boolean isDynamic)
+ {
+ this.fragment = fragment;
+ this.isDynamic = isDynamic;
+ }
+
+ public void addChild(Node child)
+ {
+ children.Add(child.fragment, child);
+ }
+
+ public void addParent(Node parent)
+ {
+ this.parent = parent;
+ }
+
+ public Boolean hasChild(String fragment)
+ {
+ Node var;
+ if (children.TryGetValue(fragment, out var))
+ {
+ return true;
+ }
+ return false;
+ }
+
+ public String buildRoute()
+ {
+ String path = "/" + fragment;
+ Node p = parent;
+ while ((p != null) && (p.fragment != "/"))
+ {
+ path = "/" + p.fragment + path;
+ p = p.parent;
+ }
+ if (path == "//") { return null; }
+ return path;
+ }
+
+ public Boolean hasNoChildren()
+ {
+ return children.Count == 0;
+ }
+
+ public Boolean hasNoDynamicChildren()
+ {
+ return children.Values.Where(x => x.isDynamic == true).ToArray().Length == 0;
+ }
+
+ public IEnumerable<Node> iterDynamicChildren()
+ {
+ foreach (Node node in children.Values)
+ {
+ if (node.isDynamic)
+ {
+ yield return node;
+ }
+ }
+ }
+ }
+}
38 Properties/AssemblyInfo.cs
@@ -0,0 +1,38 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Resources;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("TaoEngine")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("TaoEngine")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2012")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("cf0e467f-c33e-4560-a629-d40828e444cb")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.1")]
+[assembly: AssemblyFileVersion("1.0.0.2")]
+[assembly: NeutralResourcesLanguageAttribute("en-GB")]
36 RawTemplate.cs
@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Antlr3.ST;
+using Antlr3.ST.Language;
+
+namespace TaoEngine
+{
+ class RawTemplate : ITemplate
+ {
+ private string p;
+
+ public RawTemplate(string p)
+ {
+ this.p = p;
+ }
+
+
+ public string render(Dictionary<string, string> nmspace)
+ {
+ StringTemplate template = new StringTemplate(this.p, typeof(TemplateLexer));
+ foreach (String key in nmspace.Keys)
+ {
+ template.SetAttribute(key, nmspace[key]);
+ }
+ return template.ToString();
+ }
+
+
+ public string render()
+ {
+ return this.p;
+ }
+ }
+}
49 Request.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Net;
+using System.Web;
+using System.Collections.Specialized;
+
+namespace TaoEngine
+{
+ public class Request
+ {
+ private HttpListenerRequest serverRequest;
+ public CookieCollection cookies { get; set; }
+ public NameValueCollection headers { get; set; }
+ public string method { get; set; }
+ public string path { get; set; }
+ public string body;
+ public Session session;
+
+ public Request(HttpListenerRequest serverRequest)
+ {
+ // Right lets get started
+ this.serverRequest = serverRequest;
+ this.cookies = serverRequest.Cookies;
+ this.headers = serverRequest.Headers;
+ this.method = serverRequest.HttpMethod;
+ this.path = serverRequest.Url.PathAndQuery;
+
+ // Get this sessions cookie.
+ Cookie cookie = serverRequest.Cookies["SessionID"];
+ String sessionID = "";
+ if (cookie != null)
+ {
+ sessionID = cookie.Value;
+ }
+ this.session = SessionOverlord.getOrMakeSession(sessionID);
+
+ // Ugly c# for reading InputStreams
+ byte[] bytes = new byte[serverRequest.InputStream.Length];
+ serverRequest.InputStream.Read(bytes, 0, (int)serverRequest.InputStream.Length);
+ foreach (byte b in bytes)
+ {
+ this.body += b.ToString();
+ }
+ // End ugly here.
+ }
+ }
+}
56 Response.cs
@@ -0,0 +1,56 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace TaoEngine
+{
+ public class Response
+ {
+ public string mimeType = "text/html";
+ public int status = 200;
+ private ITemplate template = new RawTemplate("");
+ private Dictionary<String, String> nmspace = new Dictionary<string, string>();
+ public Session session { get; set; }
+
+ public Response setStatus(int status)
+ {
+ this.status = status;
+ return this;
+ }
+
+ public String render()
+ {
+ return this.template.render(nmspace);
+ }
+
+ public Response addNamespace(Dictionary<String, String> nmspace)
+ {
+ this.nmspace = nmspace;
+ return this;
+ }
+
+ public Response inlineTemplate(String content)
+ {
+ this.template = new RawTemplate(content);
+ return this;
+ }
+
+ public Response namedTemplate(String path)
+ {
+ this.template = new FileTemplate(path);
+ return this;
+ }
+
+ internal Response clone()
+ {
+ Response cloned = new Response();
+ cloned.mimeType = mimeType;
+ cloned.status = status;
+ cloned.template = template;
+ cloned.nmspace = nmspace;
+ cloned.session = session;
+ return cloned;
+ }
+ }
+}
18 Route.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace TaoEngine
+{
+ [System.AttributeUsage(System.AttributeTargets.Method)]
+ public class Route : Attribute
+ {
+ public string[] routes;
+
+ public Route(params string[] routes)
+ {
+ this.routes = routes;
+ }
+ }
+}
105 RoutingSystem.cs
@@ -0,0 +1,105 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+
+namespace TaoEngine
+{
+ public class RoutingSystem
+ {
+ private Node root;
+
+ public RoutingSystem()
+ {
+ this.root = new Node("/", false);
+ }
+
+ public void addRoute(String route)
+ {
+ Node current = root;
+ Queue<String> chunks = breakRoute(route);
+ foreach (String chunk in chunks)
+ {
+ if (current.hasChild(chunk))
+ {
+ current = current.Children[chunk];
+ continue;
+ }
+ else
+ {
+ Node next = new Node(chunk, isDynamic(chunk));
+ next.addParent(current);
+ current.addChild(next);
+ current = next;
+ }
+ }
+ }
+
+ public Node walkBranch(Queue<String> chunks, Node current)
+ {
+ String chunk;
+ Node possible;
+ while (chunks.Count != 0)
+ {
+ chunk = chunks.Dequeue();
+ if (current.hasChild(chunk))
+ {
+ current = current.Children[chunk];
+ }
+ else
+ {
+ foreach (Node node in current.iterDynamicChildren())
+ {
+ possible = walkBranch(chunks, node);
+ if (possible != current)
+ {
+ current = possible;
+ break;
+ }
+ }
+ }
+ }
+ return current;
+ }
+
+ public String matchRoute(String route)
+ {
+ if (route == "/") { return route; }
+ String chunk;
+ Node possible;
+ Node current = root;
+ Queue<String> chunks = breakRoute(route);
+ while (chunks.Count != 0)
+ {
+ chunk = chunks.Dequeue();
+ if (current.hasChild(chunk))
+ {
+ current = current.Children[chunk];
+ continue;
+ }
+ else
+ {
+ if (current.hasNoChildren())
+ {
+ return null;
+ }
+ foreach (Node node in current.iterDynamicChildren())
+ {
+ possible = walkBranch(new Queue<String>(chunks), node);
+ if (possible != current)
+ {
+ current = node;
+ }
+ }
+ }
+ }
+
+ return current.buildRoute();
+ }
+
+ public Queue<String> breakRoute(String route) { return new Queue<String>(route.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries)); }
+ public Boolean isDynamic(String frag) { return Regex.Match(frag, "<.*>").Success; }
+ }
+
+}
38 Session.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Net;
+using System.IO;
+using Newtonsoft.Json;
+
+namespace TaoEngine
+{
+ public class Session
+ {
+ public string id { get; set; }
+ public bool isNew = false;
+ private Dictionary<string, dynamic> properties = new Dictionary<string, dynamic>();
+
+ public Session(string id)
+ {
+ this.id = id;
+ }
+
+ public dynamic this[string name]
+ {
+ get
+ {
+ if (properties.ContainsKey(name))
+ {
+ return properties[name];
+ }
+ return null;
+ }
+ set
+ {
+ properties[name] = value;
+ }
+ }
+ }
+}
42 SessionOverlord.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Security.Cryptography;
+
+namespace TaoEngine
+{
+ /*
+ * Haha I am the overlord class!
+ */
+ static class SessionOverlord
+ {
+ static private Dictionary<String, Session> sessionMap = new Dictionary<String, Session>();
+
+ static private string generateNewID()
+ {
+ RNGCryptoServiceProvider randomProvider = new RNGCryptoServiceProvider();
+ byte[] randomData = new byte[512];
+ randomProvider.GetBytes(randomData);
+ return Convert.ToBase64String(randomData);
+ //return Encoding.UTF8.GetString(randomData);
+ }
+
+ static public Session getOrMakeSession(string id)
+ {
+ Session value;
+ if (sessionMap.TryGetValue(id, out value)) return value;
+ // Failed to get the session. Create a new one here.
+ string newID = generateNewID();
+ Session newSession = new Session(newID);
+ newSession.isNew = true;
+ sessionMap[newID] = newSession;
+ return newSession;
+ }
+
+ static public void commitSession(Session sessionToCommit)
+ {
+ sessionMap[sessionToCommit.id] = sessionToCommit;
+ }
+ }
+}
188 TaoEngine.cs
@@ -0,0 +1,188 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Reflection;
+using System.Net;
+using System.Text.RegularExpressions;
+
+namespace TaoEngine
+{
+ public class TaoEngine
+ {
+ RoutingSystem router = new RoutingSystem();
+ Dictionary<String, Metadata> methodMap = new Dictionary<string, Metadata>();
+ private HttpListener server;
+ private Response failureResponse;
+ private string site;
+ public static string domain;
+
+ public TaoEngine(String site, Response failureResponse)
+ {
+ this.site = site;
+ TaoEngine.domain = site;
+ this.failureResponse = failureResponse;
+ }
+
+ private Metadata retrieveRoute(String route)
+ {
+ String rule;
+ Metadata data;
+ // if the router returns null then the route is either invalid or incomplete
+ rule = router.matchRoute(route);
+ if (rule == null)
+ {
+ return null;
+ }
+ try { data = methodMap[rule]; }
+ catch (KeyNotFoundException) { return null; }
+ data.methArgs = reduceToArgs(route, rule);
+ return data;
+ }
+
+ private Args reduceToArgs(String route, String rule)
+ {
+ String[] chunksOfRoute = route.Split(new char[] { '/' }, StringSplitOptions.None);
+ String[] chunksOfRule = rule.Split(new char[] { '/' }, StringSplitOptions.None);
+ Dictionary<String, dynamic> args = new Dictionary<string, dynamic>();
+ for (int i = 0; i < chunksOfRoute.Length; i++)
+ {
+ if (router.isDynamic(chunksOfRule[i]))
+ {
+ // find dynamic arg like <name>
+ // store it like this 'name' : 'james'
+ args.Add(chunksOfRule[i].Trim(new char[] { '<', '>' }), chunksOfRoute[i]);
+ }
+ }
+ return new Args(args);
+ }
+
+ private Response invokeRoute(Request request)
+ {
+ Metadata methodMetadata = retrieveRoute(request.path);
+ if (methodMetadata != null)
+ {
+ var method = methodMetadata.method;
+ var klass = methodMetadata.klass;
+ // Prepare the arguements when invoking the method
+ object[] args = { methodMetadata.methArgs, request };
+ Response response = (Response)method.Invoke(klass, args);
+ response.session = request.session;
+ return response;
+ }
+ return null;
+ }
+
+ private void handleSession(Response response, HttpListenerResponse serverResponse)
+ {
+ // We use session a lot, lets make the name a bit more 'local'
+ Session session = response.session;
+ // update our internal cache of the session.
+ SessionOverlord.commitSession(session);
+
+ if (session.isNew)
+ {
+ Cookie cookie = new Cookie("sessionID", session.id);
+ // Set the expiry date
+ String expires = DateTime.UtcNow.AddMinutes(30).ToString("ddd, dd-MMM-yyyy H:mm:ss");
+ serverResponse.Headers.Add("Set-Cookie", "sessionID=" + session.id + ";Path=/;Expires=" + expires + " GMT");
+ session.isNew = false;
+ }
+
+ }
+
+ private void writeResponse(Response response, HttpListenerResponse serverResponse)
+ {
+ // Now write the actual response.
+ serverResponse.ContentType = response.mimeType;
+ serverResponse.StatusCode = response.status;
+
+ byte[] buffer = Encoding.UTF8.GetBytes(response.render());
+ serverResponse.ContentLength64 = buffer.Length;
+ serverResponse.OutputStream.Write(buffer, 0, buffer.Length);
+ serverResponse.OutputStream.Close();
+ }
+
+ private void handleContextAsync(IAsyncResult asyncContext)
+ {
+ HttpListenerContext context = server.EndGetContext(asyncContext);
+ Request request = new Request(context.Request);
+ Console.WriteLine("TaoEngine: Got request for following path: {0}", request.path);
+
+ Response response = null;
+ try
+ {
+ response = invokeRoute(request);
+ if (response == null)
+ {
+ // Right. So when we get back a null response from the router, we can't write the session.
+ response = failureResponse.clone().setStatus(404);
+ }
+ }
+ catch (Exception e)
+ {
+ // ugh.
+ Dictionary<String,String> errorMessage = new Dictionary<string,string>();
+ errorMessage.Add("err", e.ToString());
+ response = failureResponse.clone().setStatus(500).addNamespace(errorMessage);
+ }
+ finally
+ {
+ Console.WriteLine("Response code: {0}", response.status);
+ if (response.session != null)
+ {
+ handleSession(response, context.Response);
+ }
+ writeResponse(response, context.Response);
+ context.Response.Close();
+ }
+
+ // Start listening for another request.
+ server.BeginGetContext(new AsyncCallback(handleContextAsync), null);
+ }
+
+ public void registerClass(Object klass)
+ {
+ Type klass_type = klass.GetType();
+ Console.WriteLine("TaoEngine: Registering Routes.\n");
+ foreach (var method in klass_type.GetMethods())
+ {
+ object[] routes = method.GetCustomAttributes(typeof(Route), false);
+ try
+ {
+ object route_object = routes[0];
+ Route _route = (Route)route_object;
+ foreach (String rule in _route.routes)
+ {
+ router.addRoute(rule);
+ Console.WriteLine("TaoEngine: Rule = {0}\n Matching Method = {1}.{2}\n", rule, klass_type.Name, method.Name);
+ methodMap.Add(rule, new Metadata(klass, method));
+ }
+ }
+ catch (IndexOutOfRangeException)
+ {
+ // We don't care if we failed to register a method. Their loss?
+ }
+
+ }
+ }
+
+ public void spin()
+ {
+ using (server = new HttpListener())
+ {
+ server.Prefixes.Add(this.site);
+
+ Console.WriteLine("\nTaoEngine: Starting " + server);
+ server.Start();
+
+ server.BeginGetContext(new AsyncCallback(handleContextAsync), null);
+
+ while (server.IsListening)
+ {
+ // hold main thread.
+ }
+ }
+ }
+ }
+}
78 TaoEngineRelease.csproj
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>8.0.30703</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{8BAF647E-82F5-4730-A697-0D6C590608F1}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>TaoEngine</RootNamespace>
+ <AssemblyName>TaoEngine</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Final|AnyCPU'">
+ <OutputPath>bin\Final\</OutputPath>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="Antlr3.StringTemplate">
+ <HintPath>..\packages\Antlr3.StringTemplate.3.4.1.9005\lib\net35\Antlr3.StringTemplate.dll</HintPath>
+ </Reference>
+ <Reference Include="Newtonsoft.Json">
+ <HintPath>..\packages\Newtonsoft.Json.4.5.10\lib\net40\Newtonsoft.Json.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Arguments.cs" />
+ <Compile Include="Filetemplate.cs" />
+ <Compile Include="ITemplate.cs" />
+ <Compile Include="Metadata.cs" />
+ <Compile Include="Node.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="Request.cs" />
+ <Compile Include="Response.cs" />
+ <Compile Include="Route.cs" />
+ <Compile Include="RoutingSystem.cs" />
+ <Compile Include="Session.cs" />
+ <Compile Include="RawTemplate.cs" />
+ <Compile Include="SessionOverlord.cs" />
+ <Compile Include="TaoEngine.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="packages.config" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project>
BIN  bin/Debug/Antlr3.StringTemplate.dll
Binary file not shown
BIN  bin/Debug/Antlr3.StringTemplate.pdb
Binary file not shown
BIN  bin/Debug/Newtonsoft.Json.dll
Binary file not shown
7,659 bin/Debug/Newtonsoft.Json.xml
7,659 additions, 0 deletions not shown
BIN  bin/Debug/TaoEngine.dll
Binary file not shown
BIN  bin/Debug/TaoEngine.pdb
Binary file not shown
BIN  bin/Final/Antlr3.StringTemplate.dll
Binary file not shown
BIN  bin/Final/Antlr3.StringTemplate.pdb
Binary file not shown
BIN  bin/Final/Newtonsoft.Json.dll
Binary file not shown
7,659 bin/Final/Newtonsoft.Json.xml
7,659 additions, 0 deletions not shown
BIN  bin/Final/TaoEngine.dll
Binary file not shown
BIN  obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
Binary file not shown
BIN  obj/Debug/TaoEngine.dll
Binary file not shown
BIN  obj/Debug/TaoEngine.pdb
Binary file not shown
9 obj/Debug/TaoEngineRelease.csproj.FileListAbsolute.txt
@@ -0,0 +1,9 @@
+C:\Users\jakob.warmachine\Documents\Visual Studio 2010\Projects\TaoEngineRelease\TaoEngineRelease\bin\Debug\TaoEngine.dll
+C:\Users\jakob.warmachine\Documents\Visual Studio 2010\Projects\TaoEngineRelease\TaoEngineRelease\bin\Debug\TaoEngine.pdb
+C:\Users\jakob.warmachine\Documents\Visual Studio 2010\Projects\TaoEngineRelease\TaoEngineRelease\bin\Debug\Antlr3.StringTemplate.dll
+C:\Users\jakob.warmachine\Documents\Visual Studio 2010\Projects\TaoEngineRelease\TaoEngineRelease\bin\Debug\Newtonsoft.Json.dll
+C:\Users\jakob.warmachine\Documents\Visual Studio 2010\Projects\TaoEngineRelease\TaoEngineRelease\bin\Debug\Antlr3.StringTemplate.pdb
+C:\Users\jakob.warmachine\Documents\Visual Studio 2010\Projects\TaoEngineRelease\TaoEngineRelease\bin\Debug\Newtonsoft.Json.xml
+C:\Users\jakob.warmachine\Documents\Visual Studio 2010\Projects\TaoEngineRelease\TaoEngineRelease\obj\Debug\ResolveAssemblyReference.cache
+C:\Users\jakob.warmachine\Documents\Visual Studio 2010\Projects\TaoEngineRelease\TaoEngineRelease\obj\Debug\TaoEngine.dll
+C:\Users\jakob.warmachine\Documents\Visual Studio 2010\Projects\TaoEngineRelease\TaoEngineRelease\obj\Debug\TaoEngine.pdb
BIN  obj/Final/DesignTimeResolveAssemblyReferencesInput.cache
Binary file not shown
BIN  obj/Final/TaoEngine.dll
Binary file not shown
7 obj/Final/TaoEngineRelease.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+C:\Users\jakob.warmachine\Documents\Visual Studio 2010\Projects\TaoEngineRelease\TaoEngineRelease\bin\Final\TaoEngine.dll
+C:\Users\jakob.warmachine\Documents\Visual Studio 2010\Projects\TaoEngineRelease\TaoEngineRelease\bin\Final\Antlr3.StringTemplate.dll
+C:\Users\jakob.warmachine\Documents\Visual Studio 2010\Projects\TaoEngineRelease\TaoEngineRelease\bin\Final\Newtonsoft.Json.dll
+C:\Users\jakob.warmachine\Documents\Visual Studio 2010\Projects\TaoEngineRelease\TaoEngineRelease\bin\Final\Antlr3.StringTemplate.pdb
+C:\Users\jakob.warmachine\Documents\Visual Studio 2010\Projects\TaoEngineRelease\TaoEngineRelease\bin\Final\Newtonsoft.Json.xml
+C:\Users\jakob.warmachine\Documents\Visual Studio 2010\Projects\TaoEngineRelease\TaoEngineRelease\obj\Final\ResolveAssemblyReference.cache
+C:\Users\jakob.warmachine\Documents\Visual Studio 2010\Projects\TaoEngineRelease\TaoEngineRelease\obj\Final\TaoEngine.dll
5 packages.config
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="Antlr3.StringTemplate" version="3.4.1.9005" targetFramework="net40" />
+ <package id="Newtonsoft.Json" version="4.5.10" targetFramework="net40" />
+</packages>
Please sign in to comment.
Something went wrong with that request. Please try again.