え?全力で生きているかって?
――答えはYesだ。当たり前だろそれが人生なんだよ!!
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
1/31 11:47 ソース修正(if msg=="get()" then 付近からファイルチェック追記)
ということで、メール受信サーバー作ったからソース晒す。
一応このへんとかこのへんとか見ればAPIとか分かりますんで。
基本lua言語ですよ。大丈夫や俺だってこれが初めてなんやから。
ということでソース。の前にいくつかお話。
1つ目。モデムの設定から。
まぁ普通にモデム作るじゃん?shift押しながらマシンに貼っつけるじゃん?でもこれだけじゃぁだめなんだな。律儀にモデムをONにしてやらなきゃならんのだよ。なかなかこだわっとるわ。
ということで、ルートディレクトリにstartupってのを作って、マシン起動時にモデムONになるように設定してやる。startupってのを作ることで、マシン起動したときにそのファイルに書かれたことを実行するようになる。
romディレクトリの中にもあるけどそれとちゃうで!一緒かもしれんけどそれはいじらんほうがいい。ちゃんとルートに作れよ!
cd /
edit startup
って打つとエディタ起動
起動したら
rednet.open("モデムつけた場所")
って書く。モデムつけた場所は、パソコン正面から見て
て書けばおk。俺は背面につけたから、rednet.open("back") って書いた。
これもwikiに書いてあるからちゃんと読みましょう。
書いたら、ctrl押してsave、ctrl押してexitでエディタ終了させる。
これで、パソコン起動したらモデムがONになるよ。
試しに、reboot って打ってみ。起動してからモデム見たら赤く光っとるで。完璧やん。
ちなみにrednet.open()だが、プログラム書くときに一番上に書いといてもおk。というか、ソース共有するときだったら書いたほうがいいのかもしれない。が、俺はもうモデムONがデフォという考え方でいく。
これを、サーバー機とメインマシンとどっちもやっとく。
そしてもう一つ。idって打ってどっちもマシンのIDを調べとくこと。メッセージ送信するときに必要。
2つ目。rednetのお話をちょっと。
今回ネックになってるのが、rednet.send()とrednet.receive()の部分。なぜかというと、相手がreceive()で待ち構えている時じゃないとsend()したメッセージが届かないから。
しかしずっとreceive()で待機なんかするわけないやん。作業でけへんもんな。どうしよか。じゃぁ代わりにサーバーたんに受信頼もうよってのが今回の趣旨。
つまり、メッセージを一回サーバーで受信してもらって、それを転送してもらうっていう動作をする。
…面倒ですよね。でもこれでメインマシンで何してても常にメール受信できるんです!何通でもどうぞwwwって感じ。
3つ目。今回のマシン周りの設置
こんな感じ。2つPCあるけど受信サーバーは左側のPC。右側のPCはまだ関係ない。

メール受信したらレッドストーントーチが光るようにしたった

プログラム起動したらこんなかんじでメール受信待機

メッセージ受信したら一応メッセージ表示される。
裏でlogにメッセージ書き貯めていって、また待ち始める。

メインマシンから要求がきたら、今までサーバーが受信したメールを全部転送し始める。
今回作ったプログラムの動作イメージを書くとこんな感じ。
メールをずっと待ってるサーバーたん
↓
メールきた!
↓
メールの内容で動作が変わるよ
・メッセージの内容が「get()」やったら
→ログ(未読メッセージ)をメインマシンに送る(レッドストーントーチ ジュワ...消)
・メッセージの内容が「getall()」やったら
→全ログ(メッセージ一覧)をメインマシンに送る
・それ以外(hi とか hello とか)やったら
→ログに書き溜める(レッドストーントーチ ピッカーン 光)
↓
またメールを待つサーバーたん
という感じ。
じゃぁソース晒そうか。面倒くさがりな俺だがたまにはコメントつけて丁寧に解説しよう
今回の環境を書いとくと、
・メインマシン→アドバンスドPC。ID=27
・メール受信サーバー→普通のPC。ID=28
あと、
・コメントは -- (ハイフン2つ)の部分。luaの仕様。
・日本語のコメントは書けない。書けても書くな。
・英語のコメントは実際に俺も書いた。書かなくてもいいがこれぐらい書いといたほうが後で多少捗るかもね
・「受信ランプ」ってコメントがあるが、受信した時にレッドストーントーチを光らせるように設定したかったらそれ書いて。いらなければ消すかコメントアウトでよろしく。細かい説明は後でする。
今回のプログラム名はpop_serverでいく。ここは好きに変えてもらっておk。
じゃぁ始める。edit pop_server って打ってエディタ起動。以下ソースコード
ソースコード以上。
もし間違いがあったら遠慮なくコメント欄へ「ここ間違ってるわハゲ!」ってコメントください。
もしそっちの間違いだったらこっちから「間違ってへんわハゲ!」って返すけど。
後回しになったレッドストーントーチのお話な。
rs.setOutput("出力方向",true or false)でレッドストーン回路の出力ができる。
今回、レッドストーン回路がサーバー機の左側にあるから、出力方向はleft。
で、trueとfalseだが、単純にonとoff。このへんはレッドストーントーチの特性みたいなもんを使ったアレなわけだが、スイッチとか使って一応説明しとく。
rs.setOutput("left",true)の状態がこれ

で、rs.setOutput("left",false)の状態がこれ

スイッチがパソコンに変わっただけ。ということ。
で、最後。起動したときにこのプログラムを立ち上げるように設定したかったら設定するといい。
最初に編集したstartupに以下を追加
shell.run("pop_server")
これでマシンが起動したら自動的にプログラムが動作してメール受信待ち状態になる。
動作確認の方法だが、メインマシンで lua て打つとluaが立ち上がる。
ここで、コマンドをいくつか打つと確認ができる。
今回はサーバーIDが28だからそれで行くけどそのへん臨機応変に。
・メッセージ送信
rednet.send(28,"test")
・未読メッセージ受信
rednet.send(28,"get()")
rednet.receive()
rednet.send(28,"stop()")
・全メッセージ受信
rednet.send(28,"get()")
rednet.receive()
rednet.send(28,"stop()")
ということでメール受信サーバー設置編は以上。
このままではまだ不便ということで、次はメインマシンで使うメールクライアントを作るよ。
メール受信サーバー作ったった(クライアント作成編)へ続く
ということで、メール受信サーバー作ったからソース晒す。
一応このへんとかこのへんとか見ればAPIとか分かりますんで。
基本lua言語ですよ。大丈夫や俺だってこれが初めてなんやから。
ということでソース。の前にいくつかお話。
1つ目。モデムの設定から。
まぁ普通にモデム作るじゃん?shift押しながらマシンに貼っつけるじゃん?でもこれだけじゃぁだめなんだな。律儀にモデムをONにしてやらなきゃならんのだよ。なかなかこだわっとるわ。
ということで、ルートディレクトリにstartupってのを作って、マシン起動時にモデムONになるように設定してやる。startupってのを作ることで、マシン起動したときにそのファイルに書かれたことを実行するようになる。
romディレクトリの中にもあるけどそれとちゃうで!一緒かもしれんけどそれはいじらんほうがいい。ちゃんとルートに作れよ!
cd /
edit startup
って打つとエディタ起動
起動したら
rednet.open("モデムつけた場所")
って書く。モデムつけた場所は、パソコン正面から見て
右:right
左:left
上:top
背面:back
左:left
上:top
背面:back
て書けばおk。俺は背面につけたから、rednet.open("back") って書いた。
これもwikiに書いてあるからちゃんと読みましょう。
書いたら、ctrl押してsave、ctrl押してexitでエディタ終了させる。
これで、パソコン起動したらモデムがONになるよ。
試しに、reboot って打ってみ。起動してからモデム見たら赤く光っとるで。完璧やん。
ちなみにrednet.open()だが、プログラム書くときに一番上に書いといてもおk。というか、ソース共有するときだったら書いたほうがいいのかもしれない。が、俺はもうモデムONがデフォという考え方でいく。
これを、サーバー機とメインマシンとどっちもやっとく。
そしてもう一つ。idって打ってどっちもマシンのIDを調べとくこと。メッセージ送信するときに必要。
2つ目。rednetのお話をちょっと。
今回ネックになってるのが、rednet.send()とrednet.receive()の部分。なぜかというと、相手がreceive()で待ち構えている時じゃないとsend()したメッセージが届かないから。
しかしずっとreceive()で待機なんかするわけないやん。作業でけへんもんな。どうしよか。じゃぁ代わりにサーバーたんに受信頼もうよってのが今回の趣旨。
つまり、メッセージを一回サーバーで受信してもらって、それを転送してもらうっていう動作をする。
…面倒ですよね。でもこれでメインマシンで何してても常にメール受信できるんです!何通でもどうぞwwwって感じ。
3つ目。今回のマシン周りの設置
こんな感じ。2つPCあるけど受信サーバーは左側のPC。右側のPCはまだ関係ない。
メール受信したらレッドストーントーチが光るようにしたった
プログラム起動したらこんなかんじでメール受信待機
メッセージ受信したら一応メッセージ表示される。
裏でlogにメッセージ書き貯めていって、また待ち始める。
メインマシンから要求がきたら、今までサーバーが受信したメールを全部転送し始める。
今回作ったプログラムの動作イメージを書くとこんな感じ。
メールをずっと待ってるサーバーたん
↓
メールきた!
↓
メールの内容で動作が変わるよ
・メッセージの内容が「get()」やったら
→ログ(未読メッセージ)をメインマシンに送る(レッドストーントーチ ジュワ...消)
・メッセージの内容が「getall()」やったら
→全ログ(メッセージ一覧)をメインマシンに送る
・それ以外(hi とか hello とか)やったら
→ログに書き溜める(レッドストーントーチ ピッカーン 光)
↓
またメールを待つサーバーたん
という感じ。
じゃぁソース晒そうか。面倒くさがりな俺だがたまにはコメントつけて丁寧に解説しよう
今回の環境を書いとくと、
・メインマシン→アドバンスドPC。ID=27
・メール受信サーバー→普通のPC。ID=28
あと、
・コメントは -- (ハイフン2つ)の部分。luaの仕様。
・日本語のコメントは書けない。書けても書くな。
・英語のコメントは実際に俺も書いた。書かなくてもいいがこれぐらい書いといたほうが後で多少捗るかもね
・「受信ランプ」ってコメントがあるが、受信した時にレッドストーントーチを光らせるように設定したかったらそれ書いて。いらなければ消すかコメントアウトでよろしく。細かい説明は後でする。
今回のプログラム名はpop_serverでいく。ここは好きに変えてもらっておk。
じゃぁ始める。edit pop_server って打ってエディタ起動。以下ソースコード
print("pop server #28\n")
--print()で文字の出力ができる。
--#28ってのはサーバーIDが28だったから
--\nは改行。
SEND_ID=27 --メインマシンのID。今回は27
SEND_ID=tonumber(SEND_ID) --説明省略
---------------
--file writer
---------------
--ファイル書き込みする関数を作る
filewriter=function(filename,str)
--file open
file=io.open(filename,"a") --ファイルを追記モードでオープン
--writing
if file then
file:write(str) --ファイルに書き込み
else
print("Cannot writing!") --エラー処理は忘れずに☆
end
--file close
file:close() --ファイルクローズは基本ですよ
end
--sign off
rs.setOutput("left",true) --受信ランプ off
----------
--main
----------
while true do --無限ループ
--message get wait
print("waiting...") --メッセージ受信待機のとき表示
event,id,msg=os.pullEvent("rednet_message")
--os.pullEvent("rednet_message")
--rednet.receive()と見かけの動作は同じ
--なんでreceive()じゃないかって?大人の事情だよ
print("--------------------")
print("id:"..id)
print("msg:"..msg)
print("--------------------")
--上の4行は書かなくてもいい。
--受信したメッセージが見れるだけ
b=false --(ry
if msg=="get()" then
--log forwarding
--今回は未読のメッセージをlogとして保存していく
--未読メッセージの送信を行う部分
if fs.exists("/log") then
--未読メッセージがある場合
if fs.exists("/log") then
--未読メッセージがある場合
--log message load
logfile=io.open("/log","r") --/logを読み込みモードでオープン
logmsg=logfile:read("*a") --*aでファイル上から下まで読み込み
--message send
while b==false do --bがfalseの状態なら無限ループ
print("sending...") --送信中表示
rednet.send(SEND_ID,logmsg)
--rednet.send(相手ID,メッセージ)でメッセージ送信
--ここではメインマシンに未読メッセージ送信
id,msg=rednet.receive(2)
--2秒間だけメッセージ受信
--ここで「stop()」ってメッセージが来たら送信をやめる
if msg=="stop()" then
b=true --bがtrueになったからループ終了
end
end
else
--未読メッセージがない場合
while b==false do
print("sending...")
rednet.send(SEND_ID,"Mail is empty.")
id,msg=rednet.receive(2)
if msg=="stop()" then
b=true
end
end
end
--未読メッセージがない場合
while b==false do
print("sending...")
rednet.send(SEND_ID,"Mail is empty.")
id,msg=rednet.receive(2)
if msg=="stop()" then
b=true
end
end
end
--sign off
rs.setOutput("let",true) --受信ランプ off
--logfile delete
fs.delete("/log")
--ログファイル削除
--ここで削除することで未読メッセージだけ貯められる
elseif msg=="getall()" then
--alllog forwarding
--今度は今まで受信したすべてのメッセージを返す
--動作自体はさっきの部分と同じ
--alllog message load
alllogfile=io.open("/alllog","r")
alllogmsg=alllogfile:read("*a")
--message send
while b==false do
print("sending...")
rednet.send(SEND_ID,alllogmsg)
id,msg=rednet.receive(2)
if msg=="stop()" then
b=true
end
end
--今回はランプの動作はしないんだよ
--ログも消す必要ナッシング
else
--write message to log
--ログファイルに受信したメッセージを書き込む
--sign on
rs.setOutput("left",false) --受信ランプ on
--get minecraft day&time
--マイクラ内時間の取得。それっぽくね
time=os.time() --時間取得
time=textutils.formatTime(time,flase) --書式設定
day=os.day() --日にち取得。過ごした日数
--write message to file
--ここで書き込む書式を決めてやってから書き込む
str_date="date:"..day..","..time.."\n"
str_msg="id:"..id.."\nmessage:"..msg.."\n"
str_line="----------------------------\n"
--writing!
--最初に作った関数を使って書き込む
--まずはlogのほうから
filewriter("/log",str_date)
filewriter("/log",str_msg)
filewriter("/log",str_line)
--alllogにも書き込み
filewriter("/alllog",str_date)
filewriter("/alllog",str_msg)
filewriter("/alllog",str_line)
end
end
ソースコード以上。
もし間違いがあったら遠慮なくコメント欄へ「ここ間違ってるわハゲ!」ってコメントください。
もしそっちの間違いだったらこっちから「間違ってへんわハゲ!」って返すけど。
後回しになったレッドストーントーチのお話な。
rs.setOutput("出力方向",true or false)でレッドストーン回路の出力ができる。
今回、レッドストーン回路がサーバー機の左側にあるから、出力方向はleft。
で、trueとfalseだが、単純にonとoff。このへんはレッドストーントーチの特性みたいなもんを使ったアレなわけだが、スイッチとか使って一応説明しとく。
rs.setOutput("left",true)の状態がこれ
で、rs.setOutput("left",false)の状態がこれ
スイッチがパソコンに変わっただけ。ということ。
で、最後。起動したときにこのプログラムを立ち上げるように設定したかったら設定するといい。
最初に編集したstartupに以下を追加
shell.run("pop_server")
これでマシンが起動したら自動的にプログラムが動作してメール受信待ち状態になる。
動作確認の方法だが、メインマシンで lua て打つとluaが立ち上がる。
ここで、コマンドをいくつか打つと確認ができる。
今回はサーバーIDが28だからそれで行くけどそのへん臨機応変に。
・メッセージ送信
rednet.send(28,"test")
・未読メッセージ受信
rednet.send(28,"get()")
rednet.receive()
rednet.send(28,"stop()")
・全メッセージ受信
rednet.send(28,"get()")
rednet.receive()
rednet.send(28,"stop()")
ということでメール受信サーバー設置編は以上。
このままではまだ不便ということで、次はメインマシンで使うメールクライアントを作るよ。
PR
この記事にコメントする
copy love ring cartier
This post is giving me a stomach ache…lol. “Find a way to make it pay”…I think I’ll write that down and go to sleep. zzzzzzz……
cartier necklace love copy
magnificent submit, very informative. I ponder why the opposite specialists of this sector don’t realize this. You should continue your writing. I’m sure, you’ve a huge readers’ base already!
cartier necklace love copy http://www.wdsav.com/category/fake-cartier-necklace
cartier necklace love copy http://www.wdsav.com/category/fake-cartier-necklace
van cleef alhambra bracelet copy
По-моему пора сделать склейку глав на тома для удобства скачки одним файлом.
van cleef alhambra bracelet copy http://www.howtobuybangles.com/
van cleef alhambra bracelet copy http://www.howtobuybangles.com/
カレンダー
03 | 2025/04 | 05 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
カウンター
プロフィール
HN:
Mugen
性別:
男性
職業:
社会人だよバカヤローー!!
趣味:
ピアノ、アニメ・音楽鑑賞、ネットサーフィンとかとか
自己紹介:
ただの車好きな変態です。
twitterもやってますんで、よければリンクからドゾー
twitterもやってますんで、よければリンクからドゾー
最新記事
(09/12)
(08/12)
(06/27)
(05/31)
(05/26)
最新CM
[01/14 FreddieSpemo]
[01/13 FreddieSpemo]
[01/13 FreddieSpemo]
[12/21 réplique cartier bracelet]
[12/16 van cleef and arpels alhambra diamond necklace knock off]
最新TB
ブログ内検索
最古記事
(08/12)
(11/28)
(11/29)
(11/29)
(05/21)
アクセス解析