EventMachine仅在额外按键后触发键盘处理程序的receive_line

时间:2012-08-02 18:52:26

标签: ruby stdin eventmachine

我在这里有一个简单的键盘回显程序来测试EventMachine,以及没有EM编写的等效代码。似乎EventMachine只在Windows上触发了receive_line方法,并在Windows上触发了额外的按键操作。这是eventmachine应用程序:

class KeyboardHandler < EM::Connection
  include EM::Protocols::LineText2

  def post_init
    prompt
  end

  def prompt
    print "> "
  end

  def receive_line line
    line.chomp!
    case(line)
    when /^exit$/ then
      EM.stop
    else
      puts line
      prompt
    end
  end
end
EventMachine.run {
  EventMachine.open_keyboard KeyboardHandler
}

输入输入然后按Enter键将创建一个换行符,但是在进行另一次按键操作之前,键入的行不会回显到控制台。
我创建了另一个片段,用于测试Windows控制台是否存在问题,只是没有刷新STDIN unitl另一个按键,但这个功能正如人们所期望的那样,在每次返回按键后回显输入:

while line = STDIN.readline
  puts "Typed #{line}"
end

有关为何发生这种情况的任何想法?我希望EventMachine在每次返回按键后立即触发received_line。

0 个答案:

没有答案