このターミナルでは、表示する時のカーソル(以下表示カーソル)と入力する時のカーソル(以下入力カーソル)の位置がイコールじゃないらしい。|234の状態で入力待機してたとする。ターミナルに表示されてるカーソル。文字入力してenter押したとする。|34するとこんな感じ。|34みたいに、自分が打った文字の上に上書きされちゃう。これは、表示カーソルが1行目1文字目の位置にあるから、そこから相手のメッセージを表示しちゃうみたい。その逆に、受信したメッセージの上に自分が上書きしちゃう時もある。いうのを回避するために、一回画面下まで全部改行してやって、画面左下に表示カーソルと入力カーソルを持って行ってやった。この状態でカーソルの位置取得。改行してからやるとこうなる。メッセージ受信すると、カーソルの位置を設定してからメッセージを書き出す。さっき2で取得したカーソルの位置を3の書き方で指定。この例でいくと20行目1文字目から文字を表示していく。部分に表示カーソルが行く。これなら問題ないよね。今回一番重要なのが4の存在。これで、受信メソッドと送信メソッドの並列実行を行なっている。ちなみに、parallel.waitForAny()とparallel.waitForAll()の2種類がある。Any()のほうは、どれか一つでもメソッドがreturnしたら動作終了All()のほうは、すべてのメソッドがreturnしたら動作終了という感じ。今回は、入力メソッド側がexit()って打った場合のみ終了したいわけだから、Any()のほうを使ってる。動作ごとにメソッド用意してこれ書くだけで簡単に並列実行できるのは素晴らしいですね。ここで一応今回の問題点を言っておく。冒頭にも言ったとおり、今回はbroadcast()を使ってるから、周囲でreceive()状態になってるマシンすべてにメッセージが行く。それはreceive()してるマシンは例外なく届くわけで、前回作ったメールサーバーにもメッセージが行くわけだ。このプログラム使うときははメールサーバーがない環境かもしくはメールサーバーとは別の場所じゃないとまずい。全メッセージをメールサーバーが受信しちゃって超めんどくさい。逆に会話ログは取れるけどねwだから、メールサーバーに干渉しないものを作ろうとすると、やっぱりsend()を使ったやり方じゃないと無理っぽいかな。send()は送る相手一人だけだから、サーバーを一つ用意して、ログイン管理とかした上でメッセージをそれぞれ良い感じにみんなに配布していくようなプログラムを書くしか無いかな。ことを考えてめんどくさくなってやめたわけ。そこまで大したプログラムにはならないと思うので、気が向いたらまたやります。ソース修正(getモード時の動作修正)メールクライアント(メール送受信ソフト)をメインマシンで作るよ。サーバー設置編読んでなければ先に読んだほうがいいです→サーバー設置編ソース書く前に、サーバーの動作を再確認。光)↓またメールを待つサーバーたんっていう動作ね。この中の、メッセージ作って送ったり、get()とかgetall()とか送る部分を今回作るのね。終了じゃぁソースいくで。・メインマシン→アドバンスドPC。ID=27・メール受信サーバー→普通のPC。今回のプログラム名はmailでいく。mailでエディタ起動。>")--モード一覧。send,get,getall--サーバー設置編でやったアレの通り--あと、printとwriteの違いだが、--自動的に改行してくれるかしてくれないかの違い。やつは気にしなくていい。mail")returnendソースコード以上こっちもソース間違ってるかもしれんからその時はコメントお願いします。動作イメージはこんな感じ。俺宛のメールは28固定。ちなみに24はメインでもサーバーでもない第3のマシンのID次getallモード。過去のテストがずらり。ちなみに、sendで受信サーバー以外にも送れるけど、向こうが受信するかどうかは向こうの状態次第ってやつですね。第3のマシン(24)からメインマシン(27)にsendで送ろうとすると、メインがrednet.receive()状態じゃないとだめって例のアレですね。これ書いてる時に、メール無いときにgetモード発動させた時の動作が無いことに気づいたからそのうち修正かけます。今の状態でも動作はします。次、これの応用みたいな感じでチャットツールも作ったからそのうちソース晒します。謝辞サーバー用プログラム、クライアントプログラム開発の際、errorcode氏の助言を参考に致しました。ありがとうございました。付近からファイルチェック追記)ということで、メール受信サーバー作ったからソース晒す。一応このへんとかこのへんとか見ればAPIとか分かりますんで。基本lua言語ですよ。大丈夫や俺だってこれが初めてなんやから。