lib/monetdb/connection.rb in monetdb-0.2.0 vs lib/monetdb/connection.rb in monetdb-0.2.1
- old
+ new
@@ -1,13 +1,15 @@
require "socket"
+require "monetdb/connection/io"
require "monetdb/connection/messages"
require "monetdb/connection/setup"
require "monetdb/connection/query"
module MonetDB
class Connection
+ include IO
include Messages
include Setup
include Query
Q_TABLE = "1" # SELECT statement
@@ -78,48 +80,9 @@
@socket
end
def log(type, msg)
MonetDB.logger.send(type, msg) if MonetDB.logger
- end
-
- def read
- raise ConnectionError, "Not connected to server" unless connected?
-
- length, last_chunk = read_length
- data, iterations = "", 0
-
- while (length > 0) && (iterations < 1000) do
- received = socket.recv(length)
- data << received
- length -= received.bytesize
- iterations += 1
- end
- data << read unless last_chunk
-
- data
- end
-
- def read_length
- bytes = socket.recv(2).unpack("v")[0]
- [(bytes >> 1), (bytes & 1) == 1]
- end
-
- def write(message)
- raise ConnectionError, "Not connected to server" unless connected?
- pack(message).each do |chunk|
- socket.write(chunk)
- end
- true
- end
-
- def pack(message)
- chunks = message.scan(/.{1,#{MAX_MSG_SIZE}}/m)
- chunks.each_with_index.to_a.collect do |chunk, index|
- last_bit = (index == chunks.size - 1) ? 1 : 0
- length = [(chunk.size << 1) | last_bit].pack("v")
- "#{length}#{chunk}"
- end.freeze
end
end
end