rbnewt 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d6bddaa45284da07b7cf3b51104397055ab5cf08
4
- data.tar.gz: c10e6c4d5185b4f5bc576d92aeda038226afb12b
3
+ metadata.gz: 2fc9c96699a8b2aee42b4943b41863e7920a55f2
4
+ data.tar.gz: dafa4acf3efd038b7795ed6f12f303041a76aaa2
5
5
  SHA512:
6
- metadata.gz: fdd158bf69d975ed10fcf9a07425e4cc809d17df80aaadb5f5af7bdc06942350fbfd044ed9f25fca3c64769d019a82e489c2617482f783318442c7c41bfb0236
7
- data.tar.gz: 121196e8662281e56ff3e7cec45936eee922aa6e7b51deabda58175cd801f4fb4562d2d01068f4762996d5528bbdfce1b5a061948d0b6a83889be04668858c29
6
+ metadata.gz: c26d04528ac759b858a67f3f595fa94670616d5c871137acb19c457278619f07ff912eb244febf417b6b33ce6b55e340a3ea66b860ca002a66ae890df04cf350
7
+ data.tar.gz: 164bcf5a890544b1a1daf035ab084e2ec91486257027c0cbfe3f6409c21538786615bf8dc1d6392f3ee71fc7205f9bb3c8085357b310546c5310dc2c88280d71
data/extconf.rb CHANGED
@@ -1,3 +1,26 @@
1
1
  require "mkmf"
2
2
 
3
- create_makefile("rbnewt")
3
+ $libs = "-lpthread -lstomp"
4
+ $CFLAGS = "-I./include"
5
+
6
+ def is_header?
7
+ is_ok = true
8
+ is_ok &= have_header('stomp/stomp.h') ||
9
+ find_header('stomp/stomp.h', '/opt/local/include', '/usr/local/include', '/usr/include')
10
+ is_ok &= have_header('pthread.h') ||
11
+ find_header('pthread.h', '/opt/local/include', '/usr/local/include', '/usr/include')
12
+ end
13
+
14
+ def is_library?
15
+ is_ok = true
16
+ is_ok &= have_library('stomp', 'stomp_session_new') ||
17
+ find_library('stomp', 'stomp_session_new', '/opt/local/lib', '/usr/local/lib', '/usr/lib')
18
+ is_ok &= have_library('pthread', 'pthread_create') ||
19
+ find_library('pthread', 'pthread_create', '/opt/local/lib', '/usr/local/lib', '/usr/lib')
20
+ end
21
+
22
+ if is_header? and is_library?
23
+ create_makefile('rbnewt', 'src')
24
+ else
25
+ raise "Dependent libraries have not been installed yet."
26
+ end
@@ -0,0 +1,7 @@
1
+ #ifndef __NEWT_COMMON_H__
2
+ #define __NEWT_COMMON_H__
3
+
4
+ #define RET_SUCCESS 1
5
+ #define RET_ERROR -1
6
+
7
+ #endif
@@ -0,0 +1,19 @@
1
+ #ifndef __NEWT_STOMP_H__
2
+ #define __NEWT_STOMP_H__
3
+
4
+ #include <newt/common.h>
5
+ #include <stomp/stomp.h>
6
+
7
+ #define NEWT_STOMP_KEY_SERVER "server"
8
+ #define NEWT_STOMP_KEY_USERID "userid"
9
+ #define NEWT_STOMP_KEY_PASSWD "passwd"
10
+ #define NEWT_STOMP_KEY_PORT "port"
11
+
12
+ #define NEWT_STOMP_DEFAULT_SERVER "localhost"
13
+ #define NEWT_STOMP_DEFAULT_USERID "guest"
14
+ #define NEWT_STOMP_DEFAULT_PASSWD "guest"
15
+ #define NEWT_STOMP_DEFAULT_PORT "61613"
16
+
17
+ int cnewt_stomp_initialize(stomp_session_t *, char *, char *, char *, char *);
18
+
19
+ #endif
data/src/rbnewt.c ADDED
@@ -0,0 +1,99 @@
1
+ #include <ruby.h>
2
+ #include <assert.h>
3
+ #include <stdlib.h>
4
+ #include <pthread.h>
5
+ #include <stomp/stomp.h>
6
+ #include <newt/stomp.h>
7
+
8
+ static char *get_str_from_hash(VALUE hash, char *key) {
9
+ assert(TYPE(hash) == T_HASH);
10
+
11
+ VALUE v = rb_hash_aref(hash, ID2SYM(rb_intern(key)));
12
+ if(v != Qnil && TYPE(v) == T_STRING) {
13
+ return StringValueCStr(v);
14
+ }
15
+
16
+ return NULL;
17
+ }
18
+
19
+ static int get_int_from_hash(VALUE hash, char *key) {
20
+ assert(TYPE(hash) == T_HASH);
21
+
22
+ VALUE v = rb_hash_aref(hash, ID2SYM(rb_intern(key)));
23
+ if(v != Qnil && TYPE(v) == T_FIXNUM) {
24
+ return NUM2INT(v);
25
+ }
26
+
27
+ return -1;
28
+ }
29
+
30
+ VALUE newt_stomp_close(VALUE self) {
31
+ stomp_session_t *session;
32
+
33
+ Data_Get_Struct(self, stomp_session_t, session);
34
+
35
+ if(cnewt_stomp_close(session) == RET_SUCCESS) {
36
+ return self;
37
+ }
38
+
39
+ return Qnil;
40
+ }
41
+
42
+ VALUE newt_stomp_initialize(int argc, VALUE *argv, VALUE self) {
43
+ stomp_session_t *session;
44
+ VALUE opts;
45
+ char *server, *userid, *passwd, *port;
46
+
47
+ rb_scan_args(argc, argv, "01", &opts);
48
+
49
+ Data_Get_Struct(self, stomp_session_t, session);
50
+
51
+ // zero-set for initialization
52
+ server = userid = passwd = port = NULL;
53
+
54
+ if(! NIL_P(opts)) {
55
+ server = get_str_from_hash(opts, NEWT_STOMP_KEY_SERVER);
56
+ userid = get_str_from_hash(opts, NEWT_STOMP_KEY_USERID);
57
+ passwd = get_str_from_hash(opts, NEWT_STOMP_KEY_PASSWD);
58
+ port = get_str_from_hash(opts, NEWT_STOMP_KEY_PORT);
59
+ }
60
+
61
+ //set default values
62
+ if(server == NULL) server = NEWT_STOMP_DEFAULT_SERVER;
63
+ if(userid == NULL) userid = NEWT_STOMP_DEFAULT_USERID;
64
+ if(passwd == NULL) passwd = NEWT_STOMP_DEFAULT_PASSWD;
65
+ if(port == NULL) port = NEWT_STOMP_DEFAULT_PORT;
66
+
67
+ if(cnewt_stomp_initialize(session, server, port, userid, passwd) != RET_SUCCESS) {
68
+ printf("[warning] failed to connect server\n");
69
+ }
70
+
71
+ return self;
72
+ }
73
+
74
+ static VALUE newt_stomp_alloc(VALUE klass) {
75
+ stomp_session_t *session;
76
+ pthread_t *thread_id;
77
+ VALUE ret = Qnil;
78
+
79
+ thread_id = (pthread_t *)malloc(sizeof(pthread_t));
80
+ assert(thread_id != NULL);
81
+
82
+ session = stomp_session_new(thread_id);
83
+ if(session != NULL) {
84
+ ret = rb_data_object_alloc(klass, session, 0, NULL);
85
+ }
86
+
87
+ return ret;
88
+ }
89
+
90
+ void Init_rbnewt(void) {
91
+ VALUE module, stomp_kls;
92
+
93
+ module = rb_define_module("Newt");
94
+ stomp_kls = rb_define_class_under(module, "STOMP", rb_cObject);
95
+
96
+ rb_define_alloc_func(stomp_kls, newt_stomp_alloc);
97
+ rb_define_method(stomp_kls, "initialize", newt_stomp_initialize, -1);
98
+ rb_define_method(stomp_kls, "close", newt_stomp_close, 0);
99
+ }
data/src/stomp.c ADDED
@@ -0,0 +1,49 @@
1
+ #include <stomp/stomp.h>
2
+ #include <newt/common.h>
3
+ #include <newt/stomp.h>
4
+ #include <pthread.h>
5
+
6
+ static void *thread_stomp(void *data) {
7
+ stomp_session_t *session = (stomp_session_t *)data;
8
+
9
+ //here is main-loop
10
+ stomp_run(session);
11
+
12
+ stomp_session_free(session);
13
+ }
14
+
15
+ int cnewt_stomp_initialize(stomp_session_t *session, char *server, char *port, char *userid, char *passwd) {
16
+ const struct stomp_hdr connection_headers[] = {
17
+ {"login", userid},
18
+ {"passcode", passwd},
19
+ };
20
+ int ret = RET_ERROR;
21
+ pthread_t *thread_id = (pthread_t *)session->ctx;
22
+
23
+ if(thread_id != NULL) {
24
+ stomp_connect(session, server, port, 2, connection_headers);
25
+
26
+ pthread_create(thread_id, NULL, thread_stomp, session);
27
+
28
+ ret = RET_SUCCESS;
29
+ }
30
+
31
+ return ret;
32
+ }
33
+
34
+ int cnewt_stomp_close(stomp_session_t *session) {
35
+ pthread_t *thread_id = (pthread_t *)session->ctx;
36
+ const struct stomp_hdr disconnect_header[] = {{0}};
37
+ int ret = RET_ERROR;
38
+
39
+ if(thread_id != NULL) {
40
+ // set flag to escape stomp mainloop
41
+ session->run = 0;
42
+
43
+ pthread_join(*thread_id, NULL);
44
+
45
+ ret = RET_SUCCESS;
46
+ }
47
+
48
+ return ret;
49
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbnewt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hiroyasu OHYAMA
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-30 00:00:00.000000000 Z
11
+ date: 2016-06-01 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: This aims to to be the fastest Ruby client for NewtMQ which is an implementation
14
14
  of STOMP server.
@@ -20,6 +20,10 @@ extensions:
20
20
  extra_rdoc_files: []
21
21
  files:
22
22
  - extconf.rb
23
+ - include/newt/common.h
24
+ - include/newt/stomp.h
25
+ - src/rbnewt.c
26
+ - src/stomp.c
23
27
  homepage: https://github.com/userlocalhost2000/rbnewt
24
28
  licenses:
25
29
  - MIT