require 'druby3'

class Bar
    attr_reader :i
    def initialize(i)
        @i = i
    end
end

class Foo < Bar
    # Initialize @i to 0
    def initialize(druby)
        super(0)
        @druby = druby
    end

    # Set @i
    def foo(i)
        @i = i
    end

    # Return a reference to a new Bar object with Bar.i = @i + 1
    def bar()
        b = Bar.new(@i + 1)
        obj = @druby.create_reference(b)
        return obj
    end

    # Test iteration
    def each()
        yield 1
        yield 2
        yield 3
    end

    # Test exception
    def throw_exception()
        raise RuntimeError
    end
end

server = DRuby::Server.new('localhost', '4242')
f = Foo.new(server)
server.bind(f, "foo")
server.thread.join
