Class: Net::InternetMessageIO

Inherits:
BufferedIO show all
Defined in:
lib/net/protocol.rb

Overview

:nodoc: internal use only

Instance Attribute Summary

Attributes inherited from BufferedIO

#debug_output, #io, #read_timeout

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from BufferedIO

#close, #closed?, #inspect, #read, #read_all, #readline, #readuntil, #write, #writeline

Constructor Details

#initialize(io) ⇒ InternetMessageIO

Returns a new instance of InternetMessageIO.



213
214
215
216
# File 'lib/net/protocol.rb', line 213

def initialize(io)
  super
  @wbuf = nil
end

Class Method Details

.old_open(addr, port, open_timeout = nil, read_timeout = nil, debug_output = nil) ⇒ Object



203
204
205
206
207
208
209
210
211
# File 'lib/net/protocol.rb', line 203

def InternetMessageIO.old_open(addr, port,
    open_timeout = nil, read_timeout = nil, debug_output = nil)
  debug_output << "opening connection to #{addr}...\n" if debug_output
  s = timeout(open_timeout) { TCPsocket.new(addr, port) }
  io = new(s)
  io.read_timeout = read_timeout
  io.debug_output = debug_output
  io
end

Instance Method Details

#each_list_itemObject

*library private* (cannot handle 'break')



235
236
237
238
239
# File 'lib/net/protocol.rb', line 235

def each_list_item
  while (str = readuntil("\r\n")) != ".\r\n"
    yield str.chop
  end
end

#each_message_chunkObject

Read



222
223
224
225
226
227
228
229
230
231
232
# File 'lib/net/protocol.rb', line 222

def each_message_chunk
  LOG 'reading message...'
  LOG_off()
  read_bytes = 0
  while (line = readuntil("\r\n")) != ".\r\n"
    read_bytes += line.size
    yield line.sub(/\A\./, '')
  end
  LOG_on()
  LOG "read message (#{read_bytes} bytes)"
end

#write_message(src) ⇒ Object

Write



253
254
255
256
257
258
259
260
261
262
263
264
# File 'lib/net/protocol.rb', line 253

def write_message(src)
  LOG "writing message from #{src.class}"
  LOG_off()
  len = writing {
    using_each_crlf_line {
      write_message_0 src
    }
  }
  LOG_on()
  LOG "wrote #{len} bytes"
  len
end

#write_message_0(src) ⇒ Object



241
242
243
244
245
246
247
# File 'lib/net/protocol.rb', line 241

def write_message_0(src)
  prev = @written_bytes
  each_crlf_line(src) do |line|
    write0 line.sub(/\A\./, '..')
  end
  @written_bytes - prev
end

#write_message_by_block(&block) ⇒ Object



266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
# File 'lib/net/protocol.rb', line 266

def write_message_by_block(&block)
  LOG 'writing message from block'
  LOG_off()
  len = writing {
    using_each_crlf_line {
      begin
        block.call(WriteAdapter.new(self, :write_message_0))
      rescue LocalJumpError
        # allow `break' from writer block
      end
    }
  }
  LOG_on()
  LOG "wrote #{len} bytes"
  len
end