Постоянные каналы - PullRequest
       0

Постоянные каналы

0 голосов
/ 01 апреля 2020

В настоящее время я работаю над гемом TeamSpeak 3 Ruby, который позволяет взаимодействовать с запросами сервера серверов TeamSpeak. С версии 3.3 он поддерживает соединения S SH. Однако, похоже, что их способ реализации S SH немного отличается. Например:

1002 *

Канал exec не существует. Это означает, что я, вероятно, должен использовать тип shell, а команды должны отправляться с Net::SSH::Connection::Channel#send_data

Закрытие каналов с помощью Net::SSH::Connection::Session#close не оказывает никакого влияния.

Я пытаюсь обернуть все в класс Client, где в конструкторе я запускаю сеанс S SH и настраиваю канал. Однако, поскольку каналы должны быть зациклены, все застревает в (основном?) Потоке.

module Teamspeak3
  class Client
    def initialize(...)
      @session = Net::SSH.start(...)
      @channel = @session.open_channel do |channel|
        channel.send_channel_request 'shell' do |ch, success|
          raise 'Could not request shell channel' unless success

          ch.on_data do |data|
            # Data handling
            ch.close
          end

          ch.on_close do |_|
            puts 'closing channel'
          end
        end
      end
      @session.loop
    end

    def send_command(command)
      @channel.send_data '#{command}\n'
    end
  end
end

Однако это, конечно, не будет работать из-за потоков, блокируемых @session.loop. Существуют ли способы, например, сохранения каналов без использования Net::SSH::Connection::Session#loop или запуска Net::SSH::Connection::Session#loop в потоке?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...