Class: Handlersocket
- Inherits:
-
Object
- Object
- Handlersocket
- Defined in:
- lib/handlersocket.rb,
lib/handlersocket/pure.rb,
lib/handlersocket/version.rb
Overview
Pure Ruby implementation of HS protocol
Sockets implementation is very slow in MRI, use HandlerSocket::Ext for better performance
Constant Summary collapse
- VERSION =
"0.1.0"
Instance Method Summary collapse
- #connect ⇒ Object
- #disconnect ⇒ Object
-
#find(idx_id, op, args, extra = []) ⇒ Array<String>
Runs a find statement on HandlerSocket server and returns matched rows.
-
#initialize(host, port) ⇒ Handlersocket
constructor
A new instance of Handlersocket.
-
#open_index(idx_id, db_name, tbl_name, idx_name, columns) ⇒ Array<String>
Opens an an index for requests.
-
#query(req) ⇒ Array<String>
Sends request to a HS server and returns a reply.
- #reconnect ⇒ Object
-
#socket ⇒ TCPSocket
Returns a memoized instance of TCP socket.
Constructor Details
#initialize(host, port) ⇒ Handlersocket
Returns a new instance of Handlersocket.
12 13 14 15 |
# File 'lib/handlersocket.rb', line 12 def initialize(host, port) @host = host @port = port end |
Instance Method Details
#connect ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'ext/handlersocket_ext/handlersocket_ext.c', line 58
static VALUE rb_hs_connect(VALUE hs) {
SOCKET_DATA *data;
struct sockaddr_in server;
Data_Get_Struct(hs, SOCKET_DATA, data);
if (data->socket_desc == -1) {
hs_free(data);
}
data->socket_desc = socket(AF_INET , SOCK_STREAM , 0);
if (data->socket_desc == -1) {
rb_warn("Could not create socket");
}
server.sin_addr.s_addr = inet_addr(data->host);
server.sin_family = AF_INET;
server.sin_port = htons(data->port);
if (connect(data->socket_desc , (struct sockaddr *)&server , sizeof(server)) < 0) {
rb_raise(rb_eStandardError, "HS: connect error");
}
return Qnil;
}
|
#disconnect ⇒ Object
44 45 46 47 48 49 50 |
# File 'ext/handlersocket_ext/handlersocket_ext.c', line 44 static VALUE rb_hs_disconnect(VALUE hs) { SOCKET_DATA *data; Data_Get_Struct(hs, SOCKET_DATA, data); hs_free(data); return Qnil; } |
#find(idx_id, op, args, extra = []) ⇒ Array<String>
Runs a find statement on HandlerSocket server and returns matched rows
51 52 53 54 |
# File 'lib/handlersocket.rb', line 51 def find(idx_id, op, args, extra = []) req = [idx_id, op, args.length.to_s, *args, *extra] query(req) end |
#open_index(idx_id, db_name, tbl_name, idx_name, columns) ⇒ Array<String>
Opens an an index for requests
37 38 39 40 |
# File 'lib/handlersocket.rb', line 37 def open_index(idx_id, db_name, tbl_name, idx_name, columns) req = ["P", idx_id, db_name, tbl_name, idx_name, columns.join(",")] query(req) end |
#query(req) ⇒ Array<String>
Sends request to a HS server and returns a reply
23 24 25 |
# File 'lib/handlersocket.rb', line 23 def query(*args) # A stub method end |
#reconnect ⇒ Object
90 91 92 93 94 95 |
# File 'ext/handlersocket_ext/handlersocket_ext.c', line 90 static VALUE rb_hs_reconnect(VALUE hs) { rb_hs_disconnect(hs); rb_hs_connect(hs); return Qnil; } |
#socket ⇒ TCPSocket
Returns a memoized instance of TCP socket
13 14 15 |
# File 'lib/handlersocket/pure.rb', line 13 def socket @socket ||= TCPSocket.new(@host, @port) end |