class Person
def initialize name, dob #dob = date of birth
@name = name
@dob = dob
end
def age
(Time.now - @dob) / (365 * 24 * 60 * 60)
end
def introduce_yoself
print "Hey, I'm #{@name} and I was born #{age} years ago.\n"
end
end
maxxx = Person.new("Max", Time.new(1988, 9, 11))
maxxx.introduce_yoself
# which prints
# "Hey, I'm Max and I was born 23.986193869358075 years ago."
class CoolDude < Person
def initialize name, dob, nickname
super name, dob
@nickname = nickname
end
def introduce_yoself
print "Yo, they call me '#{@nickname}'."
end
end
waltr0x = CoolDude.new("Walter", Time.new(1987, 9, 29), "The Laser")
# we've still got this function
print waltr0x.age
# 24.939627905041938
waltr0x.introduce_yoself
# "Yo, they call me 'The Laser'."
GServer implements a generic server, featuring thread pool management, simple logging, and multi-server management.
Any kind of application-level server can be implemented using this class. It accepts multiple simultaneous connections from clients, up to an optional maximum number.
Several services (i.e. one service
per TCP port) can be run simultaneously, and stopped at any time
through the class method GServer.stop(port).
All the threading issues are handled, saving you the effort. (See Rediscovering Ruby: GServer)
[~/rubytesting/inheritance]$ cat gserver_example.rb
# http://www.aimred.com/news/developers/2010/01/16/rediscovering_ruby_gserver/
require 'gserver'
class TimeServer < GServer
def initialize(port=10001, host='0.0.0.0', *args)
super
end
def serve(io)
# line = io.readline
io.puts(Time.now.to_s)
end
end
server = TimeServer.new
server.stdlog = $stderr
server.audit = true
server.debug = true
server.start
server.join
[~/rubytesting/inheritance]$ cat gserver_client.rb require 'socket' echo = TCPSocket.open( 'localhost', 10001 ) #echo.puts( "Hello\nWorld" ) puts( echo.readline )
[~/rubytesting/inheritance]$ ruby gserver_example.rb [Mon Oct 27 11:32:23 2014] TimeServer 0.0.0.0:10001 start [Mon Oct 27 11:32:34 2014] TimeServer 0.0.0.0:10001 client:52492 127.0.0.1<127.0.0.1> connect [Mon Oct 27 11:32:34 2014] TimeServer 0.0.0.0:10001 client:52492 disconnect
[~/rubytesting/inheritance]$ ruby gserver_client.rb 2014-10-27 11:32:34 +0000
Casiano Rodriguez León 2015-01-07