Class: LocalDevelopmentGateway::DatabaseRouter::Tds::Message
- Inherits:
-
Object
- Object
- LocalDevelopmentGateway::DatabaseRouter::Tds::Message
- Defined in:
- lib/local_development_gateway/database_router/tds/message.rb
Defined Under Namespace
Classes: Packet
Constant Summary collapse
- MAX_BYTES =
1024 * 1024
- MAX_PACKETS =
16
Instance Attribute Summary collapse
-
#packets ⇒ Object
readonly
Returns the value of attribute packets.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(packets) ⇒ Message
constructor
A new instance of Message.
- #payload ⇒ Object
Constructor Details
#initialize(packets) ⇒ Message
Returns a new instance of Message.
49 50 51 |
# File 'lib/local_development_gateway/database_router/tds/message.rb', line 49 def initialize(packets) @packets = packets end |
Instance Attribute Details
#packets ⇒ Object (readonly)
Returns the value of attribute packets.
12 13 14 |
# File 'lib/local_development_gateway/database_router/tds/message.rb', line 12 def packets @packets end |
Class Method Details
.read(io, deadline:) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/local_development_gateway/database_router/tds/message.rb', line 14 def self.read(io, deadline:) packets = [] size = 0 loop do if packets.length >= MAX_PACKETS raise Error, "TDS message has too many packets" end header = DatabaseRouter::Wire.read_exactly(io, 8, deadline: deadline) length = header.byteslice(2, 2).unpack1("n") raise Error, "Invalid TDS packet length" if length < 8 size += length - 8 raise Error, "TDS message is too large" if size > MAX_BYTES packets << Packet.new( header: header, payload: DatabaseRouter::Wire.read_exactly( io, length - 8, deadline: deadline ) ) break if header.getbyte(1) & 1 == 1 end new(packets) end |
.write(io, message) ⇒ Object
43 44 45 46 47 |
# File 'lib/local_development_gateway/database_router/tds/message.rb', line 43 def self.write(io, ) .packets.each do |packet| io.write(packet.header, packet.payload) end end |
Instance Method Details
#payload ⇒ Object
53 54 55 |
# File 'lib/local_development_gateway/database_router/tds/message.rb', line 53 def payload packets.map(&:payload).join end |