как читать целые строки, используя ruby ​​net/telnet?

Я использую библиотеку net/telnet в ruby ​​для чтения данных с сервера. Он отправляет команды целыми строками с новой строкой в ​​конце, поэтому я подумал, что сделаю это:

connection = Net::Telnet.new(options)

connection.waitfor(/\n/) do |txt|
  process txt
end

Это не работает, потому что сразу отправляет мне целую кучу строк. Я могу исправить это довольно легко, вместо этого выполнив:

connection.waitfor(/\n/) do |txt|
  txt.split("\n").each do |line|
    process line
  end
end

Вот только с этим тоже есть проблема: отправляемая мне строка почти всегда содержит половину команды в конце. то есть: если сервер отправлял это:

COMMAND1 option1 option2 option3
COMMAND2 option1 option2 option3
COMMAND3 option1 option2 option3

Я часто получаю это:

COMMAND1 option1 option2 option3
COMMAND2 option1 option2 option3
COMMAND3 opt

а затем я получу остальные параметры COMMAND3 при следующем чтении вместе с COMMAND4.

Есть ли способ заставить net/telnet просто отправить мне текст с разделителями на новые строки? Или другой способ исправить это?

Спасибо, Стюарт.


person Stewart Johnson    schedule 19.08.2011    source источник


Ответы (1)


Итак, это мое текущее решение, я не уверен, что это лучший способ, но он хорошо работает с моим источником данных в реальном времени:

connection = Net::Telnet.new(options)

all_text = ""
while running do
  connection.waitfor(/\n/) do |server_text|
    all_text += server_text
    while cmd = all_text.slice!(/^.*\n/) do
      process cmd
    end
    # any half-command remains in all_text at this point
  end
end
person Stewart Johnson    schedule 19.08.2011