class BitGirder::Event::File::EventFileWriter
Constants
- DEFAULT_ROTATE_SIZE
Public Instance Methods
close()
click to toggle source
# File lib/bitgirder/event/file.rb, line 219 def close @closed = true impl_flush if @io end
closed?()
click to toggle source
# File lib/bitgirder/event/file.rb, line 65 def closed? @closed end
write_event( ev )
click to toggle source
# File lib/bitgirder/event/file.rb, line 206 def write_event( ev ) raise ClosedError if @closed str_io = new_string_io @codec.encode_event( ev, str_io ) io_sz = str_io.pos + HEADER_SIZE impl_write_event( str_io, io_sz ) end
Private Instance Methods
close_file()
click to toggle source
# File lib/bitgirder/event/file.rb, line 135 def close_file if @io @file_factory.close_file( @io ) @buf = @bin.io.string @io, @bin, @file_remain, @buf_remain = nil, nil, -1, -1 end end
ensure_io()
click to toggle source
# File lib/bitgirder/event/file.rb, line 119 def ensure_io @buf ||= ( "\x00" * @buffer_size.bytes ) unless @io open_res = @file_factory.open_file @io = open_res.io update_remain_counts( @rotate_size.bytes - open_res.pos ) reset_bin_writer write_file_header unless open_res.is_reopen end end
impl_flush()
click to toggle source
# File lib/bitgirder/event/file.rb, line 146 def impl_flush completes_file = @file_remain <= @buffer_size.bytes @buf.slice!( @bin.io.pos, @buf.size ) @io.write( @buf ) send_event( :wrote_buffer, @buf.size ) # Order matters: need to use @buf before reset_bin_writer update_remain_counts( @file_remain - @buf.size ) reset_bin_writer close_file if completes_file || @closed end
impl_initialize()
click to toggle source
# File lib/bitgirder/event/file.rb, line 52 def impl_initialize @buffer_size ||= [ @rotate_size, DEFAULT_BUFFER_SIZE ].min if @buffer_size > @rotate_size raise ArgumentError, "Buffer size #@buffer_size > rotate size #@rotate_size" end @conv = Io::BinaryConverter.new( :order => Io::ORDER_LITTLE_ENDIAN ) end
impl_write_event( str_io, io_sz )
click to toggle source
# File lib/bitgirder/event/file.rb, line 193 def impl_write_event( str_io, io_sz ) ensure_io if io_sz > @buf_remain write_overflow( str_io, io_sz ) else write_serialized_event( str_io, @bin ) if ( @buf_remain -= io_sz ) == 0 then impl_flush end end end
new_string_io()
click to toggle source
# File lib/bitgirder/event/file.rb, line 78 def new_string_io RubyVersions.when_19x( StringIO.new ) do |io| io.set_encoding( Encoding::BINARY ) end end
reset_bin_writer()
click to toggle source
# File lib/bitgirder/event/file.rb, line 85 def reset_bin_writer @bin = Io::BinaryWriter.new( :io => StringIO.new( @buf ), :order => Io::ORDER_LITTLE_ENDIAN ) end
send_event( ev, *argv )
click to toggle source
# File lib/bitgirder/event/file.rb, line 70 def send_event( ev, *argv ) if @event_handler && @event_handler.respond_to?( ev ) @event_handler.send( ev, *argv ) end end
update_remain_counts( file_remain )
click to toggle source
# File lib/bitgirder/event/file.rb, line 112 def update_remain_counts( file_remain ) @file_remain = file_remain @buf_remain = [ @file_remain, @buffer_size.bytes ].min end
write_ev_header( str_io, dest )
click to toggle source
# File lib/bitgirder/event/file.rb, line 163 def write_ev_header( str_io, dest ) dest.write( @conv.write_int32( str_io.size ) ) end
write_file_header()
click to toggle source
# File lib/bitgirder/event/file.rb, line 95 def write_file_header @bin.write_full( FILE_MAGIC ) @bin.write_utf8( FILE_VERSION ) if ( hdr_len = @bin.pos ) >= ( rs = @rotate_size.bytes ) @closed = true raise WriteError, "File header length #{hdr_len} >= rotate size #{rs}" end @buf_remain -= @bin.pos end
write_overflow( str_io, io_sz )
click to toggle source
# File lib/bitgirder/event/file.rb, line 175 def write_overflow( str_io, io_sz ) impl_flush if io_sz > @buffer_size.bytes if io_sz > @rotate_size.bytes raise WriteError, "Record is too large for rotate size #@rotate_size" else write_serialized_event( str_io, @io ) end else impl_write_event( str_io, io_sz ) end end
write_serialized_event( str_io, dest )
click to toggle source
# File lib/bitgirder/event/file.rb, line 168 def write_serialized_event( str_io, dest ) write_ev_header( str_io, dest ) dest.write( str_io.string[ 0, str_io.size ] ) end