Home > 未分類 > ぷちカウンター強化。

ぷちカウンター強化。

引越しのために掃除中・・・全然終わらん。終わらないこともないけど、いざ捨てようと思うともったいなくてたまらない…

スキャナ
でかい。1980円で買ったNEC製捨てたほうがいいやもしれん。
歴代CPU
裏がとげとげしている。一応残っている中で一番古かったのはMMX Pentium。文鎮代わりに使えるか・・・?
歴代ビデオカード
ソフマップで買ってくれるだろうか・・・Millenium G400系が多いかも。

あと、ゲームの箱とか冴木忍の本とか(カイルロッドあたりは捨てがたい・・・もうだいぶ読んでないけど)、とにかく本が多くて、文庫本は全部捨てようと画策中。

で、ぷち掲示板を*ascx化してみました。昨日よりはだいぶましなコードになっていると思うけど・・・どうだろ。ログはもう簡単な形でいいかなぁとか思ってみたり。無駄にsleep()しているのは、ローディングイメージがクルクルしているのをみたいから!

AjaxMemo.ascx

これが部品になります。

<%@ Control Language="C#" ClassName="AjaxMemo" %>
<script language="javascript" type="text/javascript" src="Ajax.js"></script>
<script language="javascript" type="text/javascript">
<!--
function preload() {
    var img01 = new Image();
    img01.src = "img/loading.gif";
}

function readFile()
{
    request = createXMLHttpRequest();
    if (request)
    {
        time = (new Date()).getTime();
        request.onreadystatechange = load;
        request.open("GET", "edit.aspx?" + time, true);
        request.send(null);
    }
}

function saveFile(author, text)
{
    request = createXMLHttpRequest();
    if (request)
    {
        command = "edit.aspx?"
                + "author=" + encodeURI(author) + "&"
                + "text="   + encodeURI(text);
        request.onreadystatechange = load;
        request.open("GET", command, true);
        request.send(null)
    }
    document.form1.Text2.value = "";
}

function load()
{
    if (request.readyState == 4)
    {
        switch(request.status)
        {
            case 200:
                text = request.responseText;
                break;
            case 403:
                text = "access denied.";
                break;
            case 404:
                text = "file not faund.";
                break;
        }
    }
    else
    {
        text = "<img src=\"img/loading.gif\" "
            + "style=\"vertical-align: middle;\" /> loading..."
    }
    $("log").innerHTML = text;
}

function Button1_onclick()
{
    saveFile($("Text1").value, $("Text2").value);
}

function Button2_onclick()
{
    readFile();
}
// --></script>
<script runat="server">
    protected void Page_Load(Object sender, EventArgs e)
    {
        string script = "<script language='JavaScript'>preload(); readFile()<"
            + "/script>";
        Page.RegisterStartupScript("startup", script);
    }
</script>
<div class="entry">
    <h2 class="entry-header">Memo</h2>
    <div class="entry-content">
    <p>ぷち伝言板。エッチな||差別的な落書きはダメ、絶対。Powered by Ajax + ASP.net</p>
    <input id="Text1" type="text" style="width: 100px;" />
    <input id="Text2" type="text" style="width: 280px;" />
    <input id="Button1" type="button" value="Write"
        language="javascript" onclick="Button1_onclick()" />
    <input id="Button2"  type="button" value="Reload"
        language="javascript" onclick="Button2_onclick()" />
    <div id="log" style="border: solid 1px gray; padding: 1em; margin-top: 1em;">
    </div>
    </div>
</div>

edit.aspx

書き換えCGI部分

<%@ Page Language="C#" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Drawing" %>
<script runat="server">
    /* Output line count */
    private const int count = 10;
    private const string password = "******";
    private Color color = Color.Red;

    protected void Page_Load(object sender, System.EventArgs e)
    {
        string path = Server.MapPath("memo.txt");
        string log = string.Empty;
        using (StreamReader reader = new StreamReader(path))
        {
            log = reader.ReadToEnd();
        }

        string text   = Request["text"];
        string author = Request["author"];
        try
        {
            text = HttpUtility.UrlDecode(text);
            text = text.Replace("&", "&amp;");
            text = text.Replace("<", "&lt;");
            text = text.Replace(">", "&gt;");
            author = HttpUtility.UrlDecode(author);
            author = author.Replace("&", "&amp;");
            author = author.Replace("<", "&lt;");
            author = author.Replace(">", "&gt;");
        }
        catch
        {
            /* Bad request - output only - */
            goto output;
        }

        if (author == password)
            author = "<span style=\"color: "
                + color.Name
                + "\"; >Gatz (admin)</span>";

        /* insert "author: text [datetime]" to log */
        log = string.Format("{0}: {1} [ {2} ]\r\n{3}",
            author, text,
            DateTime.Now.ToString("G"), log);

        using (StreamWriter writer = new StreamWriter(path))
        {
            writer.Write(log);
        }

    output: /* CGI Output */
        System.Threading.Thread.Sleep(1000);
        string[] logs = log.Replace("\r\n", "\n").Split('\n');
        log = string.Empty;
        for (int i = 0; i < count && i < logs.Length; i++)
            log += logs[i] + "<br />";
        Response.Write(log);
    }
</script>

ローカルではうまくいくんですけど、サーバーにアップするとタグ入りのコメントを入れるとずーっとローディング状態に。多分どこかにASP.net2.0依存の部分があるんでしょう・・・

ajax.js

外部ファイルに書いたJavaScript部分。おいおい育てていきましょう

function $(tagId)
{
    return document.getElementById(tagId);
}

function createXMLHttpRequest()
{
    try
    {
        return new ActiveXObject ("Microsoft.XMLHTTP");
    }
    catch (e)
    {
        try {
            return new XMLHttpRequest();
        }
        catch (e)
        {
            return null;
        }
    }
    return null;
}

拙いですけど―不審な点があればご意見いただけるとうれしいかなぁ。それより先に攻撃されそうだけどorz(誰も狙わないか^^;)

Home > 未分類 > ぷちカウンター強化。

My Friend Feed

http://friendfeed.com/daruyanagi

Google Analyticator

610
 Unique Visitors 
 (1 day) 
Powered By Google Analytics

Return to page top