как да чета цели редове с помощта на мрежата/telnet на ruby?

Използвам библиотеката 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