Akane.Server.callback C# (CSharp) Method

callback() public method

public callback ( IAsyncResult result ) : void
result IAsyncResult
return void
        public void callback(IAsyncResult result)
        {
            HttpListener listener = (HttpListener)result.AsyncState;
            if (!listener.IsListening)
                return;

            HttpListenerContext context = listener.EndGetContext(result);
            HttpListenerRequest req = context.Request;
            HttpListenerResponse res = context.Response;

            StreamWriter sw = new StreamWriter(res.OutputStream);
            res.StatusCode = 200;

            if (!playing)
            {
                sw.Write("HAHAHA");
                res.StatusCode = 404;
            }
            else if (req.HttpMethod == "POST" && req.Url.LocalPath == "/answer")
            {
                StreamReader reader = new StreamReader(req.InputStream);
                string str = reader.ReadToEnd();
                reader.Close();

                System.Collections.Specialized.NameValueCollection qs = HttpUtility.ParseQueryString(str);
                Answer ans = new Answer(qs["ans"]);
                if (ans != null && !String.IsNullOrEmpty(qs["token"]) && Array.IndexOf(this.tokens, qs["token"]) != -1 && this.ansCallback.onAnswer(qs["token"], ans))
                {
                    sw.Write("Accept");
                }
                else
                {
                    sw.Write("Invalid");
                    res.StatusCode = 403;
                }
            }
            else if (req.HttpMethod == "GET" && req.Url.LocalPath == "/quest" + this.id + ".txt")
            {
                if (!String.IsNullOrEmpty(req.QueryString["token"]) && Array.IndexOf(this.tokens, req.QueryString["token"]) != -1)
                {
                    sw.Write(problem);
                }
                else
                {
                    sw.Write("Invalid");
                    res.StatusCode = 403;
                }
            }
            else if (req.HttpMethod == "GET" && req.Url.LocalPath == "/form")
            {
                sw.Write("<!DOCTYPE html><html lang=\"ja\"><head><meta charset=\"UTF-8\" /><title>SubmitForm</title></head><body><form method=\"post\" action=\"/answer\">Token : <input type=\"text\" name=\"token\" /><br /><hr />AnswerText :<br /><textarea name=\"ans\" cols=\"75\" rows=\"20\"></textarea><br /><input type=\"submit\" /></form></body></html>");
            }
            else
            {
                sw.Write("HA?");
                res.StatusCode = 404;
            }
            sw.Flush();
            res.Close();

            this.listener.BeginGetContext(this.callback, this.listener);
        }