joho2_time
改造のヒント:書き込み時刻を追加する
サーバ側のadd_chat2, read_chat2,クライアント側 Main2を改造して,書き込まれた時刻をデータとして記録し,チャットシステムで表示するようにしてみましょう.
データファイルの仕様
時刻を格納するファイルをuser/chat3.txtとします.それぞれの行に「名前」と「内容」と「書き込まれた時刻」をタブで区切って格納します.
yamada hello 2024/02/12 10:10:49 田中次郎 てすとです 2024/02/12 11:13:48 abcde おなかすいた 2024/02/12 16:25:30
それぞれのプログラムの役割
- サーバ側
- 書き込みを追加するadd_chat3
- 書き込みを表示するread_chat3
- クライアント側
- サーバのプログラムを読み出して書き込み,読込を行うMain3
これまでのプログラムから大きく変更があるのは,add_chat3です.プログラムが呼び出されたときに,現在時刻をuser/chat3.txtに記録するようにします.なお,受け取るデータは「名前」と「書き込み」だけです.クライアント側のMain3で送信するデータ,書き込みのためのユーザインタフェースは変更ありません.
Pythonで時刻を取得する方法
時刻はサーバ側で記録するため,Pythonで時刻を取得する方法が必要です.適当な名前のファイルを作って,次のプログラムを「サーバで実行」して,動作を確認してみましょう.
import datetime
t_delta = datetime.timedelta(hours=9)
JST = datetime.timezone(t_delta, 'JST')
now = datetime.datetime.now(JST)
t=now.strftime("%Y/%m/%d %H:%M:%S")
print(t)
改造後のプログラムを以下に示しますが,ここまでの段階で,生徒に自分でプログラムを考えてもらうことも可能です.
server/add_chat3(Python)
import datetime
t_delta = datetime.timedelta(hours=9)
JST = datetime.timezone(t_delta, 'JST')
now = datetime.datetime.now(JST)
#現在時刻を取得
t=now.strftime("%Y/%m/%d %H:%M:%S")
name=input()
content=input()
f=open("user/chat3.txt","a")
#書き込むときに,現在時刻も行に含める.
f.write(name+"\t"+content+"\t"+t+"\n")
f.close()
print("Write end")
server/read_chat3(Python)
f=open("user/chat3.txt","r")
for i in f:
print(i,end="")
f.close()
client/Main3(JavaScript)
serverTop="https://run.eplang.jp/bitarrow/fs/pub/5d9fc1ce/";
readUrl=serverTop+"read_chat3.html";
addUrl=serverTop+"add_chat3.html";
onClick("write",write);
read();
function write() {
setText("result","Running at Server...");
result=callServer(addUrl,getText("name")+"\n"+getText("content"));
setText("result",result);
read();
}
function read() {
var r=callServer(readUrl);
var lines=r.split("\n");
setText("hist","");
for (var line of lines) {
var data=line.split("\t");
if (data.length<2) continue;
var name=data[0];
var content=data[1];
var time=data[2];//時刻の取り出し
addText("hist","名前: "+name+"<br/>");
addText("hist","内容: "+content+"<br/>");
//時刻の表示
addText("hist","時刻: "+time+"<br/>");
addText("hist","<hr/>\n");
}
}