Skip to content

Instantly share code, notes, and snippets.

@tily
Created October 9, 2010 15:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tily/618281 to your computer and use it in GitHub Desktop.
Save tily/618281 to your computer and use it in GitHub Desktop.
require 'socket'
class Server
def initialize(options={:host=>'localhost', :port=>'3000'})
@server = TCPServer.new(options[:host], options[:port])
@rules = []
end
def handle(regexp, &block)
@rules << {:regexp => regexp, :block => block}
end
def run
loop do
Thread.start(@server.accept) do |socket|
while message = socket.gets
@rules.each do |rule|
m = message.match(rule[:regexp])
if(m)
socket.write(rule[:block].call(m) + "\n")
break
end
end
end
socket.close
end
end
end
end
server = Server.new
server.handle(/hello/i) { "Hello from server at #{Time.now}" }
server.handle(/goodbye/i) { "Goodbye from server at #{Time.now}" }
server.handle(/name is (\w+)/) { |m| "Nice to meet you #{m[1]}!" }
server.run
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment