-
-
Save benlangfeld/5e27487921402d602db1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
$:.push File.expand_path('../../lib', __FILE__) | |
require 'celluloid/io' | |
class Server | |
include Celluloid::IO | |
def initialize(host, port) | |
puts "*** Starting server on #{host}:#{port}" | |
@server = TCPServer.new(host, port) | |
run! | |
end | |
def finalize | |
puts "Server closing" | |
@server.close if @server | |
end | |
def run | |
loop { handle_connection! @server.accept } | |
end | |
def handle_connection(socket) | |
_, port, host = socket.peeraddr | |
puts "*** Received connection from #{host}:#{port}" | |
loop { puts socket.readpartial(4096) } | |
rescue EOFError | |
puts "*** #{host}:#{port} disconnected" | |
socket.close | |
end | |
end | |
class Client | |
include Celluloid::IO | |
def initialize(host, port) | |
puts "*** Connecting to echo server on #{host}:#{port}" | |
@socket = TCPSocket.new(host, port) | |
run! | |
end | |
def shutdown | |
@socket.close if @socket | |
end | |
def run | |
loop { puts @socket.readpartial 4096 } | |
rescue EOFError => e | |
puts "Client socket closed due to #{e.message}!" | |
terminate | |
end | |
end | |
server = Server.new("127.0.0.1", 1234) | |
client = Client.new("127.0.0.1", 1234) | |
client.shutdown |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment