Sha256: 1356176e1d1bd978b84ebde87cada3641e58b76ee3cc1976301604d429988594

Contents?: true

Size: 918 Bytes

Versions: 2

Compression:

Stored size: 918 Bytes

Contents

#!/usr/bin/env ruby
#
# Run this as: bundle exec examples/echo_server.rb

require "bundler/setup"
require "celluloid/io"

class EchoServer
  include Celluloid::IO
  finalizer :finalize

  def initialize(host, port)
    puts "*** Starting echo server on #{host}:#{port}"

    # Since we included Celluloid::IO, we're actually making a
    # Celluloid::IO::TCPServer here
    @server = TCPServer.new(host, port)
    async.run
  end

  def finalize
    @server.close if @server
  end

  def run
    loop { async.handle_connection @server.accept }
  end

  def handle_connection(socket)
    _, port, host = socket.peeraddr
    puts "*** Received connection from #{host}:#{port}"
    loop { socket.write socket.readpartial(4096) }
  rescue EOFError
    puts "*** #{host}:#{port} disconnected"
    socket.close
  end
end

supervisor = EchoServer.supervise("127.0.0.1", 1234)
trap("INT") { supervisor.terminate; exit }
sleep

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
celluloid-io-0.17.3 examples/echo_server.rb
celluloid-io-0.17.2 examples/echo_server.rb