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