class NetworkClipboard::ConnectionWrapper

Public Class Methods

new(client,connection) click to toggle source
# File lib/network_clipboard/client.rb, line 14
def initialize(client,connection)
  @client = client
  @connection = connection
  @read_thread = Thread.new{read_loop}
  @write_thread = Thread.new{write_loop}
  @running = true
  @value = nil
end

Public Instance Methods

join() click to toggle source
# File lib/network_clipboard/client.rb, line 53
def join
  @read_thread.join
  @write_thread.join
end
read_loop() click to toggle source
# File lib/network_clipboard/client.rb, line 23
def read_loop
  while @running
    begin
      new_value = @connection.receive()
    rescue DisconnectedError
      if @running
        LOGGER.error("Client #{@connection.remote_client_id} went away")
        @running = false
      end
      break
    end
    next if @value == new_value
    LOGGER.info("Received new clipboard value from #{@connection.remote_client_id}")
    Clipboard.copy(@value = new_value)
  end
  @connection.close_read
  LOGGER.debug("Read loop completed")
end
stop() click to toggle source
# File lib/network_clipboard/client.rb, line 58
def stop
  @running = false
end
write_loop() click to toggle source
# File lib/network_clipboard/client.rb, line 42
def write_loop
  while @running
    new_value = Clipboard.paste
    (sleep(2); next) if new_value.nil? or new_value.empty? or @value == new_value
    LOGGER.info("Sending clipboard value to #{@connection.remote_client_id}")
    @connection.send(@value = new_value)
  end
  @connection.close_write
  LOGGER.debug("Write loop completed")
end