void Awake()
    {
        HttpResponseBehaviour[] behaviours = GetComponents <HttpResponseBehaviour>();
        foreach (var behaviour in behaviours)
        {
            responders[behaviour.Name] = behaviour;

            object[] result = behaviour.GetType().GetCustomAttributes(typeof(FileResponderAttribute), false);
            if (result != null && result.Length == 1)
            {
                fileResponder = behaviour;
            }
        }
    }
    public string SendResponse(HttpListenerRequest request)
    {
        // http://localhost:8080/mygame/htdocs
        // XXXXXXXXXXXXXXXXXXXXXXXXXXXXXhtdocs
        string entryPoint = request.Url.AbsoluteUri.Substring(entryPointUrl.Length);

        HttpResponseBehaviour responder = null;

        if (responders.TryGetValue(entryPoint, out responder))
        {
            return(responder.GetResponse(request));
        }
        else if (entryPoint.EndsWith(".html") || entryPoint.EndsWith(".htm"))
        {
            if (fileResponder != null)
            {
                return(fileResponder.GetResponse(request));
            }
        }

        return(string.Format("<HTML><BODY>Invalid entry point. Unknown API call {0}<br>{1}</BODY></HTML>", entryPoint, DateTime.Now));
    }