WireAPI 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.
data/amq_session.c ADDED
@@ -0,0 +1,954 @@
1
+ /**********************************************
2
+ * Document-class: AMQ_Session
3
+ *
4
+ *
5
+ **********************************************/
6
+
7
+
8
+
9
+ #include <ruby.h>
10
+ #include "amq_client_session.h"
11
+ #include "amq_types.h"
12
+ #include "amq_field_list.h"
13
+
14
+ VALUE amqp_int64;
15
+ VALUE amqp_session;
16
+
17
+
18
+
19
+ static VALUE amq_server_error_reply_code(VALUE self) {
20
+ return rb_iv_get(self,"reply_code");
21
+ }
22
+
23
+
24
+ /* when reply code is not 0 throw a server error */
25
+ int check_reply_code(VALUE self) {
26
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
27
+ int reply_code=session_obj->session->reply_code;
28
+ if (reply_code) {
29
+ VALUE reply_text=rb_str_new2(session_obj->session->reply_text);
30
+ VALUE _reply_code= INT2NUM(reply_code);
31
+ VALUE argv[1];
32
+ argv[0]=reply_text;
33
+ VALUE exception=rb_class_new_instance(1,argv, rb_amq_server_error);
34
+ rb_iv_set(exception, "reply_code", _reply_code);
35
+ rb_exc_raise(exception);
36
+ return -1;
37
+ }
38
+ return 0;
39
+ }
40
+
41
+ /*
42
+ * AMQ_Session#alive() -> boolean
43
+ *
44
+ * session is paused or active
45
+ */
46
+ static VALUE ses_active(VALUE self)
47
+ {
48
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
49
+ if (amq_client_session_get_active(session_obj->session))
50
+ return Qtrue;
51
+ else
52
+ return Qfalse;
53
+ }
54
+
55
+ /*
56
+ * AMQ_Session#alive() -> boolean
57
+ *
58
+ * FALSE when connection has had an error
59
+ */
60
+ static VALUE ses_alive(VALUE self)
61
+ {
62
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
63
+ if (amq_client_session_get_alive(session_obj->session))
64
+ return Qtrue;
65
+ else
66
+ return Qfalse;
67
+
68
+ }
69
+
70
+
71
+ /*
72
+ * AMQ_Session#error_text -> string
73
+ */
74
+ static VALUE ses_error_text(VALUE self)
75
+ {
76
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
77
+ return rb_str_new2(session_obj->session->error_text);
78
+ }
79
+
80
+ /*
81
+ * AMQ_Session#destroy() -> nil
82
+ *
83
+ * After calling this method the session object will become unusable since the
84
+ * internal structures will be released
85
+ */
86
+ static VALUE ses_client_session_destroy(VALUE self)
87
+ {
88
+ amq_session_cls *const session_obj=get_amq_session_cls(self,0);
89
+ if (session_obj && session_obj->session) {
90
+ amq_client_session_destroy (&(session_obj->session));
91
+ session_obj->session=0;
92
+ }
93
+ return Qnil;
94
+ }
95
+
96
+ /*
97
+ * AMQ_Session#exchange -> string
98
+ */
99
+ static VALUE ses_exchange(VALUE self)
100
+ {
101
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
102
+ return rb_str_new2(amq_client_session_get_exchange(session_obj->session));
103
+ }
104
+
105
+
106
+ /*
107
+ * AMQ_Session#message_count -> number
108
+ */
109
+ static VALUE ses_message_count(VALUE self)
110
+ {
111
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
112
+ return INT2FIX(amq_client_session_get_message_count(session_obj->session));
113
+ }
114
+
115
+
116
+ /*
117
+ * AMQ_Session#consumer_count -> number
118
+ */
119
+ static VALUE ses_consumer_count(VALUE self)
120
+ {
121
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
122
+ return INT2FIX(amq_client_session_get_consumer_count(session_obj->session));
123
+ }
124
+
125
+ /*
126
+ * AMQ_Session#queue -> string
127
+ */
128
+ static VALUE ses_queue(VALUE self)
129
+ {
130
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
131
+ return rb_str_new2(session_obj->session->queue);
132
+ }
133
+
134
+ /*
135
+ * AMQ_Session#reply_code -> number
136
+ */
137
+ static VALUE ses_reply_code(VALUE self)
138
+ {
139
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
140
+ return INT2FIX(session_obj->session->reply_code);
141
+ }
142
+
143
+ /*
144
+ * AMQ_Session#reply_text -> string
145
+ */
146
+ static VALUE ses_reply_text(VALUE self)
147
+ {
148
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
149
+ return rb_str_new2(session_obj->session->reply_text);
150
+ }
151
+
152
+ /*
153
+ * AMQ_Session#wait(timeout) -> number
154
+ *
155
+ * * timeout FixNum
156
+ */
157
+ static VALUE ses_client_session_wait(int argc,VALUE *argv,VALUE self)
158
+ {
159
+ VALUE timeout;
160
+ rb_scan_args(argc,argv,"01",&timeout);
161
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
162
+ if (timeout==Qnil) {
163
+ timeout=INT2NUM(0);
164
+ }
165
+ if( FIXNUM_P(timeout))
166
+ {
167
+ int result = amq_client_session_wait (session_obj->session,NUM2INT(timeout));
168
+ if (result) {
169
+ rb_raise(rb_amq_error,session_obj->session->error_text);
170
+ }
171
+ }
172
+ else
173
+ {
174
+ rb_raise(rb_eTypeError,"Timeout was not an Fixnum");
175
+ }
176
+ return self;
177
+ }
178
+
179
+ /*
180
+ * AMQ_Session#exchange_declare(exchangeName,type,passive,durable,autodelete,internal) -> self
181
+ *
182
+ * * exchangeName : String
183
+ * * type : String from "fanout", "direct", "topic", and "header"
184
+ * * passive : boolean true will create
185
+ * * durable : boolean
186
+ * * autodelete: boolean
187
+ * * internal : boolean
188
+ */
189
+
190
+ static VALUE ses_client_session_exchange_declare(int argc,VALUE *argv,VALUE self) {
191
+ VALUE exchange;
192
+ VALUE type;
193
+ VALUE passive;
194
+ VALUE durable;
195
+ VALUE autodelete;
196
+ VALUE internal;
197
+ VALUE argument_table_opt;
198
+ rb_scan_args(argc,argv,"61",&exchange,&type,&passive,&durable,&autodelete,&internal,&argument_table_opt);
199
+
200
+ Check_Type(exchange,T_STRING);
201
+ Check_Type(type,T_STRING);
202
+ char *_exchange = StringValuePtr(exchange);
203
+ char *_type = StringValuePtr(type);
204
+ int _passive=VALUE2bool(passive,"arg: passive not boolean");
205
+ int _durable=VALUE2bool(durable,"arg: durable not boolean");
206
+ int _autodelete=VALUE2bool(autodelete,"arg: autodelete not boolean");
207
+ int _internal=VALUE2bool(internal,"arg: internal not boolean");
208
+ icl_longstr_t *_argument_table=get_optional_field_list(argument_table_opt);
209
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
210
+ int result=amq_client_session_exchange_declare(session_obj->session,0,
211
+ _exchange,
212
+ _type,
213
+ _passive,
214
+ _durable,
215
+ _autodelete,
216
+ _internal,
217
+ _argument_table);
218
+ if ( _argument_table) {
219
+ icl_longstr_destroy(& _argument_table);
220
+ _argument_table=0;
221
+ }
222
+ if (result) {
223
+ rb_raise(rb_amq_error,session_obj->session->error_text);
224
+ }
225
+ check_reply_code(self);
226
+ return self;
227
+ }
228
+
229
+
230
+
231
+ static VALUE ses_client_session_exchange_declare_nowait(int argc,VALUE *argv,VALUE self) {
232
+ VALUE exchange;
233
+ VALUE type;
234
+ VALUE passive;
235
+ VALUE durable;
236
+ VALUE autodelete;
237
+ VALUE internal;
238
+ VALUE argument_table_opt;
239
+ rb_scan_args(argc,argv,"61",&exchange,&type,&passive,&durable,&autodelete,&internal,&argument_table_opt);
240
+
241
+ Check_Type(exchange,T_STRING);
242
+
243
+ char *_exchange = StringValuePtr(exchange);
244
+ char *_type = StringValuePtr(type);
245
+ int _passive=VALUE2bool(passive,"arg: passive not boolean");
246
+ int _durable=VALUE2bool(durable,"arg: durable not boolean");
247
+ int _autodelete=VALUE2bool(autodelete,"arg: autodelete not boolean");
248
+ int _internal=VALUE2bool(internal,"arg: internal not boolean");
249
+ icl_longstr_t *_argument_table=get_optional_field_list(argument_table_opt);
250
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
251
+ int result=amq_client_session_exchange_declare_nowait(session_obj->session,0,
252
+ _exchange,
253
+ _type,
254
+ _passive,
255
+ _durable,
256
+ _autodelete,
257
+ _internal,
258
+ _argument_table);
259
+ if ( _argument_table) {
260
+ icl_longstr_destroy(& _argument_table);
261
+ _argument_table=0;
262
+ }
263
+ if (result) {
264
+ rb_raise(rb_amq_error,session_obj->session->error_text);
265
+ }
266
+ check_reply_code(self);
267
+ return self;
268
+ }
269
+
270
+
271
+ /*
272
+ * AMQ_Session#exchange_delete(exchangeName) -> self
273
+ *
274
+ * * exchangeName : String
275
+ */
276
+ static VALUE ses_client_session_exchange_delete(VALUE self,
277
+ VALUE exchange)
278
+ {
279
+ Check_Type(exchange,T_STRING);
280
+ char *_exchange = StringValuePtr(exchange);
281
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
282
+ int result=amq_client_session_exchange_delete(session_obj->session,0,_exchange,0);
283
+ if (result) {
284
+ rb_raise(rb_amq_error,session_obj->session->error_text);
285
+ }
286
+ check_reply_code(self);
287
+ return self;
288
+ }
289
+
290
+ /*
291
+ * AMQ_Session#exchange_delete_nowait(exchangeName) -> self
292
+ *
293
+ * * exchangeName : String
294
+ */
295
+ static VALUE ses_client_session_exchange_delete_nowait(VALUE self,
296
+ VALUE exchange)
297
+ {
298
+ Check_Type(exchange,T_STRING);
299
+ char *_exchange = StringValuePtr(exchange);
300
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
301
+ int result=amq_client_session_exchange_delete_nowait(session_obj->session,0,_exchange,0);
302
+ if (result) {
303
+ rb_raise(rb_amq_error,session_obj->session->error_text);
304
+ }
305
+ check_reply_code(self);
306
+ return self;
307
+ }
308
+
309
+
310
+
311
+
312
+ /*
313
+ * AMQ_Session#exchange_declare(queueName,passive,durable,exclusive,autodelete) -> self
314
+ *
315
+ * * queueName : String
316
+ * * passive : boolean true will create
317
+ * * durable : boolean
318
+ * * exclusive : boolean
319
+ * * autodelete: boolean
320
+ */
321
+ static VALUE ses_client_session_queue_declare(int argc,VALUE *argv,VALUE self)
322
+ {
323
+ VALUE queuename;
324
+ VALUE passive;
325
+ VALUE durable;
326
+ VALUE exclusive;
327
+ VALUE autodelete;
328
+ VALUE argument_table_opt;
329
+
330
+ rb_scan_args(argc,argv,"51",&queuename, &passive, &durable, &exclusive,&autodelete,&argument_table_opt);
331
+
332
+ char *_queuename = 0;
333
+ if (queuename!=Qnil)
334
+ _queuename=StringValuePtr(queuename);
335
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
336
+
337
+ int _passive=VALUE2bool(passive,"arg: passive not boolean");
338
+ int _durable=VALUE2bool(durable,"arg: durable not boolean");
339
+ int _exclusive=VALUE2bool(exclusive,"arg: exclusive not boolean");
340
+ int _autodelete=VALUE2bool(autodelete,"arg: autodelete not boolean");
341
+ icl_longstr_t *_argument_table=get_optional_field_list(argument_table_opt);
342
+ int result=amq_client_session_queue_declare(session_obj->session,0,
343
+ _queuename,
344
+ _passive,
345
+ _durable,
346
+ _exclusive,
347
+ _autodelete,
348
+ _argument_table);
349
+ if ( _argument_table) {
350
+ icl_longstr_destroy(& _argument_table);
351
+ _argument_table=0;
352
+ }
353
+ if (result) {
354
+ rb_raise(rb_amq_error,session_obj->session->error_text);
355
+ }
356
+ check_reply_code(self);
357
+ return self;
358
+ }
359
+
360
+
361
+ static VALUE ses_client_session_queue_declare_nowait(int argc,VALUE *argv,VALUE self)
362
+ {
363
+ VALUE queuename;
364
+ VALUE passive;
365
+ VALUE durable;
366
+ VALUE exclusive;
367
+ VALUE autodelete;
368
+ VALUE argument_table_opt;
369
+
370
+ rb_scan_args(argc,argv,"51",&queuename, &passive, &durable, &exclusive,&autodelete,&argument_table_opt);
371
+
372
+ char *_queuename = 0;
373
+ if (queuename!=Qnil)
374
+ _queuename=StringValuePtr(queuename);
375
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
376
+
377
+ int _passive=VALUE2bool(passive,"arg: passive not boolean");
378
+ int _durable=VALUE2bool(durable,"arg: durable not boolean");
379
+ int _exclusive=VALUE2bool(exclusive,"arg: exclusive not boolean");
380
+ int _autodelete=VALUE2bool(autodelete,"arg: autodelete not boolean");
381
+ icl_longstr_t *_argument_table=get_optional_field_list(argument_table_opt);
382
+ int result=amq_client_session_queue_declare_nowait(session_obj->session,0,
383
+ _queuename,_passive,
384
+ _durable,
385
+ _exclusive,
386
+ _autodelete,
387
+ _argument_table);
388
+ if ( _argument_table) {
389
+ icl_longstr_destroy(& _argument_table);
390
+ _argument_table=0;
391
+ }
392
+ if (result) {
393
+ rb_raise(rb_amq_error,session_obj->session->error_text);
394
+ }
395
+ check_reply_code(self);
396
+ return self;
397
+ }
398
+
399
+
400
+ /*
401
+ * AMQ_Session#queue_delete(queuename) -> self
402
+ * * queuename : string
403
+ */
404
+ static VALUE ses_client_session_queue_delete(VALUE self,
405
+ VALUE queuename)
406
+ {
407
+ char *_queuename = 0;
408
+ if (queuename!=Qnil)
409
+ _queuename=StringValuePtr(queuename);
410
+
411
+
412
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
413
+ int result=amq_client_session_queue_delete(session_obj->session,0,_queuename,0,0);
414
+ if (result) {
415
+ rb_raise(rb_amq_error,session_obj->session->error_text);
416
+ }
417
+ check_reply_code(self);
418
+ return self;
419
+ }
420
+
421
+ /*
422
+ * AMQ_Session#queue_delete_nowait(queuename) -> self
423
+ * * queuename : string
424
+ */
425
+ static VALUE ses_client_session_queue_delete_nowait(VALUE self,
426
+ VALUE queuename)
427
+ {
428
+ char *_queuename = 0;
429
+ if (queuename!=Qnil)
430
+ _queuename=StringValuePtr(queuename);
431
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
432
+ int result=amq_client_session_queue_delete_nowait(session_obj->session,0,_queuename,0,0);
433
+ if (result) {
434
+ rb_raise(rb_amq_error,session_obj->session->error_text);
435
+ }
436
+ check_reply_code(self);
437
+ return self;
438
+ }
439
+
440
+
441
+
442
+
443
+
444
+ static VALUE ses_client_session_queue_bind(int argc, VALUE *argv,VALUE self) {
445
+ VALUE queuename;
446
+ VALUE exchange;
447
+ VALUE routing_key;
448
+ VALUE argument_table_opt;
449
+ rb_scan_args(argc,argv,"31",&queuename,&exchange,&routing_key,&argument_table_opt);
450
+
451
+ Check_Type(exchange,T_STRING);
452
+ char *_queuename = 0;
453
+ if (queuename!=Qnil)
454
+ _queuename=StringValuePtr(queuename);
455
+ char *_exchange =StringValuePtr(exchange);
456
+ char *_routing_key = StringValuePtr(routing_key);
457
+ icl_longstr_t *_argument_table=get_optional_field_list(argument_table_opt);
458
+
459
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
460
+ int result=amq_client_session_queue_bind(session_obj->session,
461
+ 0,
462
+ _queuename,
463
+ _exchange,
464
+ _routing_key,
465
+ _argument_table);
466
+ if ( _argument_table) {
467
+ icl_longstr_destroy(& _argument_table);
468
+ _argument_table=0;
469
+ }
470
+
471
+ if (result) {
472
+ rb_raise(rb_amq_error,session_obj->session->error_text);
473
+ }
474
+ check_reply_code(self);
475
+ return self;
476
+ }
477
+
478
+
479
+
480
+
481
+ static VALUE ses_client_session_queue_bind_nowait(int argc, VALUE *argv,VALUE self) {
482
+ VALUE queuename;
483
+ VALUE exchange;
484
+ VALUE routing_key;
485
+ VALUE argument_table_opt;
486
+ rb_scan_args(argc,argv,"31",&queuename,&exchange,&routing_key,&argument_table_opt);
487
+ Check_Type(exchange,T_STRING);
488
+ char *_queuename = 0;
489
+ if (queuename!=Qnil)
490
+ _queuename=StringValuePtr(queuename);
491
+ char *_exchange =StringValuePtr(exchange);
492
+ char *_routing_key = StringValuePtr(routing_key);
493
+ icl_longstr_t *_argument_table=get_optional_field_list(argument_table_opt);
494
+
495
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
496
+ int result=amq_client_session_queue_bind_nowait(session_obj->session,
497
+ 0,
498
+ _queuename,
499
+ _exchange,
500
+ _routing_key,
501
+ _argument_table);
502
+ if ( _argument_table) {
503
+ icl_longstr_destroy(& _argument_table);
504
+ _argument_table=0;
505
+ }
506
+
507
+ if (result) {
508
+ rb_raise(rb_amq_error,session_obj->session->error_text);
509
+ }
510
+ check_reply_code(self);
511
+ return self;
512
+ }
513
+
514
+
515
+
516
+ static VALUE ses_client_session_queue_unbind(int argc,VALUE *argv,VALUE self) {
517
+ VALUE queuename;
518
+ VALUE exchange;
519
+ VALUE routing_key;
520
+ VALUE argument_table_opt;
521
+ rb_scan_args(argc,argv,"31",&queuename,&exchange, &routing_key,&argument_table_opt);
522
+
523
+ char *_queuename = StringValuePtr(queuename);
524
+ char *_exchange = StringValuePtr(exchange);
525
+ char *_routing_key = StringValuePtr(routing_key);
526
+ icl_longstr_t *_argument_table=get_optional_field_list(argument_table_opt);
527
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
528
+ int result=amq_client_session_queue_unbind(session_obj->session,0,
529
+ _queuename,
530
+ _exchange,
531
+ _routing_key,
532
+ _argument_table);
533
+ if ( _argument_table) {
534
+ icl_longstr_destroy(& _argument_table);
535
+ _argument_table=0;
536
+ }
537
+ if (result) {
538
+ rb_raise(rb_amq_error,session_obj->session->error_text);
539
+ }
540
+ check_reply_code(self);
541
+ return self;
542
+ }
543
+
544
+
545
+
546
+ static VALUE ses_client_session_queue_unbind_nowait(int argc,VALUE *argv,VALUE self) {
547
+ VALUE queuename;
548
+ VALUE exchange;
549
+ VALUE routing_key;
550
+ VALUE argument_table_opt;
551
+ rb_scan_args(argc,argv,"31",&queuename,&exchange, &routing_key,&argument_table_opt);
552
+
553
+ char *_queuename = StringValuePtr(queuename);
554
+ char *_exchange = StringValuePtr(exchange);
555
+ char *_routing_key = StringValuePtr(routing_key);
556
+ icl_longstr_t *_argument_table=get_optional_field_list(argument_table_opt);
557
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
558
+ int result=amq_client_session_queue_unbind_nowait(session_obj->session,0,
559
+ _queuename,
560
+ _exchange,
561
+ _routing_key,
562
+ _argument_table);
563
+ if ( _argument_table) {
564
+ icl_longstr_destroy(& _argument_table);
565
+ _argument_table=0;
566
+ }
567
+ if (result) {
568
+ rb_raise(rb_amq_error,session_obj->session->error_text);
569
+ }
570
+ check_reply_code(self);
571
+ return self;
572
+ }
573
+
574
+
575
+ /*
576
+ * AMQ_Session#client_session_queue_purge(queuename) -> self
577
+ * * queuename : string
578
+ */
579
+ static VALUE ses_client_session_queue_purge(VALUE self,
580
+ VALUE queuename)
581
+ {
582
+ char *_queuename = 0;
583
+ if (queuename!=Qnil)
584
+ _queuename=StringValuePtr(queuename);
585
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
586
+ int result=amq_client_session_queue_purge(session_obj->session,0,_queuename);
587
+ if (result) {
588
+ rb_raise(rb_amq_error,session_obj->session->error_text);
589
+ }
590
+ check_reply_code(self);
591
+ return self;
592
+ }
593
+
594
+
595
+ /*
596
+ * AMQ_Session#client_session_queue_purge_nowait(queuename) -> self
597
+ * * queuename : string
598
+ */
599
+ static VALUE ses_client_session_queue_purge_nowait(VALUE self,
600
+ VALUE queuename)
601
+ {
602
+ char *_queuename = 0;
603
+ if (queuename!=Qnil)
604
+ _queuename=StringValuePtr(queuename);
605
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
606
+ int result=amq_client_session_queue_purge(session_obj->session,0,_queuename);
607
+ if (result) {
608
+ rb_raise(rb_amq_error,session_obj->session->error_text);
609
+ }
610
+ check_reply_code(self);
611
+ return self;
612
+ }
613
+
614
+
615
+
616
+ static VALUE ses_client_session_basic_consume(int argc,VALUE *argv,VALUE self) {
617
+ VALUE queuename;
618
+ VALUE consumer_tag;
619
+ VALUE no_local;
620
+ VALUE no_ack;
621
+ VALUE exclusive;
622
+ VALUE argument_table_opt;
623
+ rb_scan_args(argc,argv,"51",&queuename,&consumer_tag,&no_local,&no_ack,&exclusive,&argument_table_opt);
624
+
625
+ char *_queuename = StringValuePtr(queuename);
626
+ char *_consumer_tag = 0;
627
+ if (TYPE(consumer_tag)==T_STRING)
628
+ _consumer_tag=StringValuePtr(consumer_tag);
629
+ int _no_local=VALUE2bool(no_local,"arg: no_local not boolean");
630
+ int _no_ack=VALUE2bool(no_ack,"arg: no_ack not boolean");
631
+ int _exclusive=VALUE2bool(no_local,"arg: exclusive not boolean");
632
+ icl_longstr_t *_argument_table=get_optional_field_list(argument_table_opt);
633
+
634
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
635
+ int result = amq_client_session_basic_consume(session_obj->session,0,
636
+ _queuename,
637
+ _consumer_tag,
638
+ _no_local,
639
+ _no_ack,
640
+ _exclusive,
641
+ _argument_table);
642
+ if ( _argument_table) {
643
+ icl_longstr_destroy(& _argument_table);
644
+ _argument_table=0;
645
+ }
646
+ if (result) {
647
+ rb_raise(rb_amq_error,session_obj->session->error_text);
648
+ }
649
+ check_reply_code(self);
650
+ return self;
651
+ }
652
+
653
+
654
+
655
+ static VALUE ses_client_session_basic_consume_nowait(int argc,VALUE *argv,VALUE self) {
656
+ VALUE queuename;
657
+ VALUE consumer_tag;
658
+ VALUE no_local;
659
+ VALUE no_ack;
660
+ VALUE exclusive;
661
+ VALUE argument_table_opt;
662
+ rb_scan_args(argc,argv,"51",&queuename,&consumer_tag,&no_local,&no_ack,&exclusive,&argument_table_opt);
663
+
664
+ char *_queuename = StringValuePtr(queuename);
665
+ char *_consumer_tag = 0;
666
+ if (TYPE(consumer_tag)==T_STRING)
667
+ _consumer_tag=StringValuePtr(consumer_tag);
668
+ int _no_local=VALUE2bool(no_local,"arg: no_local not boolean");
669
+ int _no_ack=VALUE2bool(no_ack,"arg: no_ack not boolean");
670
+ int _exclusive=VALUE2bool(no_local,"arg: exclusive not boolean");
671
+ icl_longstr_t *_argument_table=get_optional_field_list(argument_table_opt);
672
+
673
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
674
+ int result = amq_client_session_basic_consume_nowait(session_obj->session,0,
675
+ _queuename,
676
+ _consumer_tag,
677
+ _no_local,
678
+ _no_ack,
679
+ _exclusive,
680
+ _argument_table);
681
+ if ( _argument_table) {
682
+ icl_longstr_destroy(& _argument_table);
683
+ _argument_table=0;
684
+ }
685
+ if (result) {
686
+ rb_raise(rb_amq_error,session_obj->session->error_text);
687
+ }
688
+ check_reply_code(self);
689
+ return self;
690
+ }
691
+
692
+
693
+
694
+
695
+
696
+ /* AMQ_Session#basic_public(content,exchange,routing_key,mandatory)
697
+ *
698
+ * * content : AMQP_Content
699
+ * * exchange : String
700
+ * * routing_key : string
701
+ * * mandatory : boolean
702
+ * * immediate : boolean
703
+ *
704
+ */
705
+ static VALUE ses_client_session_basic_publish(VALUE self,
706
+ VALUE content,
707
+ VALUE exchange,
708
+ VALUE routing_key,
709
+ VALUE mandatory,
710
+ VALUE immediate)
711
+ {
712
+ Check_Type(exchange,T_STRING);
713
+ Check_Type(routing_key,T_STRING);
714
+ char *_exchange = StringValuePtr(exchange);
715
+ char *_routing_key = StringValuePtr(routing_key);
716
+ int _mandatory=VALUE2bool(mandatory,"arg: mandatory not boolean");
717
+ int _immediate=VALUE2bool(immediate,"arg: immediate not a boolean");
718
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
719
+ amq_content_cls *const content_obj=get_amq_content_cls(content,1);
720
+
721
+ int result=amq_client_session_basic_publish(
722
+ session_obj->session,
723
+ content_obj->content, 0,
724
+ _exchange,_routing_key,
725
+ _mandatory, _immediate);
726
+ if (result) {
727
+ rb_raise(rb_amq_error,session_obj->session->error_text);
728
+ }
729
+ check_reply_code(self);
730
+ return self;
731
+ }
732
+
733
+
734
+
735
+ /* AMQ_Session#basic_get(queue_name,no_ack)-> self
736
+ *
737
+ * * queue_name : string
738
+ * * no_ack : boolean
739
+ */
740
+ static VALUE ses_client_session_basic_get(VALUE self,VALUE queue_name,VALUE no_ack)
741
+ {
742
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
743
+ Check_Type(queue_name,T_STRING);
744
+ char *_queuename=StringValuePtr(queue_name);
745
+ int _no_ack=VALUE2bool(no_ack,"no ack arguments needs to be a boolean");
746
+
747
+ int res=amq_client_session_basic_get(session_obj->session,0,_queuename,_no_ack);
748
+ if (res) {
749
+ rb_raise(rb_amq_error,session_obj->session->error_text);
750
+ }
751
+ check_reply_code(self);
752
+ return self;
753
+ }
754
+
755
+
756
+
757
+
758
+
759
+ /* AMQ_Session#basic_arrived -> AMQP_Content or nil
760
+ *
761
+ */
762
+ static VALUE ses_client_session_basic_arrived(VALUE self)
763
+ {
764
+ VALUE rb_content;
765
+ amq_content_basic_t *content = NULL;
766
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
767
+ content = amq_client_session_basic_arrived(session_obj->session);
768
+ check_reply_code(self);
769
+ if (content) {
770
+ rb_content = create_amq_content_cls(content);
771
+ return rb_content;
772
+ } else {
773
+ return Qnil;
774
+ }
775
+ }
776
+
777
+
778
+
779
+ /* AMQ_Session#basic_cancel(consumer_tag)
780
+ *
781
+ * consumer_tag : string
782
+ *
783
+ */
784
+ static VALUE ses_client_session_basic_cancel(VALUE self,
785
+ VALUE consumer_tag)
786
+ {
787
+ int result;
788
+ char *_consumer_tag = StringValuePtr(consumer_tag);
789
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
790
+ result = amq_client_session_basic_cancel(session_obj->session,_consumer_tag);
791
+ if (result) {
792
+ rb_raise(rb_amq_error,session_obj->session->error_text);
793
+ }
794
+ check_reply_code(self);
795
+ return self;
796
+ }
797
+
798
+
799
+ /* AMQ_Session#basic_cancel_nowait(consumer_tag)
800
+ *
801
+ * * consumer_tag : string
802
+ *
803
+ */
804
+ static VALUE ses_client_session_basic_cancel_nowait(VALUE self,
805
+ VALUE consumer_tag)
806
+ {
807
+ int result;
808
+ char *_consumer_tag = StringValuePtr(consumer_tag);
809
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
810
+ result = amq_client_session_basic_cancel_nowait(session_obj->session,_consumer_tag);
811
+ if (result) {
812
+ rb_raise(rb_amq_error,session_obj->session->error_text);
813
+ }
814
+ check_reply_code(self);
815
+ return self;
816
+ }
817
+
818
+
819
+ /*
820
+ * AMQ_Session#consumer_tag -> string
821
+ */
822
+ static VALUE ses_consumer_tag(VALUE self)
823
+ {
824
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
825
+ return rb_str_new2(amq_client_session_get_consumer_tag(session_obj->session));
826
+ }
827
+
828
+
829
+ /*
830
+ * AMQ_Session#routing_key -> string
831
+ */
832
+ static VALUE ses_routing_key(VALUE self)
833
+ {
834
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
835
+ return rb_str_new2(amq_client_session_get_routing_key(session_obj->session));
836
+ }
837
+
838
+
839
+
840
+
841
+ /*
842
+ * AMQ_Session#delivery_tag -> AMQP_int64
843
+ *
844
+ */
845
+
846
+ static VALUE ses_delivery_tag(VALUE self)
847
+ {
848
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
849
+ int64_t tag=amq_client_session_get_delivery_tag(session_obj->session);
850
+ return create_amq_int64_cls(tag);
851
+ }
852
+
853
+ /*
854
+ * AMQ_Session#basic_ack (delivery_tag,multiple)
855
+ *
856
+ * * delivery_tag : AMQP_int64
857
+ * * multiple : boolean
858
+ *
859
+ */
860
+ static VALUE ses_basic_ack(VALUE self,VALUE delivery,VALUE multiple)
861
+ {
862
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
863
+ int64_t tag=get_amq_int64_cls(delivery)->value;
864
+ int _multiple=VALUE2bool(multiple,"multiple is a boolean");
865
+ amq_client_session_basic_ack(session_obj->session,tag,_multiple);
866
+ check_reply_code(self);
867
+ return self;
868
+ }
869
+
870
+
871
+
872
+ /*
873
+ * AMQ_Session#basic_reject (delivery_tag,requeue)
874
+ *
875
+ * * delivery_tag : AMQP_int64
876
+ * * requeue : boolean
877
+ *
878
+ */
879
+ static VALUE ses_basic_reject(VALUE self,VALUE delivery,VALUE requeue)
880
+ {
881
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
882
+ int64_t tag=get_amq_int64_cls(delivery)->value;
883
+ int _requeue=VALUE2bool(requeue,"requeue is a boolean");
884
+ amq_client_session_basic_reject(session_obj->session,tag,_requeue);
885
+ check_reply_code(self);
886
+ return self;
887
+ }
888
+
889
+
890
+ /*
891
+ * AMQ_Session#redelivered -> bool
892
+ *
893
+ *
894
+ */
895
+ static VALUE ses_redelivered(VALUE self)
896
+ {
897
+ amq_session_cls *const session_obj=get_amq_session_cls(self,1);
898
+ if (amq_client_session_get_redelivered(session_obj->session))
899
+ return Qtrue;
900
+ else
901
+ return Qfalse;
902
+ }
903
+
904
+
905
+ void init_session() {
906
+ amqp_int64= rb_define_class_under(rb_wireapi,"AMQ_int64",rb_cObject);
907
+
908
+ rb_define_method(rb_amq_server_error,"reply_code" , amq_server_error_reply_code,0);
909
+
910
+ // Session
911
+ amqp_session = rb_define_class_under(rb_wireapi,"AMQ_Session",rb_cObject);
912
+
913
+
914
+
915
+ rb_define_method(amqp_session,"active" , ses_active,0);
916
+ rb_define_method(amqp_session,"alive" , ses_alive ,0);
917
+ rb_define_method(amqp_session,"basic_ack" , ses_basic_ack,2);
918
+ rb_define_method(amqp_session,"basic_arrived", ses_client_session_basic_arrived,0);
919
+ rb_define_method(amqp_session,"basic_cancel" , ses_client_session_basic_cancel,1);
920
+ rb_define_method(amqp_session,"basic_cancel_nowait" , ses_client_session_basic_cancel_nowait,1);
921
+ rb_define_method(amqp_session,"basic_consume", ses_client_session_basic_consume,-1);
922
+ rb_define_method(amqp_session,"basic_consume_nowait" , ses_client_session_basic_consume_nowait,-1);
923
+ rb_define_method(amqp_session,"basic_get" , ses_client_session_basic_get,2);
924
+ rb_define_method(amqp_session,"basic_publish", ses_client_session_basic_publish,5);
925
+ rb_define_method(amqp_session,"basic_reject" , ses_basic_reject,2);
926
+ rb_define_method(amqp_session,"consumer_count",ses_consumer_count,0);
927
+ rb_define_method(amqp_session,"consumer_tag" , ses_consumer_tag,0);
928
+ rb_define_method(amqp_session,"delivery_tag" , ses_delivery_tag,0);
929
+ rb_define_method(amqp_session,"destroy" , ses_client_session_destroy,0);
930
+ rb_define_method(amqp_session,"error_text" , ses_error_text,0);
931
+ rb_define_method(amqp_session,"exchange" , ses_exchange,0);
932
+ rb_define_method(amqp_session,"exchange_declare", ses_client_session_exchange_declare,-1);
933
+ rb_define_method(amqp_session,"exchange_declare_nowait", ses_client_session_exchange_declare_nowait,-1);
934
+ rb_define_method(amqp_session,"exchange_delete" , ses_client_session_exchange_delete,1);
935
+ rb_define_method(amqp_session,"exchange_delete_nowait" , ses_client_session_exchange_delete_nowait,1);
936
+ rb_define_method(amqp_session,"message_count", ses_message_count,0);
937
+ rb_define_method(amqp_session,"queue" , ses_queue,0);
938
+ rb_define_method(amqp_session,"queue_bind" , ses_client_session_queue_bind,-1);
939
+ rb_define_method(amqp_session,"queue_bind_nowait" , ses_client_session_queue_bind_nowait,-1);
940
+ rb_define_method(amqp_session,"queue_declare", ses_client_session_queue_declare,-1);
941
+ rb_define_method(amqp_session,"queue_declare_nowait" , ses_client_session_queue_declare_nowait,-1);
942
+ rb_define_method(amqp_session,"queue_delete" , ses_client_session_queue_delete,1);
943
+ rb_define_method(amqp_session,"queue_delete_nowait" , ses_client_session_queue_delete_nowait,1);
944
+ rb_define_method(amqp_session,"queue_purge" , ses_client_session_queue_purge,1);
945
+ rb_define_method(amqp_session,"queue_purge_nowait" , ses_client_session_queue_purge_nowait,1);
946
+ rb_define_method(amqp_session,"queue_unbind" , ses_client_session_queue_unbind,-1);
947
+ rb_define_method(amqp_session,"queue_unbind_nowait" , ses_client_session_queue_unbind_nowait,-1);
948
+ rb_define_method(amqp_session,"redelivered" , ses_redelivered,0);
949
+ rb_define_method(amqp_session,"reply_code" , ses_reply_code,0);
950
+ rb_define_method(amqp_session,"reply_text" , ses_reply_text,0);
951
+ rb_define_method(amqp_session,"routing_key" , ses_routing_key,0);
952
+ rb_define_method(amqp_session,"wait" , ses_client_session_wait,-1);
953
+
954
+ }