Ruby 用のインタラクティブな telnet クライアントを作成しようとしています。現在のライブラリは非常に不足しているため、ユーザーが telnet を使用してリアルタイムでデータを合理化できるインタラクティブな gem を作成して、ライブラリに追加しようとしています。これを行うには、マルチスレッドを使用する必要があります。
t1 はユーザー入力を受け入れます。ユーザーは、アプリケーション全体でデータを入力する能力を常に持っている必要があります。ユーザーデータが送信されると、すぐにデータが返され、ブロックでキャッチされます{ |c| print c }
。問題は、データを合理化してほしいということです。つまり、現在、何かを送信した後に返されるデータのみを取得します。コマンドを送信してから 1 分以内にデータを受信する必要があります。私たちは、常にデータが流れてくることを望んでいます。
この目的のために t2 を作成しました。t2 は、データが受信されるのを待ってから、その正規表現パターンが一致したときにそれを表示します。t2 の問題は、データが受信されない場合、ユーザーが情報を t1 に入力できないことです。
t3 は t1 と t2 に作用します。私の質問は、ユーザーが常にコンソールに入力してコマンドを送信し、同時にサーバーから常に情報を受信できるように、スレッドを整理するにはどうすればよいですか?
t1 = Thread.new {
while true
input = gets.chomp
localhost.cmd(input) { |c| print c }
end
}
t2 = Thread.new {
puts localhost.waitfor("Prompt" => /[$%#>:?.|](\e\[0?m\s*)* *\z/)
}
t3 = Thread.new {
t1.join
t2.join
}
t3.join