noderb 0.0.11 → 0.0.12
Sign up to get free protection for your applications and to get access to all the features.
- data/ext/noderb_extension/noderb.c +12 -4
- data/ext/noderb_extension/noderb_dns.c +1 -0
- data/ext/noderb_extension/noderb_fs.c +15 -13
- data/ext/noderb_extension/noderb_process.c +7 -4
- data/ext/noderb_extension/noderb_tcp.c +9 -5
- data/ext/noderb_extension/noderb_timers.c +2 -0
- data/ext/noderb_extension/noderb_tools.c +8 -0
- data/lib/noderb.rb +3 -1
- data/lib/noderb/connection.rb +3 -3
- data/lib/noderb/file.rb +82 -82
- data/lib/noderb/fs.rb +51 -51
- data/lib/noderb/next_tick.rb +12 -6
- data/lib/noderb/process.rb +4 -4
- data/lib/noderb/timers.rb +1 -1
- data/lib/noderb/tools.rb +10 -0
- data/lib/noderb/version.rb +2 -2
- metadata +3 -2
@@ -9,6 +9,7 @@
|
|
9
9
|
//#include <noderb_defer.h>
|
10
10
|
#include <noderb_fs.h>
|
11
11
|
|
12
|
+
#include <signal.h>
|
12
13
|
// Core NodeRb module
|
13
14
|
VALUE nodeRb;
|
14
15
|
// Pointer for saving native data
|
@@ -24,7 +25,14 @@ VALUE nodeRb_get_nodeRb_pointer(){
|
|
24
25
|
return nodeRbPointer;
|
25
26
|
}
|
26
27
|
|
28
|
+
void siginthandler(int param)
|
29
|
+
{
|
30
|
+
rb_funcall(nodeRb, rb_intern("kill"), 0, 0);
|
31
|
+
}
|
32
|
+
|
27
33
|
void Init_noderb_extension() {
|
34
|
+
// Exits
|
35
|
+
signal(SIGINT, siginthandler);
|
28
36
|
// Define module
|
29
37
|
nodeRb = rb_define_module("NodeRb");
|
30
38
|
// Define native pointer
|
@@ -33,11 +41,11 @@ void Init_noderb_extension() {
|
|
33
41
|
VALUE nodeRbConnection = rb_define_module_under(nodeRb, "Connection");
|
34
42
|
VALUE nodeRbProcess = rb_define_module_under(nodeRb, "Process");
|
35
43
|
// Define connection methods
|
36
|
-
rb_define_method(nodeRbConnection, "
|
37
|
-
rb_define_method(nodeRbConnection, "
|
44
|
+
rb_define_method(nodeRbConnection, "connection_write", nodeRb_tcp_send_data, 1);
|
45
|
+
rb_define_method(nodeRbConnection, "connection_close", nodeRb_tcp_close_connection, 0);
|
38
46
|
// Define process methods
|
39
|
-
rb_define_method(nodeRbProcess, "
|
40
|
-
rb_define_method(nodeRbProcess, "
|
47
|
+
rb_define_method(nodeRbProcess, "process_write", nodeRb_process_write, 1);
|
48
|
+
rb_define_method(nodeRbProcess, "process_kill", nodeRb_process_kill, 1);
|
41
49
|
// Define utility methods
|
42
50
|
rb_define_singleton_method(nodeRb, "next_tick_native", nodeRb_nextTick, 0);
|
43
51
|
rb_define_singleton_method(nodeRb, "start_proxy", nodeRb_startProxy, 2);
|
@@ -118,6 +118,7 @@ VALUE nodeRb_fs_operation(VALUE self, VALUE roperation, VALUE path, VALUE params
|
|
118
118
|
uv_fs_chown(uv_default_loop(), handle, rb_string_value_cstr(&path), (int) rb_num2long(rb_ary_entry(params, 0)), (int) rb_num2long(rb_ary_entry(params, 1)), nodeRb_fs_operation_callback);
|
119
119
|
break;
|
120
120
|
}
|
121
|
+
return self;
|
121
122
|
}
|
122
123
|
|
123
124
|
void nodeRb_fs_file_operation_callback(uv_fs_t* handle){
|
@@ -125,32 +126,32 @@ void nodeRb_fs_file_operation_callback(uv_fs_t* handle){
|
|
125
126
|
nodeRb_file_handle* data = (nodeRb_file_handle*) handle->data;
|
126
127
|
VALUE target = data->target;
|
127
128
|
if(handle->result == -1){
|
128
|
-
rb_funcall(target, rb_intern("
|
129
|
+
rb_funcall(target, rb_intern("on_file_error"), 0, 0);
|
129
130
|
}else{
|
130
131
|
switch(handle->fs_type) {
|
131
132
|
case UV_FS_SENDFILE:
|
132
|
-
rb_funcall(target, rb_intern("
|
133
|
+
rb_funcall(target, rb_intern("on_file_sendfile"), 0, 0);
|
133
134
|
break;
|
134
135
|
case UV_FS_FTRUNCATE:
|
135
|
-
rb_funcall(target, rb_intern("
|
136
|
+
rb_funcall(target, rb_intern("on_file_truncate"), 0, 0);
|
136
137
|
break;
|
137
138
|
case UV_FS_FUTIME:
|
138
|
-
rb_funcall(target, rb_intern("
|
139
|
+
rb_funcall(target, rb_intern("on_file_utime"), 0, 0);
|
139
140
|
break;
|
140
141
|
case UV_FS_FCHMOD:
|
141
|
-
rb_funcall(target, rb_intern("
|
142
|
+
rb_funcall(target, rb_intern("on_file_chmod"), 0, 0);
|
142
143
|
break;
|
143
144
|
case UV_FS_FSYNC:
|
144
|
-
rb_funcall(target, rb_intern("
|
145
|
+
rb_funcall(target, rb_intern("on_file_sync"), 0, 0);
|
145
146
|
break;
|
146
147
|
case UV_FS_FDATASYNC:
|
147
|
-
rb_funcall(target, rb_intern("
|
148
|
+
rb_funcall(target, rb_intern("on_file_datasync"), 0, 0);
|
148
149
|
break;
|
149
150
|
case UV_FS_FCHOWN:
|
150
|
-
rb_funcall(target, rb_intern("
|
151
|
+
rb_funcall(target, rb_intern("on_file_chown"), 0, 0);
|
151
152
|
break;
|
152
153
|
case UV_FS_WRITE:
|
153
|
-
rb_funcall(target, rb_intern("
|
154
|
+
rb_funcall(target, rb_intern("on_file_write"), 0, 0);
|
154
155
|
break;
|
155
156
|
case UV_FS_FSTAT:
|
156
157
|
{
|
@@ -173,26 +174,26 @@ void nodeRb_fs_file_operation_callback(uv_fs_t* handle){
|
|
173
174
|
rb_iv_set(values, "@modified", LONG2NUM(stats->st_mtime));
|
174
175
|
rb_iv_set(values, "@changed", LONG2NUM(stats->st_ctime));
|
175
176
|
|
176
|
-
rb_funcall(target, rb_intern("
|
177
|
+
rb_funcall(target, rb_intern("on_file_stat"), 1, values);
|
177
178
|
}
|
178
179
|
break;
|
179
180
|
case UV_FS_OPEN:
|
180
181
|
{
|
181
182
|
uv_file fd = (uv_file) handle->result;
|
182
183
|
rb_iv_set(target, "@_handle", INT2NUM(fd)); //INT2NUM(fd)
|
183
|
-
rb_funcall(target, rb_intern("
|
184
|
+
rb_funcall(target, rb_intern("on_file_open"), 0, 0);
|
184
185
|
}
|
185
186
|
break;
|
186
187
|
case UV_FS_READ:
|
187
188
|
{
|
188
189
|
int size = (int) handle->result;
|
189
190
|
char* buf = data->buffer;
|
190
|
-
rb_funcall(target, rb_intern("
|
191
|
+
rb_funcall(target, rb_intern("on_file_read"), 1, rb_str_new(buf, size));
|
191
192
|
free(buf);
|
192
193
|
}
|
193
194
|
break;
|
194
195
|
case UV_FS_CLOSE:
|
195
|
-
rb_funcall(target, rb_intern("
|
196
|
+
rb_funcall(target, rb_intern("on_file_close"), 0, 0);
|
196
197
|
nodeRb_unregister_instance(target);
|
197
198
|
rb_iv_set(target, "@_handle", Qnil);
|
198
199
|
break;
|
@@ -274,4 +275,5 @@ VALUE nodeRb_fs_file_operation(VALUE self, VALUE roperation, VALUE params){
|
|
274
275
|
uv_fs_close(uv_default_loop(), handle, fd, nodeRb_fs_file_operation_callback);
|
275
276
|
break;
|
276
277
|
}
|
278
|
+
return self;
|
277
279
|
}
|
@@ -35,18 +35,20 @@ VALUE nodeRb_process_write(VALUE self, VALUE data) {
|
|
35
35
|
nodeRb_process_handle* process_handle = (nodeRb_process_handle*) handle->data;
|
36
36
|
// Write data to stream
|
37
37
|
nodeRb_write((uv_stream_t*) process_handle->stdi, buffer, sizeof(buffer));
|
38
|
+
return self;
|
38
39
|
}
|
39
40
|
|
40
41
|
VALUE nodeRb_process_kill(VALUE self, VALUE signal) {
|
41
42
|
uv_process_t *handle;
|
42
43
|
Data_Get_Struct(rb_iv_get(self, "@_handle"), uv_process_t, handle);
|
43
44
|
uv_process_kill(handle, (int) rb_num2int(signal));
|
45
|
+
return self;
|
44
46
|
}
|
45
47
|
|
46
48
|
void nodeRb_process_exit(uv_process_t* handle, int status, int signal) {
|
47
49
|
nodeRb_process_handle* process_handle = (nodeRb_process_handle*) handle->data;
|
48
50
|
VALUE clazz = nodeRb_get_class_from_id(process_handle->target);
|
49
|
-
rb_funcall(clazz, rb_intern("
|
51
|
+
rb_funcall(clazz, rb_intern("on_process_close"), 2, rb_int2inum(status), rb_int2inum(signal));
|
50
52
|
}
|
51
53
|
|
52
54
|
VALUE nodeRb_startProcess(VALUE self, VALUE executable, VALUE arguments, VALUE environment, VALUE directory, VALUE clazz) {
|
@@ -99,7 +101,7 @@ VALUE nodeRb_startProcess(VALUE self, VALUE executable, VALUE arguments, VALUE e
|
|
99
101
|
options.stdout_stream = stdo;
|
100
102
|
nodeRb_process_read_handle* stdout_handle = malloc(sizeof(nodeRb_process_read_handle));
|
101
103
|
stdout_handle->target = process_handle->target;
|
102
|
-
stdout_handle->target_callback = (char*) "
|
104
|
+
stdout_handle->target_callback = (char*) "on_process_stdout";
|
103
105
|
stdo->data = stdout_handle;
|
104
106
|
process_handle->stdo = stdo;
|
105
107
|
// stderr
|
@@ -108,7 +110,7 @@ VALUE nodeRb_startProcess(VALUE self, VALUE executable, VALUE arguments, VALUE e
|
|
108
110
|
options.stderr_stream = stde;
|
109
111
|
nodeRb_process_read_handle* stderr_handle = malloc(sizeof(nodeRb_process_read_handle));
|
110
112
|
stderr_handle->target = process_handle->target;
|
111
|
-
stderr_handle->target_callback = (char*) "
|
113
|
+
stderr_handle->target_callback = (char*) "on_process_stderr";
|
112
114
|
stde->data = stderr_handle;
|
113
115
|
process_handle->stde = stde;
|
114
116
|
// libuv handle
|
@@ -122,5 +124,6 @@ VALUE nodeRb_startProcess(VALUE self, VALUE executable, VALUE arguments, VALUE e
|
|
122
124
|
uv_read_start((uv_stream_t*) stdo, nodeRb_read_alloc, nodeRb_read);
|
123
125
|
uv_read_start((uv_stream_t*) stde, nodeRb_read_alloc, nodeRb_read);
|
124
126
|
// call back ruby
|
125
|
-
rb_funcall(clazz, rb_intern("
|
127
|
+
rb_funcall(clazz, rb_intern("on_process_open"), 0);
|
128
|
+
return self;
|
126
129
|
};
|
@@ -17,7 +17,7 @@ void nodeRb_tcp_on_close(uv_handle_t* client) {
|
|
17
17
|
nodeRb_client *client_data = client->data;
|
18
18
|
VALUE object = nodeRb_get_class_from_id(client_data->target);
|
19
19
|
// Call callback for connection close
|
20
|
-
rb_funcall(object, rb_intern("
|
20
|
+
rb_funcall(object, rb_intern("on_connection_close"), 0, 0);
|
21
21
|
// Allow GC of handler instance
|
22
22
|
nodeRb_unregister_instance(object);
|
23
23
|
rb_iv_set(object, "@_handle", Qnil);
|
@@ -42,6 +42,7 @@ VALUE nodeRb_tcp_close_connection(VALUE self) {
|
|
42
42
|
Data_Get_Struct(rhandler, uv_stream_t, handle);
|
43
43
|
// Request shutdown of stream
|
44
44
|
uv_shutdown(req, handle, nodeRb_tcp_on_shutdown);
|
45
|
+
return self;
|
45
46
|
}
|
46
47
|
|
47
48
|
VALUE nodeRb_tcp_send_data(VALUE self, VALUE data) {
|
@@ -50,6 +51,7 @@ VALUE nodeRb_tcp_send_data(VALUE self, VALUE data) {
|
|
50
51
|
Data_Get_Struct(rb_iv_get(self, "@_handle"), uv_stream_t, handle);
|
51
52
|
// Request write to stream
|
52
53
|
nodeRb_write(handle, rb_string_value_ptr(&data), RSTRING_LEN(data));
|
54
|
+
return self;
|
53
55
|
}
|
54
56
|
|
55
57
|
/*
|
@@ -61,7 +63,7 @@ void nodeRb_tcp_on_client_connect(uv_connect_t* client, int status) {
|
|
61
63
|
VALUE obj = nodeRb_get_class_from_id(client_data->target);
|
62
64
|
rb_iv_set(obj, "@_handle", Data_Wrap_Struct(nodeRb_get_nodeRb_pointer(), 0, NULL, client->handle));
|
63
65
|
rb_iv_set(obj, "@_proxy_target", Data_Wrap_Struct(nodeRb_get_nodeRb_pointer(), 0, NULL, client->handle));
|
64
|
-
rb_funcall(obj, rb_intern("
|
66
|
+
rb_funcall(obj, rb_intern("on_connection_open"), 0, 0);
|
65
67
|
uv_read_start((uv_stream_t*) client->handle, nodeRb_read_alloc, nodeRb_read);
|
66
68
|
}
|
67
69
|
|
@@ -75,11 +77,12 @@ VALUE nodeRb_tcp_startClient(VALUE self, VALUE address, VALUE port, VALUE clazz)
|
|
75
77
|
// Save client data
|
76
78
|
nodeRb_client *client_data = malloc(sizeof (nodeRb_client));
|
77
79
|
client_data->target = rb_num2long(rb_obj_id(clazz));
|
78
|
-
client_data->target_callback = (char*) "
|
80
|
+
client_data->target_callback = (char*) "on_connection_read";
|
79
81
|
handle->data = client_data;
|
80
82
|
// Open socket
|
81
83
|
int r = uv_tcp_connect(connect, handle, socket, nodeRb_tcp_on_client_connect);
|
82
84
|
if (nodeRb_handle_error(r)) return Qnil;
|
85
|
+
return self;
|
83
86
|
};
|
84
87
|
|
85
88
|
/*
|
@@ -105,10 +108,10 @@ void nodeRb_tcp_on_server_connect(uv_stream_t* server, int status) {
|
|
105
108
|
rb_iv_set(obj, "@_proxy_target", Data_Wrap_Struct(nodeRb_get_nodeRb_pointer(), 0, NULL, client));
|
106
109
|
// Get object id of handler instance
|
107
110
|
client_data->target = rb_num2long(rb_obj_id(obj));
|
108
|
-
client_data->target_callback = (char*) "
|
111
|
+
client_data->target_callback = (char*) "on_connection_read";
|
109
112
|
client->data = client_data;
|
110
113
|
// Call callback
|
111
|
-
rb_funcall(obj, rb_intern("
|
114
|
+
rb_funcall(obj, rb_intern("on_connection_open"), 0, 0);
|
112
115
|
// Listen for incoming data
|
113
116
|
uv_read_start(client, nodeRb_read_alloc, nodeRb_read);
|
114
117
|
}
|
@@ -128,4 +131,5 @@ VALUE nodeRb_tcp_startServer(VALUE self, VALUE address, VALUE port, VALUE clazz)
|
|
128
131
|
// Save information for server
|
129
132
|
VALUE name = rb_class_name(clazz);
|
130
133
|
server->data = rb_string_value_cstr(&name);
|
134
|
+
return self;
|
131
135
|
};
|
@@ -35,6 +35,7 @@ VALUE nodeRb_timers_stop(VALUE self){
|
|
35
35
|
uv_timer_stop(handle);
|
36
36
|
// Let the GC work
|
37
37
|
nodeRb_unregister_instance(self);
|
38
|
+
return self;
|
38
39
|
}
|
39
40
|
|
40
41
|
VALUE nodeRb_timers_once(VALUE self, VALUE timeout, VALUE repeat, VALUE handler){
|
@@ -55,4 +56,5 @@ VALUE nodeRb_timers_once(VALUE self, VALUE timeout, VALUE repeat, VALUE handler)
|
|
55
56
|
rb_iv_set(handler, "@_handle", Data_Wrap_Struct(nodeRb_get_nodeRb_pointer(), 0, NULL, handle));
|
56
57
|
// Schedule
|
57
58
|
uv_timer_start(handle, nodeRb_timers_callback, rb_num2long(timeout), rb_num2long(repeat));
|
59
|
+
return self;
|
58
60
|
}
|
@@ -74,6 +74,7 @@ VALUE nodeRb_startProxy(VALUE self, VALUE source, VALUE target){
|
|
74
74
|
// Enable proxy
|
75
75
|
data->proxy_enabled = 1;
|
76
76
|
data->proxy_target = target_handle;
|
77
|
+
return self;
|
77
78
|
}
|
78
79
|
|
79
80
|
VALUE nodeRb_stopProxy(VALUE self, VALUE source){
|
@@ -84,6 +85,7 @@ VALUE nodeRb_stopProxy(VALUE self, VALUE source){
|
|
84
85
|
nodeRb_basic_handle* data = (nodeRb_basic_handle*) source_handle->data;
|
85
86
|
// Disable proxy
|
86
87
|
data->proxy_enabled = 0;
|
88
|
+
return self;
|
87
89
|
}
|
88
90
|
|
89
91
|
/*
|
@@ -109,6 +111,7 @@ VALUE nodeRb_nextTick(VALUE self) {
|
|
109
111
|
nodeRbNextTickStatus = 1;
|
110
112
|
uv_idle_start(handle, nodeRb_next_tick);
|
111
113
|
}
|
114
|
+
return self;
|
112
115
|
}
|
113
116
|
|
114
117
|
/*
|
@@ -118,21 +121,25 @@ VALUE nodeRb_nextTick(VALUE self) {
|
|
118
121
|
// Register object to be GC safe
|
119
122
|
VALUE nodeRb_register_instance(VALUE instance) {
|
120
123
|
rb_ary_push(rb_iv_get(nodeRb_get_nodeRb_module(), "@instances"), instance);
|
124
|
+
return instance;
|
121
125
|
}
|
122
126
|
|
123
127
|
// Ruby wrapper for previous function
|
124
128
|
VALUE nodeRb_registerInstance(VALUE self, VALUE instance) {
|
125
129
|
nodeRb_register_instance(instance);
|
130
|
+
return self;
|
126
131
|
}
|
127
132
|
|
128
133
|
// Unregister object to be GC safe
|
129
134
|
VALUE nodeRb_unregister_instance(VALUE instance) {
|
130
135
|
rb_ary_delete(rb_iv_get(nodeRb_get_nodeRb_module(), "@instances"), instance);
|
136
|
+
return instance;
|
131
137
|
}
|
132
138
|
|
133
139
|
// Ruby wrapper for previous function
|
134
140
|
VALUE nodeRb_unregisterInstance(VALUE self, VALUE instance) {
|
135
141
|
nodeRb_unregister_instance(instance);
|
142
|
+
return self;
|
136
143
|
}
|
137
144
|
|
138
145
|
// Transforms Ruby Object.object_id back into the Object
|
@@ -158,4 +165,5 @@ VALUE nodeRb_start(VALUE self) {
|
|
158
165
|
rb_yield(Qnil);
|
159
166
|
}
|
160
167
|
uv_run(uv_default_loop());
|
168
|
+
return self;
|
161
169
|
};
|
data/lib/noderb.rb
CHANGED
data/lib/noderb/connection.rb
CHANGED
data/lib/noderb/file.rb
CHANGED
@@ -1,119 +1,119 @@
|
|
1
1
|
module NodeRb
|
2
2
|
|
3
|
-
|
3
|
+
module File
|
4
4
|
|
5
|
-
|
5
|
+
# Operations
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
7
|
+
def file_open(file, flags = "r", mode = 600)
|
8
|
+
flags = case flags
|
9
|
+
when "r"
|
10
|
+
1
|
11
|
+
when "w"
|
12
|
+
2
|
13
|
+
else
|
14
|
+
0
|
15
|
+
end
|
16
|
+
operation_native(0, [file, flags, mode])
|
17
|
+
end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
def file_read(size = 1024, offset = 0)
|
20
|
+
operation_native(1, [size, offset])
|
21
|
+
end
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
def file_write(data)
|
24
|
+
operation_native(2, data)
|
25
|
+
end
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
def file_stat
|
28
|
+
operation_native(3, nil)
|
29
|
+
end
|
30
30
|
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
def file_sync
|
32
|
+
operation_native(4, nil)
|
33
|
+
end
|
34
34
|
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
def file_datasync
|
36
|
+
operation_native(5, nil)
|
37
|
+
end
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
|
39
|
+
def file_truncate(offset = 0)
|
40
|
+
operation_native(6, offset)
|
41
|
+
end
|
42
42
|
|
43
|
-
|
44
|
-
|
45
|
-
|
43
|
+
def file_sendfile(output, offset = 0, length = 1024)
|
44
|
+
operation_native(7, [output, offset, length])
|
45
|
+
end
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
|
47
|
+
def file_utime(atime, mtime)
|
48
|
+
operation_native(8, [atime, mtime])
|
49
|
+
end
|
50
50
|
|
51
|
-
|
52
|
-
|
53
|
-
|
51
|
+
def file_chmod(mode)
|
52
|
+
operation_native(9, mode)
|
53
|
+
end
|
54
54
|
|
55
|
-
|
56
|
-
|
57
|
-
|
55
|
+
def file_chown(uid, gid)
|
56
|
+
operation_native(10, [uid, gid])
|
57
|
+
end
|
58
58
|
|
59
|
-
|
60
|
-
|
61
|
-
|
59
|
+
def file_close
|
60
|
+
operation_native(11, nil)
|
61
|
+
end
|
62
62
|
|
63
|
-
|
63
|
+
# Callbacks
|
64
64
|
|
65
|
-
|
65
|
+
def on_file_open
|
66
66
|
|
67
|
-
|
67
|
+
end
|
68
68
|
|
69
|
-
|
69
|
+
def on_file_read(data)
|
70
70
|
|
71
|
-
|
71
|
+
end
|
72
72
|
|
73
|
-
|
73
|
+
def on_file_write
|
74
74
|
|
75
|
-
|
75
|
+
end
|
76
76
|
|
77
|
-
|
78
|
-
|
79
|
-
end
|
77
|
+
def on_file_stat
|
80
78
|
|
81
|
-
|
82
|
-
|
83
|
-
end
|
79
|
+
end
|
84
80
|
|
85
|
-
|
86
|
-
|
87
|
-
end
|
81
|
+
def on_file_sync
|
88
82
|
|
89
|
-
|
90
|
-
|
91
|
-
end
|
83
|
+
end
|
92
84
|
|
93
|
-
|
94
|
-
|
95
|
-
end
|
85
|
+
def on_file_datasync
|
96
86
|
|
97
|
-
|
87
|
+
end
|
98
88
|
|
99
|
-
|
89
|
+
def on_file_truncate
|
100
90
|
|
101
|
-
|
102
|
-
|
103
|
-
end
|
91
|
+
end
|
104
92
|
|
105
|
-
|
106
|
-
|
107
|
-
end
|
93
|
+
def on_file_sendfile
|
108
94
|
|
109
|
-
|
95
|
+
end
|
110
96
|
|
111
|
-
|
97
|
+
def on_file_utime
|
112
98
|
|
113
|
-
|
114
|
-
|
115
|
-
end
|
99
|
+
end
|
116
100
|
|
117
|
-
|
101
|
+
def on_file_chmod
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
def on_file_chown
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
def on_file_close
|
110
|
+
|
111
|
+
end
|
112
|
+
|
113
|
+
def on_file_error
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
118
|
|
119
119
|
end
|
data/lib/noderb/fs.rb
CHANGED
@@ -1,72 +1,72 @@
|
|
1
1
|
module NodeRb
|
2
2
|
|
3
|
-
|
3
|
+
class FileSystem
|
4
4
|
|
5
|
-
|
5
|
+
class << self
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
def unlink path, &block
|
8
|
+
fs_native(0, path, nil, block)
|
9
|
+
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
def mkdir path, mode, &block
|
12
|
+
fs_native(1, path, mode, block)
|
13
|
+
end
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
def rmdir path, &block
|
16
|
+
fs_native(2, path, nil, block)
|
17
|
+
end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
19
|
+
def readdir path, flags = 2, &block
|
20
|
+
parser = proc do |data|
|
21
|
+
data ? block.call(data.split("\0")) : block.call(data)
|
22
|
+
end
|
23
|
+
fs_native(3, path, flags, parser)
|
24
|
+
end
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
def stat path, &block
|
27
|
+
fs_native(4, path, nil, block)
|
28
|
+
end
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
def rename path, new_path, &block
|
31
|
+
fs_native(5, path, new_path, block)
|
32
|
+
end
|
33
33
|
|
34
|
-
|
35
|
-
|
36
|
-
|
34
|
+
def chmod path, mode, &block
|
35
|
+
fs_native(6, path, mode, block)
|
36
|
+
end
|
37
37
|
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
def utime path, atime, mtime, &block
|
39
|
+
fs_native(7, path, [atime, mtime], block)
|
40
|
+
end
|
41
41
|
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
def lstat path, &block
|
43
|
+
fs_native(8, path, nil, block)
|
44
|
+
end
|
45
45
|
|
46
|
-
|
47
|
-
|
48
|
-
|
46
|
+
def link path, new_path, &block
|
47
|
+
fs_native(9, path, new_path, block)
|
48
|
+
end
|
49
49
|
|
50
|
-
|
51
|
-
|
52
|
-
|
50
|
+
def symlink path, new_path, flags, &block
|
51
|
+
fs_native(10, path, [new_path, flags], block)
|
52
|
+
end
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
54
|
+
def readlink path, &block
|
55
|
+
# ToDo: libuv not implemented yet
|
56
|
+
block.call(nil)
|
57
|
+
#fs_native(11, path, nil, block)
|
58
|
+
end
|
59
59
|
|
60
|
-
|
61
|
-
|
62
|
-
|
60
|
+
def chown path, uid, gid, &block
|
61
|
+
fs_native(12, path, [uid, gid], block)
|
62
|
+
end
|
63
63
|
|
64
|
-
|
64
|
+
end
|
65
65
|
|
66
|
-
|
66
|
+
end
|
67
67
|
|
68
|
-
|
69
|
-
|
70
|
-
|
68
|
+
class Stat
|
69
|
+
|
70
|
+
end
|
71
71
|
|
72
72
|
end
|
data/lib/noderb/next_tick.rb
CHANGED
@@ -1,18 +1,24 @@
|
|
1
1
|
module NodeRb
|
2
2
|
|
3
3
|
class << self
|
4
|
-
|
5
|
-
def next_tick &block
|
6
|
-
(
|
4
|
+
|
5
|
+
def next_tick params = nil, &block
|
6
|
+
next_tick_schedule(block, params)
|
7
|
+
end
|
8
|
+
|
9
|
+
def next_tick_schedule block, params
|
10
|
+
@next_tick ||= []
|
11
|
+
@next_tick << [block, params]
|
7
12
|
NodeRb.send(:next_tick_native)
|
8
13
|
end
|
9
|
-
|
14
|
+
|
10
15
|
def next_tick_execute
|
11
16
|
blocks, @next_tick = @next_tick, []
|
12
17
|
blocks.each do |block|
|
13
|
-
block
|
18
|
+
block, params = block
|
19
|
+
params ? block.call(params) : block.call
|
14
20
|
end
|
15
21
|
end
|
16
|
-
|
22
|
+
|
17
23
|
end
|
18
24
|
end
|
data/lib/noderb/process.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
module NodeRb
|
2
2
|
module Process
|
3
3
|
|
4
|
-
def
|
4
|
+
def on_process_open
|
5
5
|
end
|
6
6
|
|
7
|
-
def
|
7
|
+
def on_process_stdout data
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
10
|
+
def on_process_stderr data
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
13
|
+
def on_process_close status, signal
|
14
14
|
end
|
15
15
|
|
16
16
|
end
|
data/lib/noderb/timers.rb
CHANGED
data/lib/noderb/tools.rb
ADDED
data/lib/noderb/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module NodeRb
|
2
|
-
VERSION = "0.0.
|
3
|
-
end
|
2
|
+
VERSION = "0.0.12" unless const_defined?(:VERSION)
|
3
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: noderb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.12
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-10-04 00:00:00.000000000Z
|
13
13
|
dependencies: []
|
14
14
|
description: Port of the NodeJs library to Ruby, featuring asynchronous IO operations
|
15
15
|
of all kinds.
|
@@ -29,6 +29,7 @@ files:
|
|
29
29
|
- lib/noderb/process.rb
|
30
30
|
- lib/noderb/tcp.rb
|
31
31
|
- lib/noderb/timers.rb
|
32
|
+
- lib/noderb/tools.rb
|
32
33
|
- lib/noderb/version.rb
|
33
34
|
- lib/noderb.rb
|
34
35
|
- ext/noderb_extension/extconf.rb
|