1031: def EventMachine::open_keyboard handler=nil, *args
1032: klass = if (handler and handler.is_a?(Class))
1033: handler
1034: else
1035: Class.new( Connection ) {handler and include handler}
1036: end
1037:
1038: arity = klass.instance_method(:initialize).arity
1039: expected = arity >= 0 ? arity : -(arity + 1)
1040: if (arity >= 0 and args.size != expected) or (arity < 0 and args.size < expected)
1041: raise ArgumentError, "wrong number of arguments for #{klass}#initialize (#{args.size} for #{expected})"
1042: end
1043:
1044: s = read_keyboard
1045: c = klass.new s, *args
1046: @conns[s] = c
1047: block_given? and yield c
1048: c
1049: end