nng 0.1.0.alpha.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/ext/rbnng/extconf.rb +21 -0
- data/ext/rbnng/msg.c +63 -0
- data/ext/rbnng/msg.h +22 -0
- data/ext/rbnng/rbnng.c +34 -0
- data/ext/rbnng/rbnng.h +13 -0
- data/ext/rbnng/rep0.c +145 -0
- data/ext/rbnng/req0.c +123 -0
- data/ext/rbnng/socket.c +20 -0
- data/ext/rbnng/socket.h +33 -0
- data/lib/nng/version.rb +3 -0
- data/lib/nng.rb +2 -0
- metadata +56 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 00d81bda694b3cd8462da25c8164aa36f2f3deef9c193137676685dfcca23b8f
|
4
|
+
data.tar.gz: cc226d519edf60e5d6c11f07cd712a256f5a2bb38ff173b0d2d35afd308189da
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 46a65accea3794de74022cb7d053a80f508089dd10e920e82ba3ff18a02013e21c66010c85bdcc536a07183cf11464a84a0d47e728c9c6d0720f2ad280344e37
|
7
|
+
data.tar.gz: 85a52e9c5814801b73a2ec7ea8bcba92a1f5d053f3c04dcc56c45c9d7bd8279532fad11b080109d5a08895e51bc7c32e685d70dd0bf40ff86ab717bc31ae2070
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2021 Adib Saad
|
3
|
+
#
|
4
|
+
require 'mkmf'
|
5
|
+
dir_config('nng')
|
6
|
+
|
7
|
+
def header?
|
8
|
+
have_header('nng/nng.h') ||
|
9
|
+
find_header('nng/nng.h', '/opt/local/include', '/usr/local/include', '/usr/include')
|
10
|
+
end
|
11
|
+
|
12
|
+
def library?
|
13
|
+
have_library('nng', 'nng_fini') ||
|
14
|
+
find_library('nng', 'nng_fini', '/opt/local/lib', '/usr/local/lib', '/usr/lib')
|
15
|
+
end
|
16
|
+
|
17
|
+
if header? && library?
|
18
|
+
create_makefile("nng/rbnng")
|
19
|
+
else
|
20
|
+
raise "Couldn't find nng library. try setting --with-nng-dir=<path> to tell me where it is."
|
21
|
+
end
|
data/ext/rbnng/msg.c
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright (c) 2021 Adib Saad
|
3
|
+
*
|
4
|
+
*/
|
5
|
+
|
6
|
+
#include "msg.h"
|
7
|
+
#include <nng/protocol/reqrep0/rep.h>
|
8
|
+
#include <ruby.h>
|
9
|
+
#include <signal.h>
|
10
|
+
|
11
|
+
VALUE rbnng_MsgClass = Qnil;
|
12
|
+
|
13
|
+
void
|
14
|
+
msg_free(void* ptr)
|
15
|
+
{
|
16
|
+
RbnngMsg* p_rbnngMsg = ptr;
|
17
|
+
if (p_rbnngMsg->msg) {
|
18
|
+
nng_msg_free(p_rbnngMsg->msg);
|
19
|
+
}
|
20
|
+
xfree(p_rbnngMsg);
|
21
|
+
}
|
22
|
+
|
23
|
+
static VALUE
|
24
|
+
msg_alloc(VALUE klass)
|
25
|
+
{
|
26
|
+
RbnngMsg* p_rbnngMsg = ZALLOC(RbnngMsg);
|
27
|
+
return rb_data_object_wrap(klass, p_rbnngMsg, 0, msg_free);
|
28
|
+
}
|
29
|
+
|
30
|
+
static VALUE
|
31
|
+
msg_body(VALUE self)
|
32
|
+
{
|
33
|
+
RbnngMsg* p_rbnngMsg;
|
34
|
+
Data_Get_Struct(self, RbnngMsg, p_rbnngMsg);
|
35
|
+
if (p_rbnngMsg->msg) {
|
36
|
+
return rb_str_new(nng_msg_body(p_rbnngMsg->msg),
|
37
|
+
nng_msg_len(p_rbnngMsg->msg));
|
38
|
+
} else {
|
39
|
+
return rb_str_new_cstr("");
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
static VALUE
|
44
|
+
msg_header(VALUE self)
|
45
|
+
{
|
46
|
+
RbnngMsg* p_rbnngMsg;
|
47
|
+
Data_Get_Struct(self, RbnngMsg, p_rbnngMsg);
|
48
|
+
if (p_rbnngMsg->msg) {
|
49
|
+
return rb_str_new(nng_msg_header(p_rbnngMsg->msg),
|
50
|
+
nng_msg_header_len(p_rbnngMsg->msg));
|
51
|
+
} else {
|
52
|
+
return rb_str_new_cstr("");
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
void
|
57
|
+
rbnng_msg_Init(VALUE nng_module)
|
58
|
+
{
|
59
|
+
rbnng_MsgClass = rb_define_class_under(nng_module, "Msg", rb_cObject);
|
60
|
+
rb_define_alloc_func(rbnng_MsgClass, msg_alloc);
|
61
|
+
rb_define_method(rbnng_MsgClass, "body", msg_body, 0);
|
62
|
+
rb_define_method(rbnng_MsgClass, "header", msg_header, 0);
|
63
|
+
}
|
data/ext/rbnng/msg.h
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright (c) 2021 Adib Saad
|
3
|
+
*
|
4
|
+
*/
|
5
|
+
|
6
|
+
#ifndef RBNNG_MSG_H
|
7
|
+
#define RBNNG_MSG_H
|
8
|
+
|
9
|
+
#include <nng/nng.h>
|
10
|
+
#include <ruby.h>
|
11
|
+
|
12
|
+
extern VALUE rbnng_MsgClass;
|
13
|
+
|
14
|
+
typedef struct
|
15
|
+
{
|
16
|
+
nng_msg* msg;
|
17
|
+
} RbnngMsg;
|
18
|
+
|
19
|
+
extern void
|
20
|
+
rbnng_msg_Init(VALUE nng_module);
|
21
|
+
|
22
|
+
#endif
|
data/ext/rbnng/rbnng.c
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright (c) 2021 Adib Saad
|
3
|
+
*
|
4
|
+
*/
|
5
|
+
|
6
|
+
#include <nng/nng.h>
|
7
|
+
#include <ruby.h>
|
8
|
+
|
9
|
+
#include "rbnng.h"
|
10
|
+
#include "socket.h"
|
11
|
+
#include "msg.h"
|
12
|
+
|
13
|
+
VALUE rbnng_exceptionClass = Qnil;
|
14
|
+
|
15
|
+
static VALUE
|
16
|
+
library_version(VALUE self_)
|
17
|
+
{
|
18
|
+
return rb_ary_new3(3,
|
19
|
+
INT2NUM(NNG_MAJOR_VERSION),
|
20
|
+
INT2NUM(NNG_MINOR_VERSION),
|
21
|
+
INT2NUM(NNG_PATCH_VERSION));
|
22
|
+
}
|
23
|
+
|
24
|
+
void
|
25
|
+
Init_rbnng()
|
26
|
+
{
|
27
|
+
VALUE nng_module = rb_define_module("NNG");
|
28
|
+
rb_define_singleton_method(nng_module, "nng_version", library_version, 0);
|
29
|
+
rbnng_exceptionClass = rb_define_class_under(nng_module, "Error", rb_eRuntimeError);
|
30
|
+
|
31
|
+
rbnng_rep0_Init(nng_module);
|
32
|
+
rbnng_req0_Init(nng_module);
|
33
|
+
rbnng_msg_Init(nng_module);
|
34
|
+
}
|
data/ext/rbnng/rbnng.h
ADDED
data/ext/rbnng/rep0.c
ADDED
@@ -0,0 +1,145 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright (c) 2021 Adib Saad
|
3
|
+
*
|
4
|
+
*/
|
5
|
+
|
6
|
+
#include "msg.h"
|
7
|
+
#include "rbnng.h"
|
8
|
+
#include "socket.h"
|
9
|
+
#include <nng/protocol/reqrep0/rep.h>
|
10
|
+
#include <ruby.h>
|
11
|
+
#include <ruby/thread.h>
|
12
|
+
|
13
|
+
static VALUE
|
14
|
+
socket_rep0_listen(VALUE self, VALUE url)
|
15
|
+
{
|
16
|
+
Check_Type(url, T_STRING);
|
17
|
+
int rv;
|
18
|
+
RbnngSocket* p_rbnngSocket;
|
19
|
+
Data_Get_Struct(self, RbnngSocket, p_rbnngSocket);
|
20
|
+
if ((rv = nng_listen(p_rbnngSocket->socket, StringValueCStr(url), NULL, 0)) !=
|
21
|
+
0) {
|
22
|
+
rb_raise(rbnng_exceptionClass, "nng_listen %d", rv);
|
23
|
+
}
|
24
|
+
return self;
|
25
|
+
}
|
26
|
+
|
27
|
+
void*
|
28
|
+
rep0_get_msg_blocking(void* data)
|
29
|
+
{
|
30
|
+
VALUE self = (VALUE)data;
|
31
|
+
RbnngSocket* p_rbnngSocket;
|
32
|
+
Data_Get_Struct(self, RbnngSocket, p_rbnngSocket);
|
33
|
+
|
34
|
+
nng_aio* p_aio;
|
35
|
+
int rv;
|
36
|
+
if ((rv = nng_aio_alloc(&p_aio, 0, 0)) != 0) {
|
37
|
+
rb_raise(rbnng_exceptionClass, "nng_aio_alloc %d", rv);
|
38
|
+
}
|
39
|
+
|
40
|
+
nng_ctx_recv(p_rbnngSocket->ctx, p_aio);
|
41
|
+
nng_aio_wait(p_aio);
|
42
|
+
|
43
|
+
if ((rv = nng_aio_result(p_aio)) != 0) {
|
44
|
+
rb_raise(rbnng_exceptionClass, "nng_aio_result %d", rv);
|
45
|
+
}
|
46
|
+
|
47
|
+
nng_msg* p_msg = nng_aio_get_msg(p_aio);
|
48
|
+
nng_aio_free(p_aio);
|
49
|
+
return p_msg;
|
50
|
+
}
|
51
|
+
|
52
|
+
static VALUE
|
53
|
+
socket_rep0_get_msg(VALUE self)
|
54
|
+
{
|
55
|
+
nng_msg* nng_msg_ptr =
|
56
|
+
rb_thread_call_without_gvl(rep0_get_msg_blocking, self, 0, 0);
|
57
|
+
|
58
|
+
if (nng_msg_ptr) {
|
59
|
+
RbnngMsg* rbnng_new_msg_ptr;
|
60
|
+
VALUE newMsg = rb_class_new_instance(0, 0, rbnng_MsgClass);
|
61
|
+
Data_Get_Struct(newMsg, RbnngMsg, rbnng_new_msg_ptr);
|
62
|
+
rbnng_new_msg_ptr->msg = nng_msg_ptr;
|
63
|
+
return newMsg;
|
64
|
+
} else {
|
65
|
+
VALUE newMsg = rb_class_new_instance(0, 0, rbnng_MsgClass);
|
66
|
+
return newMsg;
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
void*
|
71
|
+
rep0_send_msg_blocking(void* data)
|
72
|
+
{
|
73
|
+
RbnngSendMsgReq* p_sendMsgReq = (RbnngSendMsgReq*)data;
|
74
|
+
RbnngSocket* p_rbnngSocket;
|
75
|
+
Data_Get_Struct(p_sendMsgReq->socketObj, RbnngSocket, p_rbnngSocket);
|
76
|
+
|
77
|
+
nng_aio* p_aio;
|
78
|
+
int rv;
|
79
|
+
if ((rv = nng_aio_alloc(&p_aio, 0, 0)) != 0) {
|
80
|
+
rb_raise(rbnng_exceptionClass, "nng_aio_alloc %d", rv);
|
81
|
+
}
|
82
|
+
|
83
|
+
nng_msg* p_msg;
|
84
|
+
if ((rv = nng_msg_alloc(&p_msg, 0)) != 0) {
|
85
|
+
rb_raise(rbnng_exceptionClass, "nng_msg_alloc %d", rv);
|
86
|
+
}
|
87
|
+
|
88
|
+
nng_msg_clear(p_msg);
|
89
|
+
nng_msg_append(p_msg,
|
90
|
+
StringValuePtr(p_sendMsgReq->nextMsg),
|
91
|
+
RSTRING_LEN(p_sendMsgReq->nextMsg));
|
92
|
+
|
93
|
+
nng_aio_set_msg(p_aio, p_msg);
|
94
|
+
nng_ctx_send(p_rbnngSocket->ctx, p_aio);
|
95
|
+
nng_aio_wait(p_aio);
|
96
|
+
|
97
|
+
if ((rv = nng_aio_result(p_aio)) != 0) {
|
98
|
+
rb_raise(rbnng_exceptionClass, "nng_aio_result %d", rv);
|
99
|
+
}
|
100
|
+
|
101
|
+
nng_aio_free(p_aio);
|
102
|
+
}
|
103
|
+
|
104
|
+
static VALUE
|
105
|
+
socket_rep0_send_msg(VALUE self, VALUE rb_strMsg)
|
106
|
+
{
|
107
|
+
Check_Type(rb_strMsg, T_STRING);
|
108
|
+
|
109
|
+
RbnngSendMsgReq sendMsgReq = {
|
110
|
+
.socketObj = self,
|
111
|
+
.nextMsg = rb_strMsg,
|
112
|
+
};
|
113
|
+
rb_thread_call_without_gvl(rep0_send_msg_blocking, &sendMsgReq, 0, 0);
|
114
|
+
}
|
115
|
+
|
116
|
+
static VALUE
|
117
|
+
socket_rep0_initialize(VALUE self)
|
118
|
+
{
|
119
|
+
int rv;
|
120
|
+
RbnngSocket* p_rbnngSocket;
|
121
|
+
Data_Get_Struct(self, RbnngSocket, p_rbnngSocket);
|
122
|
+
if ((rv = nng_rep0_open(&p_rbnngSocket->socket)) != 0) {
|
123
|
+
rb_raise(rbnng_exceptionClass, "nng_rep0_open %d", rv);
|
124
|
+
}
|
125
|
+
|
126
|
+
if ((rv = nng_ctx_open(&p_rbnngSocket->ctx, p_rbnngSocket->socket)) != 0) {
|
127
|
+
rb_raise(rbnng_exceptionClass, "nng_ctx_open %d", rv);
|
128
|
+
}
|
129
|
+
|
130
|
+
return self;
|
131
|
+
}
|
132
|
+
|
133
|
+
void
|
134
|
+
rbnng_rep0_Init(VALUE nng_module)
|
135
|
+
{
|
136
|
+
VALUE rbnng_SocketModule = rb_define_module_under(nng_module, "Socket");
|
137
|
+
VALUE rbnng_SocketRep0Class =
|
138
|
+
rb_define_class_under(rbnng_SocketModule, "Rep0", rb_cObject);
|
139
|
+
rb_define_alloc_func(rbnng_SocketRep0Class, socket_alloc);
|
140
|
+
rb_define_method(
|
141
|
+
rbnng_SocketRep0Class, "initialize", socket_rep0_initialize, 0);
|
142
|
+
rb_define_method(rbnng_SocketRep0Class, "get_msg", socket_rep0_get_msg, 0);
|
143
|
+
rb_define_method(rbnng_SocketRep0Class, "send_msg", socket_rep0_send_msg, 1);
|
144
|
+
rb_define_method(rbnng_SocketRep0Class, "listen", socket_rep0_listen, 1);
|
145
|
+
}
|
data/ext/rbnng/req0.c
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright (c) 2021 Adib Saad
|
3
|
+
*
|
4
|
+
*/
|
5
|
+
|
6
|
+
#include "msg.h"
|
7
|
+
#include "rbnng.h"
|
8
|
+
#include "socket.h"
|
9
|
+
#include <nng/protocol/reqrep0/req.h>
|
10
|
+
#include <ruby.h>
|
11
|
+
#include <ruby/thread.h>
|
12
|
+
|
13
|
+
static VALUE
|
14
|
+
socket_req0_dial(VALUE self, VALUE url)
|
15
|
+
{
|
16
|
+
Check_Type(url, T_STRING);
|
17
|
+
int rv;
|
18
|
+
RbnngSocket* p_rbnngSocket;
|
19
|
+
Data_Get_Struct(self, RbnngSocket, p_rbnngSocket);
|
20
|
+
if ((rv = nng_dial(p_rbnngSocket->socket, StringValueCStr(url), NULL, 0)) !=
|
21
|
+
0) {
|
22
|
+
rb_raise(rbnng_exceptionClass, "nng_dial %d", rv);
|
23
|
+
}
|
24
|
+
return self;
|
25
|
+
}
|
26
|
+
|
27
|
+
void*
|
28
|
+
req0_get_msg_blocking(void* data)
|
29
|
+
{
|
30
|
+
VALUE self = (VALUE)data;
|
31
|
+
RbnngSocket* p_rbnngSocket;
|
32
|
+
Data_Get_Struct(self, RbnngSocket, p_rbnngSocket);
|
33
|
+
|
34
|
+
int rv;
|
35
|
+
nng_msg* p_msg;
|
36
|
+
if ((rv = nng_recvmsg(p_rbnngSocket->socket, &p_msg, 0)) != 0) {
|
37
|
+
rb_raise(rbnng_exceptionClass, "nng_recvmsg %d", rv);
|
38
|
+
}
|
39
|
+
|
40
|
+
return p_msg;
|
41
|
+
}
|
42
|
+
|
43
|
+
static VALUE
|
44
|
+
socket_req0_get_msg(VALUE self)
|
45
|
+
{
|
46
|
+
nng_msg* p_msg =
|
47
|
+
rb_thread_call_without_gvl(req0_get_msg_blocking, self, 0, 0);
|
48
|
+
|
49
|
+
if (p_msg) {
|
50
|
+
RbnngMsg* p_newMsg;
|
51
|
+
VALUE newMsg = rb_class_new_instance(0, 0, rbnng_MsgClass);
|
52
|
+
Data_Get_Struct(newMsg, RbnngMsg, p_newMsg);
|
53
|
+
p_newMsg->msg = p_msg;
|
54
|
+
return newMsg;
|
55
|
+
} else {
|
56
|
+
VALUE newMsg = rb_funcall(rbnng_MsgClass, rb_intern("new"), 0);
|
57
|
+
return newMsg;
|
58
|
+
}
|
59
|
+
}
|
60
|
+
|
61
|
+
void*
|
62
|
+
req0_send_msg_blocking(void* data)
|
63
|
+
{
|
64
|
+
RbnngSendMsgReq* p_sendMsgReq = (RbnngSendMsgReq*)data;
|
65
|
+
RbnngSocket* p_rbnngSocket;
|
66
|
+
Data_Get_Struct(p_sendMsgReq->socketObj, RbnngSocket, p_rbnngSocket);
|
67
|
+
int rv;
|
68
|
+
nng_msg* msg;
|
69
|
+
if ((rv = nng_msg_alloc(&msg, 0)) != 0) {
|
70
|
+
rb_raise(rbnng_exceptionClass, "nng_msg_alloc %d", rv);
|
71
|
+
}
|
72
|
+
|
73
|
+
nng_msg_append(msg,
|
74
|
+
StringValuePtr(p_sendMsgReq->nextMsg),
|
75
|
+
RSTRING_LEN(p_sendMsgReq->nextMsg));
|
76
|
+
|
77
|
+
if ((rv = nng_sendmsg(p_rbnngSocket->socket, msg, 0)) != 0) {
|
78
|
+
rb_raise(rbnng_exceptionClass, "nng_sendmsg %d", rv);
|
79
|
+
}
|
80
|
+
|
81
|
+
nng_msg_free(msg);
|
82
|
+
|
83
|
+
return 0;
|
84
|
+
}
|
85
|
+
|
86
|
+
static VALUE
|
87
|
+
socket_req0_send_msg(VALUE self, VALUE rb_strMsg)
|
88
|
+
{
|
89
|
+
Check_Type(rb_strMsg, T_STRING);
|
90
|
+
RbnngSendMsgReq sendMsgReq = {
|
91
|
+
.socketObj = self,
|
92
|
+
.nextMsg = rb_strMsg,
|
93
|
+
};
|
94
|
+
rb_thread_call_without_gvl(req0_send_msg_blocking, &sendMsgReq, 0, 0);
|
95
|
+
|
96
|
+
return Qnil;
|
97
|
+
}
|
98
|
+
|
99
|
+
static VALUE
|
100
|
+
socket_req0_initialize(VALUE self)
|
101
|
+
{
|
102
|
+
RbnngSocket* p_rbnngSocket;
|
103
|
+
Data_Get_Struct(self, RbnngSocket, p_rbnngSocket);
|
104
|
+
int rv = nng_req0_open(&p_rbnngSocket->socket);
|
105
|
+
if (rv != 0) {
|
106
|
+
rb_raise(rbnng_exceptionClass, "nng_req0_open %d", rv);
|
107
|
+
}
|
108
|
+
return self;
|
109
|
+
}
|
110
|
+
|
111
|
+
void
|
112
|
+
rbnng_req0_Init(VALUE nng_module)
|
113
|
+
{
|
114
|
+
VALUE rbnng_SocketModule = rb_define_module_under(nng_module, "Socket");
|
115
|
+
VALUE rbnng_SocketRep0Class =
|
116
|
+
rb_define_class_under(rbnng_SocketModule, "Req0", rb_cObject);
|
117
|
+
rb_define_alloc_func(rbnng_SocketRep0Class, socket_alloc);
|
118
|
+
rb_define_method(
|
119
|
+
rbnng_SocketRep0Class, "initialize", socket_req0_initialize, 0);
|
120
|
+
rb_define_method(rbnng_SocketRep0Class, "get_msg", socket_req0_get_msg, 0);
|
121
|
+
rb_define_method(rbnng_SocketRep0Class, "send_msg", socket_req0_send_msg, 1);
|
122
|
+
rb_define_method(rbnng_SocketRep0Class, "dial", socket_req0_dial, 1);
|
123
|
+
}
|
data/ext/rbnng/socket.c
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright (c) 2021 Adib Saad
|
3
|
+
*
|
4
|
+
*/
|
5
|
+
#include "socket.h"
|
6
|
+
|
7
|
+
static void
|
8
|
+
socket_free(void* ptr)
|
9
|
+
{
|
10
|
+
RbnngSocket* p_rbnngSocket = (RbnngSocket*)ptr;
|
11
|
+
nng_close(p_rbnngSocket->socket);
|
12
|
+
xfree(p_rbnngSocket);
|
13
|
+
}
|
14
|
+
|
15
|
+
VALUE
|
16
|
+
socket_alloc(VALUE klass)
|
17
|
+
{
|
18
|
+
RbnngSocket* p_rbnngSocket = ZALLOC(RbnngSocket);
|
19
|
+
return rb_data_object_wrap(klass, p_rbnngSocket, 0, socket_free);
|
20
|
+
}
|
data/ext/rbnng/socket.h
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright (c) 2021 Adib Saad
|
3
|
+
*
|
4
|
+
*/
|
5
|
+
|
6
|
+
#ifndef RBNNG_SOCKET_H
|
7
|
+
#define RBNNG_SOCKET_H
|
8
|
+
|
9
|
+
#include <nng/nng.h>
|
10
|
+
#include <ruby.h>
|
11
|
+
#include <stdbool.h>
|
12
|
+
#include <pthread.h>
|
13
|
+
|
14
|
+
typedef struct
|
15
|
+
{
|
16
|
+
nng_socket socket;
|
17
|
+
// Not all socket types will use a context
|
18
|
+
nng_ctx ctx;
|
19
|
+
} RbnngSocket;
|
20
|
+
|
21
|
+
typedef struct {
|
22
|
+
VALUE socketObj; // A socket class instnace
|
23
|
+
VALUE nextMsg; // Ruby string
|
24
|
+
} RbnngSendMsgReq;
|
25
|
+
|
26
|
+
extern void
|
27
|
+
rbnng_rep0_Init(VALUE nng_module);
|
28
|
+
extern void
|
29
|
+
rbnng_req0_Init(VALUE nng_module);
|
30
|
+
extern VALUE
|
31
|
+
socket_alloc(VALUE);
|
32
|
+
|
33
|
+
#endif
|
data/lib/nng/version.rb
ADDED
data/lib/nng.rb
ADDED
metadata
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nng
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0.alpha.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Adib Saad
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-11-27 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description:
|
14
|
+
email:
|
15
|
+
- adib.saad@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions:
|
18
|
+
- ext/rbnng/extconf.rb
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- "./ext/rbnng/msg.c"
|
22
|
+
- "./ext/rbnng/msg.h"
|
23
|
+
- "./ext/rbnng/rbnng.c"
|
24
|
+
- "./ext/rbnng/rbnng.h"
|
25
|
+
- "./ext/rbnng/rep0.c"
|
26
|
+
- "./ext/rbnng/req0.c"
|
27
|
+
- "./ext/rbnng/socket.c"
|
28
|
+
- "./ext/rbnng/socket.h"
|
29
|
+
- "./lib/nng.rb"
|
30
|
+
- "./lib/nng/version.rb"
|
31
|
+
- ext/rbnng/extconf.rb
|
32
|
+
homepage: https://github.com/adibsaad/rbnng
|
33
|
+
licenses:
|
34
|
+
- MIT
|
35
|
+
metadata: {}
|
36
|
+
post_install_message:
|
37
|
+
rdoc_options: []
|
38
|
+
require_paths:
|
39
|
+
- ext
|
40
|
+
- lib
|
41
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
47
|
+
requirements:
|
48
|
+
- - ">"
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 1.3.1
|
51
|
+
requirements: []
|
52
|
+
rubygems_version: 3.1.6
|
53
|
+
signing_key:
|
54
|
+
specification_version: 4
|
55
|
+
summary: Ruby bindings for nng (nanomsg-ng).
|
56
|
+
test_files: []
|