class LIFX::LAN::Transport::TCP
@api private @private
Constants
- CONNECT_TIMEOUT
- HEADER_SIZE
- SEND_TIMEOUT
Public Class Methods
new(*args)
click to toggle source
Calls superclass method
LIFX::LAN::Transport::new
# File lib/lifx/lan/transport/tcp.rb, line 11 def initialize(*args) super connect end
Public Instance Methods
close()
click to toggle source
Calls superclass method
LIFX::LAN::Transport#close
# File lib/lifx/lan/transport/tcp.rb, line 34 def close super return if !@socket if !@socket.closed? @socket.close notify_observers(:disconnected) end @socket = nil if @listener @listener.abort end @listener = nil end
connect()
click to toggle source
# File lib/lifx/lan/transport/tcp.rb, line 21 def connect Timeout.timeout(CONNECT_TIMEOUT) do @socket = TCPSocket.new(host, port) # Performs the connection end @socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF, 1024) @socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1) logger.info("#{self}: Connected.") rescue => ex logger.warn("#{self}: Exception occurred in #connect - #{ex}") logger.debug("#{self}: Backtrace: #{ex.backtrace.join("\n")}") @socket = nil end
connected?()
click to toggle source
# File lib/lifx/lan/transport/tcp.rb, line 16 def connected? !!(@socket && !@socket.closed?) end
listen()
click to toggle source
# File lib/lifx/lan/transport/tcp.rb, line 49 def listen return if @listener @listener = Thread.start do while @socket do begin header_data = @socket.recv(HEADER_SIZE, Socket::MSG_PEEK) header = Protocol::Header.read(header_data) size = header.msg_size data = @socket.recv(size) message = Message.unpack(data) notify_observers(:message_received, {message: message, ip: host, transport: self}) rescue Message::UnpackError if Config.log_invalid_messages logger.info("#{self}: Exception occurred while decoding message - #{ex}") logger.info("Data: #{data.inspect}") end rescue => ex logger.warn("#{self}: Exception occurred in #listen - #{ex}") logger.debug("#{self}: Backtrace: #{ex.backtrace.join("\n")}") close end end end end
write(message)
click to toggle source
# File lib/lifx/lan/transport/tcp.rb, line 76 def write(message) data = message.pack Timeout.timeout(SEND_TIMEOUT) do @socket.write(data) end true rescue => ex logger.warn("#{self}: Exception in #write: #{ex}") logger.debug("#{self}: Backtrace: #{ex.backtrace.join("\n")}") close false end