11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/connection/tcp_server.rb', line 11
def open
@server = ::TCPServer.new(@port)
hostname = `hostname`.strip
puts "Started TCP server on #{hostname}:#{@port}."
puts "Waiting for clients..."
puts "Press CTRL+C to interrupt at any time."
loop do
client = @server.accept
client.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
puts "Client connected."
while raw_request = client.gets
request = Marshal.load(Base64.strict_decode64(raw_request.rstrip))
puts "Received: #{request}"
receive_commands(request).each do |(verb, path, value, handle)|
@local_connection.send(verb.to_sym, path, value, handle) do |response|
puts "Sending: #{response}"
client.puts(Base64.strict_encode64(Marshal.dump(response)))
end
end
@local_connection.flush
end
client.close
puts "Client closed."
end
rescue SystemExit, Interrupt
close
end
|