IEnumerator CoProcessFileGet(HttpListenerContext context, string path)
        {
            var request = context.Request;

            Debug.Assert(request.HttpMethod == "GET");
            var ret = new CoroutineReturnValue <string>();

            yield return(DebugServerUtil.CoLoad(ret, path, overrideEnabled: true));

            var response = context.Response;

            if (ret.Exception != null)
            {
                response.StatusCode = (int)HttpStatusCode.InternalServerError;
                response.Close();
            }
            else
            {
                var ext    = System.IO.Path.GetExtension(path);
                var isText = (ext == ".txt") ||
                             (ext == ".json") ||
                             (ext == ".html") ||
                             (ext == ".htm") ||
                             (ext == ".xml") ||
                             (ext == ".yaml") ||
                             (ext == ".csv");
                var sb     = new StringBuilder();
                var writer = HtmlUtil.CreateWriter(sb);
                var title  = path;
                HtmlUtil.WriteHeader(writer, title);
                writer.WriteStartElement("body");
                writer.WriteElementString("h1", title);
                if (isText)
                {
                    HtmlUtil.WriteTextarea(writer, "text", 20, 60, ret.Value);
                    HtmlUtil.WriteBr(writer);
                    HtmlUtil.WriteInput(writer, "update", "button", "submit");
                }

                HtmlUtil.WriteInput(writer, "delete", "button", "delete file");
                HtmlUtil.WriteBr(writer);

                HtmlUtil.WriteInput(writer, "file", "file");
                HtmlUtil.WriteInput(writer, "upload", "button", "upload file");
                HtmlUtil.WriteBr(writer);

                HtmlUtil.WriteOutput(writer, "log");

                writer.WriteStartElement("script");
                writer.WriteString(fileGetScript);
                writer.WriteEndElement();                 //script
                writer.WriteEndElement();                 //body
                writer.WriteEndElement();                 //html
                writer.Close();

                var html  = sb.ToString();
                var bytes = Encoding.UTF8.GetBytes(html);
                response.Close(bytes, willBlock: false);
            }
        }