Class: Droonga::BufferedTCPSocket
- Inherits:
-
Coolio::TCPSocket
- Object
- Coolio::TCPSocket
- Droonga::BufferedTCPSocket
show all
- Includes:
- Loggable
- Defined in:
- lib/droonga/buffered_tcp_socket.rb
Defined Under Namespace
Classes: Chunk, ChunkLoader
Instance Method Summary
collapse
Constructor Details
#initialize(socket, data_directory) ⇒ BufferedTCPSocket
Returns a new instance of BufferedTCPSocket.
26
27
28
29
30
|
# File 'lib/droonga/buffered_tcp_socket.rb', line 26
def initialize(socket, data_directory)
super(socket)
@data_directory = data_directory
@_write_buffer = []
end
|
Instance Method Details
#on_connect ⇒ Object
32
33
34
|
# File 'lib/droonga/buffered_tcp_socket.rb', line 32
def on_connect
logger.trace("connected to #{@remote_host}:#{@remote_port}")
end
|
#on_writable ⇒ Object
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
# File 'lib/droonga/buffered_tcp_socket.rb', line 44
def on_writable
until @_write_buffer.empty?
chunk = @_write_buffer.shift
begin
written_size = @_io.write_nonblock(chunk.data)
if written_size == chunk.data.bytesize
chunk.written
else
chunk.written_partial(written_size)
@_write_buffer.unshift(chunk)
break
end
rescue Errno::EINTR
@_write_buffer.unshift(chunk)
return
rescue SystemCallError, IOError, SocketError
@_write_buffer.unshift(chunk)
return close
end
end
if @_write_buffer.empty?
disable_write_watcher
on_write_complete
end
end
|
#resume ⇒ Object
71
72
73
74
75
|
# File 'lib/droonga/buffered_tcp_socket.rb', line 71
def resume
@_write_buffer = (load_chunks + @_write_buffer).sort_by do |chunk|
chunk.time_stamp
end
end
|
#write(data) ⇒ Object
36
37
38
39
40
41
42
|
# File 'lib/droonga/buffered_tcp_socket.rb', line 36
def write(data)
chunk = Chunk.new(@data_directory, data, Time.now, 0)
chunk.buffering
@_write_buffer << chunk
schedule_write
data.bytesize
end
|