celluloid_pubsub 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.travis.yml +2 -2
  4. data/Rakefile +6 -3
  5. data/celluloid_pubsub.gemspec +1 -1
  6. data/lib/celluloid_pubsub/reactor.rb +11 -15
  7. data/lib/celluloid_pubsub/version.rb +1 -1
  8. data/lib/celluloid_pubsub/web_server.rb +3 -0
  9. data/spec/lib/celluloid_pubsub/client_pubsub_spec.rb +128 -0
  10. data/spec/lib/celluloid_pubsub/reactor_spec.rb +208 -0
  11. data/spec/lib/celluloid_pubsub/registry_spec.rb +4 -0
  12. data/spec/lib/celluloid_pubsub/web_server_spec.rb +43 -0
  13. data/spec/spec_helper.rb +8 -0
  14. metadata +12 -70
  15. data/bin/appraisal +0 -16
  16. data/bin/autospec +0 -16
  17. data/bin/bundler +0 -16
  18. data/bin/cdiff +0 -16
  19. data/bin/coderay +0 -16
  20. data/bin/colortab +0 -16
  21. data/bin/coveralls +0 -16
  22. data/bin/decolor +0 -16
  23. data/bin/erubis +0 -16
  24. data/bin/guard +0 -16
  25. data/bin/htmldiff +0 -16
  26. data/bin/inch +0 -16
  27. data/bin/ldiff +0 -16
  28. data/bin/listen +0 -16
  29. data/bin/nokogiri +0 -16
  30. data/bin/phare +0 -16
  31. data/bin/pry +0 -16
  32. data/bin/rackup +0 -16
  33. data/bin/rails +0 -16
  34. data/bin/rake +0 -16
  35. data/bin/restclient +0 -16
  36. data/bin/rspec +0 -16
  37. data/bin/rubocop +0 -16
  38. data/bin/ruby-parse +0 -16
  39. data/bin/ruby-rewrite +0 -16
  40. data/bin/sass +0 -16
  41. data/bin/sass-convert +0 -16
  42. data/bin/scss +0 -16
  43. data/bin/scss-lint +0 -16
  44. data/bin/sparkr +0 -16
  45. data/bin/term_display +0 -16
  46. data/bin/term_mandel +0 -16
  47. data/bin/thor +0 -16
  48. data/bin/yard +0 -16
  49. data/bin/yardoc +0 -16
  50. data/bin/yardstick +0 -16
  51. data/bin/yri +0 -16
  52. data/doc/CelluloidPubsub/Client/PubSubWorker.html +0 -3676
  53. data/doc/CelluloidPubsub/Client.html +0 -340
  54. data/doc/CelluloidPubsub/Reactor.html +0 -3502
  55. data/doc/CelluloidPubsub/Registry.html +0 -234
  56. data/doc/CelluloidPubsub/VERSION.html +0 -204
  57. data/doc/CelluloidPubsub/WebServer.html +0 -4275
  58. data/doc/CelluloidPubsub.html +0 -225
  59. data/doc/_index.html +0 -184
  60. data/doc/class_list.html +0 -58
  61. data/doc/css/common.css +0 -1
  62. data/doc/css/full_list.css +0 -57
  63. data/doc/css/style.css +0 -339
  64. data/doc/file.README.html +0 -150
  65. data/doc/file_list.html +0 -60
  66. data/doc/frames.html +0 -26
  67. data/doc/index.html +0 -150
  68. data/doc/js/app.js +0 -219
  69. data/doc/js/full_list.js +0 -181
  70. data/doc/js/jquery.js +0 -4
  71. data/doc/method_list.html +0 -357
  72. data/doc/top-level-namespace.html +0 -112
@@ -1,4275 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
- <head>
5
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
- <title>
7
- Class: CelluloidPubsub::WebServer
8
-
9
- &mdash; Documentation by YARD 0.8.7.6
10
-
11
- </title>
12
-
13
- <link rel="stylesheet" href="../css/style.css" type="text/css" charset="utf-8" />
14
-
15
- <link rel="stylesheet" href="../css/common.css" type="text/css" charset="utf-8" />
16
-
17
- <script type="text/javascript" charset="utf-8">
18
- hasFrames = window.top.frames.main ? true : false;
19
- relpath = '../';
20
- framesUrl = "../frames.html#!CelluloidPubsub/WebServer.html";
21
- </script>
22
-
23
-
24
- <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
25
-
26
- <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
27
-
28
-
29
- </head>
30
- <body>
31
- <div id="header">
32
- <div id="menu">
33
-
34
- <a href="../_index.html">Index (W)</a> &raquo;
35
- <span class='title'><span class='object_link'><a href="../CelluloidPubsub.html" title="CelluloidPubsub (module)">CelluloidPubsub</a></span></span>
36
- &raquo;
37
- <span class="title">WebServer</span>
38
-
39
-
40
- <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
41
- </div>
42
-
43
- <div id="search">
44
-
45
- <a class="full_list_link" id="class_list_link"
46
- href="../class_list.html">
47
- Class List
48
- </a>
49
-
50
- <a class="full_list_link" id="method_list_link"
51
- href="../method_list.html">
52
- Method List
53
- </a>
54
-
55
- <a class="full_list_link" id="file_list_link"
56
- href="../file_list.html">
57
- File List
58
- </a>
59
-
60
- </div>
61
- <div class="clear"></div>
62
- </div>
63
-
64
- <iframe id="search_frame"></iframe>
65
-
66
- <div id="content"><h1>Class: CelluloidPubsub::WebServer
67
-
68
-
69
-
70
- </h1>
71
-
72
- <dl class="box">
73
-
74
- <dt class="r1">Inherits:</dt>
75
- <dd class="r1">
76
- <span class="inheritName">Reel::Server::HTTP</span>
77
-
78
- <ul class="fullTree">
79
- <li>Object</li>
80
-
81
- <li class="next">Reel::Server::HTTP</li>
82
-
83
- <li class="next">CelluloidPubsub::WebServer</li>
84
-
85
- </ul>
86
- <a href="#" class="inheritanceTree">show all</a>
87
-
88
- </dd>
89
-
90
-
91
-
92
-
93
-
94
-
95
- <dt class="r2">Includes:</dt>
96
- <dd class="r2">Celluloid::Logger</dd>
97
-
98
-
99
-
100
-
101
-
102
- <dt class="r1 last">Defined in:</dt>
103
- <dd class="r1 last">lib/celluloid_pubsub/web_server.rb</dd>
104
-
105
- </dl>
106
- <div class="clear"></div>
107
-
108
- <h2>Overview</h2><div class="docstring">
109
- <div class="discussion">
110
-
111
- <p>webserver to which socket connects should connect to . the server will
112
- dispatch each request into a new Reactor which will handle the action based
113
- on the message</p>
114
-
115
-
116
- </div>
117
- </div>
118
- <div class="tags">
119
-
120
-
121
- </div>
122
- <h2>Constant Summary</h2>
123
-
124
- <dl class="constants">
125
-
126
- <dt id="HOST-constant" class="">HOST =
127
- <div class="docstring">
128
- <div class="discussion">
129
-
130
- <p>The hostname on which the webserver runs on by default</p>
131
-
132
-
133
- </div>
134
- </div>
135
- <div class="tags">
136
-
137
-
138
- </div>
139
- </dt>
140
- <dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0.0.0.0</span><span class='tstring_end'>&#39;</span></span></pre></dd>
141
-
142
- <dt id="PORT-constant" class="">PORT =
143
- <div class="docstring">
144
- <div class="discussion">
145
-
146
- <p>The port on which the webserver runs on by default</p>
147
-
148
-
149
- </div>
150
- </div>
151
- <div class="tags">
152
-
153
-
154
- </div>
155
- </dt>
156
- <dd><pre class="code"><span class='int'>1234</span></pre></dd>
157
-
158
- <dt id="PATH-constant" class="">PATH =
159
- <div class="docstring">
160
- <div class="discussion">
161
-
162
- <p>The request path that the webserver accepts by default</p>
163
-
164
-
165
- </div>
166
- </div>
167
- <div class="tags">
168
-
169
-
170
- </div>
171
- </dt>
172
- <dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/ws</span><span class='tstring_end'>&#39;</span></span></pre></dd>
173
-
174
- </dl>
175
-
176
-
177
-
178
-
179
-
180
- <h2>Instance Attribute Summary <small>(<a href="#" class="summary_toggle">collapse</a>)</small></h2>
181
- <ul class="summary">
182
-
183
- <li class="public ">
184
- <span class="summary_signature">
185
-
186
- <a href="#backlog-instance_method" title="#backlog (instance method)">- (Integer) <strong>backlog</strong> </a>
187
-
188
-
189
-
190
- </span>
191
-
192
-
193
-
194
-
195
-
196
-
197
-
198
-
199
-
200
-
201
-
202
-
203
- <span class="summary_desc"><div class='inline'>
204
- <p>Defaults to 1024.</p>
205
- </div></span>
206
-
207
- </li>
208
-
209
-
210
- <li class="public ">
211
- <span class="summary_signature">
212
-
213
- <a href="#hostname-instance_method" title="#hostname (instance method)">- (String) <strong>hostname</strong> </a>
214
-
215
-
216
-
217
- </span>
218
-
219
-
220
-
221
-
222
-
223
-
224
-
225
-
226
-
227
-
228
-
229
-
230
- <span class="summary_desc"><div class='inline'>
231
- <p>The hostname on which the webserver runs on.</p>
232
- </div></span>
233
-
234
- </li>
235
-
236
-
237
- <li class="public ">
238
- <span class="summary_signature">
239
-
240
- <a href="#options-instance_method" title="#options (instance method)">- (Hash) <strong>options</strong> </a>
241
-
242
-
243
-
244
- </span>
245
-
246
-
247
-
248
-
249
-
250
-
251
-
252
-
253
-
254
-
255
-
256
-
257
- <span class="summary_desc"><div class='inline'>
258
- <p>Options used to configure the webserver.</p>
259
- </div></span>
260
-
261
- </li>
262
-
263
-
264
- <li class="public ">
265
- <span class="summary_signature">
266
-
267
- <a href="#path-instance_method" title="#path (instance method)">- (String) <strong>path</strong> </a>
268
-
269
-
270
-
271
- </span>
272
-
273
-
274
-
275
-
276
-
277
-
278
-
279
-
280
-
281
-
282
-
283
-
284
- <span class="summary_desc"><div class='inline'>
285
- <p>The hostname on which the webserver runs on.</p>
286
- </div></span>
287
-
288
- </li>
289
-
290
-
291
- <li class="public ">
292
- <span class="summary_signature">
293
-
294
- <a href="#port-instance_method" title="#port (instance method)">- (String) <strong>port</strong> </a>
295
-
296
-
297
-
298
- </span>
299
-
300
-
301
-
302
-
303
-
304
-
305
-
306
-
307
-
308
-
309
-
310
-
311
- <span class="summary_desc"><div class='inline'>
312
- <p>The port on which the webserver runs on.</p>
313
- </div></span>
314
-
315
- </li>
316
-
317
-
318
- <li class="public ">
319
- <span class="summary_signature">
320
-
321
- <a href="#spy-instance_method" title="#spy (instance method)">- (Boolean) <strong>spy</strong> </a>
322
-
323
-
324
-
325
- </span>
326
-
327
-
328
-
329
-
330
-
331
-
332
-
333
-
334
-
335
-
336
-
337
-
338
- <span class="summary_desc"><div class='inline'>
339
- <p>Enable this only if you want to enable debugging for the webserver.</p>
340
- </div></span>
341
-
342
- </li>
343
-
344
-
345
- <li class="public ">
346
- <span class="summary_signature">
347
-
348
- <a href="#subscribers-instance_method" title="#subscribers (instance method)">- (Hash) <strong>subscribers</strong> </a>
349
-
350
-
351
-
352
- </span>
353
-
354
-
355
-
356
-
357
-
358
-
359
-
360
-
361
-
362
-
363
-
364
-
365
- <span class="summary_desc"><div class='inline'>
366
- <p>The hostname on which the webserver runs on.</p>
367
- </div></span>
368
-
369
- </li>
370
-
371
-
372
- </ul>
373
-
374
-
375
-
376
-
377
-
378
- <h2>
379
- Class Method Summary
380
- <small>(<a href="#" class="summary_toggle">collapse</a>)</small>
381
- </h2>
382
-
383
- <ul class="summary">
384
-
385
- <li class="public ">
386
- <span class="summary_signature">
387
-
388
- <a href="#debug_enabled%3F-class_method" title="debug_enabled? (class method)">+ (boolean) <strong>debug_enabled?</strong> </a>
389
-
390
-
391
-
392
- </span>
393
-
394
-
395
-
396
-
397
-
398
-
399
-
400
-
401
-
402
- <span class="summary_desc"><div class='inline'>
403
- <p>checks if debug is enabled.</p>
404
- </div></span>
405
-
406
- </li>
407
-
408
-
409
- </ul>
410
-
411
- <h2>
412
- Instance Method Summary
413
- <small>(<a href="#" class="summary_toggle">collapse</a>)</small>
414
- </h2>
415
-
416
- <ul class="summary">
417
-
418
- <li class="public ">
419
- <span class="summary_signature">
420
-
421
- <a href="#debug_enabled%3F-instance_method" title="#debug_enabled? (instance method)">- (boolean) <strong>debug_enabled?</strong> </a>
422
-
423
-
424
-
425
- </span>
426
-
427
-
428
-
429
-
430
-
431
-
432
-
433
-
434
-
435
- <span class="summary_desc"><div class='inline'>
436
- <p>checks if debug is enabled.</p>
437
- </div></span>
438
-
439
- </li>
440
-
441
-
442
- <li class="public ">
443
- <span class="summary_signature">
444
-
445
- <a href="#handle_dispatched_message-instance_method" title="#handle_dispatched_message (instance method)">- (void) <strong>handle_dispatched_message</strong>(reactor, data) </a>
446
-
447
-
448
-
449
- </span>
450
-
451
-
452
-
453
-
454
-
455
-
456
-
457
-
458
-
459
- <span class="summary_desc"><div class='inline'>
460
- <p>If the message can be parsed into a Hash it will respond to the
461
- reactor&#39;s websocket connection with the same message in JSON format
462
- otherwise will try send the message how it is and escaped into JSON format.</p>
463
- </div></span>
464
-
465
- </li>
466
-
467
-
468
- <li class="public ">
469
- <span class="summary_signature">
470
-
471
- <a href="#initialize-instance_method" title="#initialize (instance method)">- (void) <strong>initialize</strong>(options = {}) </a>
472
-
473
-
474
-
475
- </span>
476
-
477
-
478
- <span class="note title constructor">constructor</span>
479
-
480
-
481
-
482
-
483
-
484
-
485
-
486
-
487
- <span class="summary_desc"><div class='inline'>
488
- <p>receives a list of options that are used to configure the webserver.</p>
489
- </div></span>
490
-
491
- </li>
492
-
493
-
494
- <li class="public ">
495
- <span class="summary_signature">
496
-
497
- <a href="#on_connection-instance_method" title="#on_connection (instance method)">- (void) <strong>on_connection</strong>(connection) </a>
498
-
499
-
500
-
501
- </span>
502
-
503
-
504
-
505
-
506
-
507
-
508
-
509
-
510
-
511
- <span class="summary_desc"><div class='inline'>
512
- <p>callback that will execute when receiving new conections If the connections
513
- is a websocket will call method <span class='object_link'><a href="#route_websocket-instance_method" title="CelluloidPubsub::WebServer#route_websocket (method)">#route_websocket</a></span> and if the connection is
514
- HTTP will call method <span class='object_link'><a href="#route_request-instance_method" title="CelluloidPubsub::WebServer#route_request (method)">#route_request</a></span> For websocket connections , the
515
- connection is detached from the server and dispatched to another actor.</p>
516
- </div></span>
517
-
518
- </li>
519
-
520
-
521
- <li class="public ">
522
- <span class="summary_signature">
523
-
524
- <a href="#parse_options-instance_method" title="#parse_options (instance method)">- (void) <strong>parse_options</strong>(options) </a>
525
-
526
-
527
-
528
- </span>
529
-
530
-
531
-
532
-
533
-
534
-
535
-
536
-
537
-
538
- <span class="summary_desc"><div class='inline'>
539
- <p>receives a list of options that are used to configure the webserver.</p>
540
- </div></span>
541
-
542
- </li>
543
-
544
-
545
- <li class="public ">
546
- <span class="summary_signature">
547
-
548
- <a href="#publish_event-instance_method" title="#publish_event (instance method)">- (void) <strong>publish_event</strong>(current_topic, message) </a>
549
-
550
-
551
-
552
- </span>
553
-
554
-
555
-
556
-
557
-
558
-
559
-
560
-
561
-
562
- <span class="summary_desc"><div class='inline'>
563
- <p>checks if debug is enabled.</p>
564
- </div></span>
565
-
566
- </li>
567
-
568
-
569
- <li class="public ">
570
- <span class="summary_signature">
571
-
572
- <a href="#route_request-instance_method" title="#route_request (instance method)">- (void) <strong>route_request</strong>(connection, request) </a>
573
-
574
-
575
-
576
- </span>
577
-
578
-
579
-
580
-
581
-
582
-
583
-
584
-
585
-
586
- <span class="summary_desc"><div class='inline'>
587
- <p>HTTP connections are not accepted so this method will show 404 message “Not
588
- Found”.</p>
589
- </div></span>
590
-
591
- </li>
592
-
593
-
594
- <li class="public ">
595
- <span class="summary_signature">
596
-
597
- <a href="#route_websocket-instance_method" title="#route_websocket (instance method)">- (void) <strong>route_websocket</strong>(socket) </a>
598
-
599
-
600
-
601
- </span>
602
-
603
-
604
-
605
-
606
-
607
-
608
-
609
-
610
-
611
- <span class="summary_desc"><div class='inline'>
612
- <p>If the socket url matches with the one accepted by the server, it will
613
- dispatch the socket connection to a new reactor
614
- <span class='object_link'><a href="Reactor.html#work-instance_method" title="CelluloidPubsub::Reactor#work (method)">Reactor#work</a></span> The new actor is linked to the webserver.</p>
615
- </div></span>
616
-
617
- </li>
618
-
619
-
620
- </ul>
621
-
622
-
623
-
624
-
625
- <div id="constructor_details" class="method_details_list">
626
- <h2>Constructor Details</h2>
627
-
628
- <div class="method_details first">
629
- <h3 class="signature first" id="initialize-instance_method">
630
-
631
- - (<tt>void</tt>) <strong>initialize</strong>(options = {})
632
-
633
-
634
-
635
-
636
-
637
- </h3><div class="docstring">
638
- <div class="discussion">
639
-
640
- <p>receives a list of options that are used to configure the webserver</p>
641
-
642
-
643
- </div>
644
- </div>
645
- <div class="tags">
646
- <p class="tag_title">Parameters:</p>
647
- <ul class="param">
648
-
649
- <li>
650
-
651
- <span class='name'>options</span>
652
-
653
-
654
- <span class='type'>(<tt>Hash</tt>)</span>
655
-
656
-
657
- <em class="default">(defaults to: <tt>{}</tt>)</em>
658
-
659
-
660
- &mdash;
661
- <div class='inline'>
662
- <p>the options that can be used to connect to webser and send additional data</p>
663
- </div>
664
-
665
- </li>
666
-
667
- </ul>
668
-
669
-
670
-
671
-
672
- <p class="tag_title">Options Hash (<tt>options</tt>):</p>
673
- <ul class="option">
674
-
675
- <li>
676
- <span class="name">:hostname</span>
677
- <span class="type">(<tt>String</tt>)</span>
678
- <span class="default">
679
-
680
- </span>
681
-
682
- &mdash; <div class='inline'>
683
- <p>The hostname on which the webserver runs on</p>
684
- </div>
685
-
686
- </li>
687
-
688
- <li>
689
- <span class="name">:port</span>
690
- <span class="type">(<tt>Integer</tt>)</span>
691
- <span class="default">
692
-
693
- </span>
694
-
695
- &mdash; <div class='inline'>
696
- <p>The port on which the webserver runs on</p>
697
- </div>
698
-
699
- </li>
700
-
701
- <li>
702
- <span class="name">:path</span>
703
- <span class="type">(<tt>String</tt>)</span>
704
- <span class="default">
705
-
706
- </span>
707
-
708
- &mdash; <div class='inline'>
709
- <p>The request path that the webserver accepts</p>
710
- </div>
711
-
712
- </li>
713
-
714
- <li>
715
- <span class="name">:spy</span>
716
- <span class="type">(<tt>Boolean</tt>)</span>
717
- <span class="default">
718
-
719
- </span>
720
-
721
- &mdash; <div class='inline'>
722
- <p>Enable this only if you want to enable debugging for the webserver</p>
723
- </div>
724
-
725
- </li>
726
-
727
- </ul>
728
-
729
-
730
-
731
- </div><table class="source_code">
732
- <tr>
733
- <td>
734
- <pre class="lines">
735
-
736
-
737
- 54
738
- 55
739
- 56
740
- 57
741
- 58
742
- 59</pre>
743
- </td>
744
- <td>
745
- <pre class="code"><span class="info file"># File 'lib/celluloid_pubsub/web_server.rb', line 54</span>
746
-
747
- <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
748
- <span class='id identifier rubyid_parse_options'>parse_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
749
- <span class='ivar'>@subscribers</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
750
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>CelluloidPubsub::WebServer example starting on </span><span class='embexpr_beg'>#{</span><span class='ivar'>@hostname</span><span class='embexpr_end'>}</span><span class='tstring_content'>:</span><span class='embexpr_beg'>#{</span><span class='ivar'>@port</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
751
- <span class='kw'>super</span><span class='lparen'>(</span><span class='ivar'>@hostname</span><span class='comma'>,</span> <span class='ivar'>@port</span><span class='comma'>,</span> <span class='lbrace'>{</span> <span class='label'>spy:</span> <span class='ivar'>@spy</span><span class='comma'>,</span> <span class='label'>backlog:</span> <span class='ivar'>@backlog</span> <span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_method'>method</span><span class='lparen'>(</span><span class='symbol'>:on_connection</span><span class='rparen'>)</span><span class='rparen'>)</span>
752
- <span class='kw'>end</span></pre>
753
- </td>
754
- </tr>
755
- </table>
756
- </div>
757
-
758
- </div>
759
-
760
- <div id="instance_attr_details" class="attr_details">
761
- <h2>Instance Attribute Details</h2>
762
-
763
-
764
- <span id="backlog=-instance_method"></span>
765
- <div class="method_details first">
766
- <h3 class="signature first" id="backlog-instance_method">
767
-
768
- - (<tt>Integer</tt>) <strong>backlog</strong>
769
-
770
-
771
-
772
-
773
-
774
- </h3><div class="docstring">
775
- <div class="discussion">
776
-
777
- <p>Defaults to 1024</p>
778
-
779
-
780
- </div>
781
- </div>
782
- <div class="tags">
783
-
784
- <p class="tag_title">Returns:</p>
785
- <ul class="return">
786
-
787
- <li>
788
-
789
-
790
- <span class='type'>(<tt>Integer</tt>)</span>
791
-
792
-
793
-
794
- &mdash;
795
- <div class='inline'>
796
- <p>Determines how many connections can be used</p>
797
- </div>
798
-
799
- </li>
800
-
801
- </ul>
802
-
803
- </div><table class="source_code">
804
- <tr>
805
- <td>
806
- <pre class="lines">
807
-
808
-
809
- 31
810
- 32
811
- 33
812
- 34
813
- 35
814
- 36
815
- 37
816
- 38
817
- 39
818
- 40
819
- 41
820
- 42
821
- 43
822
- 44
823
- 45
824
- 46
825
- 47
826
- 48
827
- 49
828
- 50
829
- 51
830
- 52
831
- 53
832
- 54
833
- 55
834
- 56
835
- 57
836
- 58
837
- 59
838
- 60
839
- 61
840
- 62
841
- 63
842
- 64
843
- 65
844
- 66
845
- 67
846
- 68
847
- 69
848
- 70
849
- 71
850
- 72
851
- 73
852
- 74
853
- 75
854
- 76
855
- 77
856
- 78
857
- 79
858
- 80
859
- 81
860
- 82
861
- 83
862
- 84
863
- 85
864
- 86
865
- 87
866
- 88
867
- 89
868
- 90
869
- 91
870
- 92
871
- 93
872
- 94
873
- 95
874
- 96
875
- 97
876
- 98
877
- 99
878
- 100
879
- 101
880
- 102
881
- 103
882
- 104
883
- 105
884
- 106
885
- 107
886
- 108
887
- 109
888
- 110
889
- 111
890
- 112
891
- 113
892
- 114
893
- 115
894
- 116
895
- 117
896
- 118
897
- 119
898
- 120
899
- 121
900
- 122
901
- 123
902
- 124
903
- 125
904
- 126
905
- 127
906
- 128
907
- 129
908
- 130
909
- 131
910
- 132
911
- 133
912
- 134
913
- 135
914
- 136
915
- 137
916
- 138
917
- 139
918
- 140
919
- 141
920
- 142
921
- 143
922
- 144
923
- 145
924
- 146
925
- 147
926
- 148
927
- 149
928
- 150
929
- 151
930
- 152
931
- 153
932
- 154
933
- 155
934
- 156
935
- 157
936
- 158
937
- 159
938
- 160
939
- 161
940
- 162
941
- 163
942
- 164
943
- 165
944
- 166
945
- 167
946
- 168
947
- 169
948
- 170
949
- 171
950
- 172
951
- 173
952
- 174
953
- 175
954
- 176
955
- 177
956
- 178
957
- 179
958
- 180
959
- 181
960
- 182
961
- 183
962
- 184
963
- 185
964
- 186
965
- 187
966
- 188
967
- 189
968
- 190
969
- 191
970
- 192
971
- 193
972
- 194
973
- 195
974
- 196
975
- 197
976
- 198
977
- 199
978
- 200
979
- 201
980
- 202
981
- 203</pre>
982
- </td>
983
- <td>
984
- <pre class="code"><span class="info file"># File 'lib/celluloid_pubsub/web_server.rb', line 31</span>
985
-
986
- <span class='kw'>class</span> <span class='const'>WebServer</span> <span class='op'>&lt;</span> <span class='const'>Reel</span><span class='op'>::</span><span class='const'>Server</span><span class='op'>::</span><span class='const'>HTTP</span>
987
- <span class='id identifier rubyid_include'>include</span> <span class='const'>Celluloid</span><span class='op'>::</span><span class='const'>Logger</span>
988
-
989
- <span class='comment'># The hostname on which the webserver runs on by default
990
- </span> <span class='const'>HOST</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0.0.0.0</span><span class='tstring_end'>&#39;</span></span>
991
- <span class='comment'># The port on which the webserver runs on by default
992
- </span> <span class='const'>PORT</span> <span class='op'>=</span> <span class='int'>1234</span>
993
- <span class='comment'># The request path that the webserver accepts by default
994
- </span> <span class='const'>PATH</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/ws</span><span class='tstring_end'>&#39;</span></span>
995
-
996
- <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:options</span><span class='comma'>,</span> <span class='symbol'>:subscribers</span><span class='comma'>,</span> <span class='symbol'>:backlog</span><span class='comma'>,</span> <span class='symbol'>:hostname</span><span class='comma'>,</span> <span class='symbol'>:port</span><span class='comma'>,</span> <span class='symbol'>:path</span><span class='comma'>,</span> <span class='symbol'>:spy</span>
997
-
998
- <span class='comment'># receives a list of options that are used to configure the webserver
999
- </span> <span class='comment'>#
1000
- </span> <span class='comment'># @param [Hash] options the options that can be used to connect to webser and send additional data
1001
- </span> <span class='comment'># @option options [String]:hostname The hostname on which the webserver runs on
1002
- </span> <span class='comment'># @option options [Integer] :port The port on which the webserver runs on
1003
- </span> <span class='comment'># @option options [String] :path The request path that the webserver accepts
1004
- </span> <span class='comment'># @option options [Boolean] :spy Enable this only if you want to enable debugging for the webserver
1005
- </span> <span class='comment'>#
1006
- </span> <span class='comment'># @return [void]
1007
- </span> <span class='comment'>#
1008
- </span> <span class='comment'># @api public
1009
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
1010
- <span class='id identifier rubyid_parse_options'>parse_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
1011
- <span class='ivar'>@subscribers</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
1012
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>CelluloidPubsub::WebServer example starting on </span><span class='embexpr_beg'>#{</span><span class='ivar'>@hostname</span><span class='embexpr_end'>}</span><span class='tstring_content'>:</span><span class='embexpr_beg'>#{</span><span class='ivar'>@port</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1013
- <span class='kw'>super</span><span class='lparen'>(</span><span class='ivar'>@hostname</span><span class='comma'>,</span> <span class='ivar'>@port</span><span class='comma'>,</span> <span class='lbrace'>{</span> <span class='label'>spy:</span> <span class='ivar'>@spy</span><span class='comma'>,</span> <span class='label'>backlog:</span> <span class='ivar'>@backlog</span> <span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_method'>method</span><span class='lparen'>(</span><span class='symbol'>:on_connection</span><span class='rparen'>)</span><span class='rparen'>)</span>
1014
- <span class='kw'>end</span>
1015
-
1016
- <span class='comment'># receives a list of options that are used to configure the webserver
1017
- </span> <span class='comment'>#
1018
- </span> <span class='comment'># @param [Hash] options the options that can be used to connect to webser and send additional data
1019
- </span> <span class='comment'># @option options [String]:hostname The hostname on which the webserver runs on
1020
- </span> <span class='comment'># @option options [Integer] :port The port on which the webserver runs on
1021
- </span> <span class='comment'># @option options [String] :path The request path that the webserver accepts
1022
- </span> <span class='comment'># @option options [Boolean] :spy Enable this only if you want to enable debugging for the webserver
1023
- </span> <span class='comment'># @option options [Integer]:backlog How many connections the server accepts
1024
- </span> <span class='comment'>#
1025
- </span> <span class='comment'># @return [void]
1026
- </span> <span class='comment'>#
1027
- </span> <span class='comment'># @api public
1028
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_parse_options'>parse_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
1029
- <span class='id identifier rubyid_raise'>raise</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Options is not a hash </span><span class='tstring_end'>&#39;</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
1030
- <span class='ivar'>@options</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_stringify_keys'>stringify_keys</span>
1031
- <span class='ivar'>@backlog</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:backlog</span><span class='comma'>,</span> <span class='int'>1024</span><span class='rparen'>)</span>
1032
- <span class='ivar'>@hostname</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:hostname</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>HOST</span><span class='rparen'>)</span>
1033
- <span class='ivar'>@port</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:port</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>PORT</span><span class='rparen'>)</span>
1034
- <span class='ivar'>@path</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:path</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>PATH</span><span class='rparen'>)</span>
1035
- <span class='ivar'>@spy</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:spy</span><span class='comma'>,</span> <span class='kw'>false</span><span class='rparen'>)</span>
1036
- <span class='kw'>end</span>
1037
-
1038
- <span class='comment'># checks if debug is enabled
1039
- </span> <span class='comment'>#
1040
- </span> <span class='comment'># @return [boolean]
1041
- </span> <span class='comment'>#
1042
- </span> <span class='comment'># @api public
1043
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1044
- <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1045
- <span class='kw'>end</span>
1046
-
1047
- <span class='comment'># checks if debug is enabled
1048
- </span> <span class='comment'>#
1049
- </span> <span class='comment'># @return [boolean]
1050
- </span> <span class='comment'>#
1051
- </span> <span class='comment'># @api public
1052
- </span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1053
- <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&amp;&amp;</span> <span class='lparen'>(</span><span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>true</span><span class='tstring_end'>&#39;</span></span> <span class='op'>||</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='kw'>true</span><span class='rparen'>)</span>
1054
- <span class='kw'>end</span>
1055
-
1056
- <span class='comment'># checks if debug is enabled
1057
- </span> <span class='comment'>#
1058
- </span> <span class='comment'># @param [String] current_topic The Channel to which the reactor instance {CelluloidPubsub::Rector} will publish the message to
1059
- </span> <span class='comment'># @param [Object] message
1060
- </span> <span class='comment'>#
1061
- </span> <span class='comment'># @return [void]
1062
- </span> <span class='comment'>#
1063
- </span> <span class='comment'># @api public
1064
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_publish_event'>publish_event</span><span class='lparen'>(</span><span class='id identifier rubyid_current_topic'>current_topic</span><span class='comma'>,</span> <span class='id identifier rubyid_message'>message</span><span class='rparen'>)</span>
1065
- <span class='kw'>return</span> <span class='kw'>if</span> <span class='id identifier rubyid_current_topic'>current_topic</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span> <span class='op'>||</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span>
1066
- <span class='ivar'>@subscribers</span><span class='lbracket'>[</span><span class='id identifier rubyid_current_topic'>current_topic</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_hash'>hash</span><span class='op'>|</span>
1067
- <span class='id identifier rubyid_hash'>hash</span><span class='lbracket'>[</span><span class='symbol'>:reactor</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_message'>message</span>
1068
- <span class='kw'>end</span>
1069
- <span class='kw'>end</span>
1070
-
1071
- <span class='comment'># callback that will execute when receiving new conections
1072
- </span> <span class='comment'># If the connections is a websocket will call method {#route_websocket}
1073
- </span> <span class='comment'># and if the connection is HTTP will call method {#route_request}
1074
- </span> <span class='comment'># For websocket connections , the connection is detached from the server and dispatched to another actor
1075
- </span> <span class='comment'>#
1076
- </span> <span class='comment'># @see #route_websocket
1077
- </span> <span class='comment'># @see #route_request
1078
- </span> <span class='comment'>#
1079
- </span> <span class='comment'># @param [Reel::WebSocket] connection The connection that was made to the webserver
1080
- </span> <span class='comment'>#
1081
- </span> <span class='comment'># @return [void]
1082
- </span> <span class='comment'>#
1083
- </span> <span class='comment'># @api public
1084
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_on_connection'>on_connection</span><span class='lparen'>(</span><span class='id identifier rubyid_connection'>connection</span><span class='rparen'>)</span>
1085
- <span class='kw'>while</span> <span class='id identifier rubyid_request'>request</span> <span class='op'>=</span> <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_request'>request</span>
1086
- <span class='kw'>if</span> <span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_websocket?'>websocket?</span>
1087
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Received a WebSocket connection</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1088
-
1089
- <span class='comment'># We&#39;re going to hand off this connection to another actor (Writer/Reader)
1090
- </span> <span class='comment'># However, initially Reel::Connections are &quot;attached&quot; to the
1091
- </span> <span class='comment'># Reel::Server::HTTP actor, meaning that the server manages the connection
1092
- </span> <span class='comment'># lifecycle (e.g. error handling) for us.
1093
- </span> <span class='comment'>#
1094
- </span> <span class='comment'># If we want to hand this connection off to another actor, we first
1095
- </span> <span class='comment'># need to detach it from the Reel::Server (in this case, Reel::Server::HTTP)
1096
- </span> <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_detach'>detach</span>
1097
- <span class='id identifier rubyid_route_websocket'>route_websocket</span><span class='lparen'>(</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span><span class='rparen'>)</span>
1098
- <span class='kw'>return</span>
1099
- <span class='kw'>else</span>
1100
- <span class='id identifier rubyid_route_request'>route_request</span> <span class='id identifier rubyid_connection'>connection</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span>
1101
- <span class='kw'>end</span>
1102
- <span class='kw'>end</span>
1103
- <span class='kw'>end</span>
1104
-
1105
- <span class='comment'># HTTP connections are not accepted so this method will show 404 message &quot;Not Found&quot;
1106
- </span> <span class='comment'>#
1107
- </span> <span class='comment'># @param [Reel::WebSocket] connection The HTTP connection that was received
1108
- </span> <span class='comment'># @param [Reel::Request] request The request that was made to the webserver and contains the type , the url, and the parameters
1109
- </span> <span class='comment'>#
1110
- </span> <span class='comment'># @return [void]
1111
- </span> <span class='comment'>#
1112
- </span> <span class='comment'># @api public
1113
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_route_request'>route_request</span><span class='lparen'>(</span><span class='id identifier rubyid_connection'>connection</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span><span class='rparen'>)</span>
1114
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>404 Not Found: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_path'>path</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1115
- <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_respond'>respond</span> <span class='symbol'>:not_found</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Not found</span><span class='tstring_end'>&#39;</span></span>
1116
- <span class='kw'>end</span>
1117
-
1118
- <span class='comment'># If the socket url matches with the one accepted by the server, it will dispatch the socket connection to a new reactor {CelluloidPubsub::Reactor#work}
1119
- </span> <span class='comment'># The new actor is linked to the webserver
1120
- </span> <span class='comment'>#
1121
- </span> <span class='comment'># @see CelluloidPubsub::Reactor#work
1122
- </span> <span class='comment'>#
1123
- </span> <span class='comment'># @param [Reel::WebSocket] socket The web socket connection that was received
1124
- </span> <span class='comment'>#
1125
- </span> <span class='comment'># @return [void]
1126
- </span> <span class='comment'>#
1127
- </span> <span class='comment'># @api public
1128
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_route_websocket'>route_websocket</span><span class='lparen'>(</span><span class='id identifier rubyid_socket'>socket</span><span class='rparen'>)</span>
1129
- <span class='kw'>if</span> <span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_url'>url</span> <span class='op'>==</span> <span class='ivar'>@path</span>
1130
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Reactor handles new socket connection</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1131
- <span class='id identifier rubyid_reactor'>reactor</span> <span class='op'>=</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>Reactor</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
1132
- <span class='const'>Actor</span><span class='period'>.</span><span class='id identifier rubyid_current'>current</span><span class='period'>.</span><span class='id identifier rubyid_link'>link</span> <span class='id identifier rubyid_reactor'>reactor</span>
1133
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_async'>async</span><span class='period'>.</span><span class='id identifier rubyid_work'>work</span><span class='lparen'>(</span><span class='id identifier rubyid_socket'>socket</span><span class='comma'>,</span> <span class='const'>Actor</span><span class='period'>.</span><span class='id identifier rubyid_current'>current</span><span class='rparen'>)</span>
1134
- <span class='kw'>else</span>
1135
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Received invalid WebSocket request for: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_url'>url</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1136
- <span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_close'>close</span>
1137
- <span class='kw'>end</span>
1138
- <span class='kw'>end</span>
1139
-
1140
- <span class='comment'># If the message can be parsed into a Hash it will respond to the reactor&#39;s websocket connection with the same message in JSON format
1141
- </span> <span class='comment'># otherwise will try send the message how it is and escaped into JSON format
1142
- </span> <span class='comment'>#
1143
- </span> <span class='comment'># @param [CelluloidPubsub::Reactor] reactor The reactor that received an unhandled message
1144
- </span> <span class='comment'># @param [Object] data The message that the reactor could not handle
1145
- </span> <span class='comment'>#
1146
- </span> <span class='comment'># @return [void]
1147
- </span> <span class='comment'>#
1148
- </span> <span class='comment'># @api public
1149
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_handle_dispatched_message'>handle_dispatched_message</span><span class='lparen'>(</span><span class='id identifier rubyid_reactor'>reactor</span><span class='comma'>,</span> <span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
1150
- <span class='id identifier rubyid_debug'>debug</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Webserver trying to dispatch message </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1151
- <span class='id identifier rubyid_message'>message</span> <span class='op'>=</span> <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_parse_json_data'>parse_json_data</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
1152
- <span class='kw'>if</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
1153
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_to_json'>to_json</span>
1154
- <span class='kw'>else</span>
1155
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_to_json'>to_json</span>
1156
- <span class='kw'>end</span>
1157
- <span class='kw'>end</span>
1158
- <span class='kw'>end</span></pre>
1159
- </td>
1160
- </tr>
1161
- </table>
1162
- </div>
1163
-
1164
-
1165
- <span id="hostname=-instance_method"></span>
1166
- <div class="method_details ">
1167
- <h3 class="signature " id="hostname-instance_method">
1168
-
1169
- - (<tt>String</tt>) <strong>hostname</strong>
1170
-
1171
-
1172
-
1173
-
1174
-
1175
- </h3><div class="docstring">
1176
- <div class="discussion">
1177
-
1178
- <p>Returns The hostname on which the webserver runs on</p>
1179
-
1180
-
1181
- </div>
1182
- </div>
1183
- <div class="tags">
1184
-
1185
- <p class="tag_title">Returns:</p>
1186
- <ul class="return">
1187
-
1188
- <li>
1189
-
1190
-
1191
- <span class='type'>(<tt>String</tt>)</span>
1192
-
1193
-
1194
-
1195
- &mdash;
1196
- <div class='inline'>
1197
- <p>The hostname on which the webserver runs on</p>
1198
- </div>
1199
-
1200
- </li>
1201
-
1202
- </ul>
1203
-
1204
- </div><table class="source_code">
1205
- <tr>
1206
- <td>
1207
- <pre class="lines">
1208
-
1209
-
1210
- 31
1211
- 32
1212
- 33
1213
- 34
1214
- 35
1215
- 36
1216
- 37
1217
- 38
1218
- 39
1219
- 40
1220
- 41
1221
- 42
1222
- 43
1223
- 44
1224
- 45
1225
- 46
1226
- 47
1227
- 48
1228
- 49
1229
- 50
1230
- 51
1231
- 52
1232
- 53
1233
- 54
1234
- 55
1235
- 56
1236
- 57
1237
- 58
1238
- 59
1239
- 60
1240
- 61
1241
- 62
1242
- 63
1243
- 64
1244
- 65
1245
- 66
1246
- 67
1247
- 68
1248
- 69
1249
- 70
1250
- 71
1251
- 72
1252
- 73
1253
- 74
1254
- 75
1255
- 76
1256
- 77
1257
- 78
1258
- 79
1259
- 80
1260
- 81
1261
- 82
1262
- 83
1263
- 84
1264
- 85
1265
- 86
1266
- 87
1267
- 88
1268
- 89
1269
- 90
1270
- 91
1271
- 92
1272
- 93
1273
- 94
1274
- 95
1275
- 96
1276
- 97
1277
- 98
1278
- 99
1279
- 100
1280
- 101
1281
- 102
1282
- 103
1283
- 104
1284
- 105
1285
- 106
1286
- 107
1287
- 108
1288
- 109
1289
- 110
1290
- 111
1291
- 112
1292
- 113
1293
- 114
1294
- 115
1295
- 116
1296
- 117
1297
- 118
1298
- 119
1299
- 120
1300
- 121
1301
- 122
1302
- 123
1303
- 124
1304
- 125
1305
- 126
1306
- 127
1307
- 128
1308
- 129
1309
- 130
1310
- 131
1311
- 132
1312
- 133
1313
- 134
1314
- 135
1315
- 136
1316
- 137
1317
- 138
1318
- 139
1319
- 140
1320
- 141
1321
- 142
1322
- 143
1323
- 144
1324
- 145
1325
- 146
1326
- 147
1327
- 148
1328
- 149
1329
- 150
1330
- 151
1331
- 152
1332
- 153
1333
- 154
1334
- 155
1335
- 156
1336
- 157
1337
- 158
1338
- 159
1339
- 160
1340
- 161
1341
- 162
1342
- 163
1343
- 164
1344
- 165
1345
- 166
1346
- 167
1347
- 168
1348
- 169
1349
- 170
1350
- 171
1351
- 172
1352
- 173
1353
- 174
1354
- 175
1355
- 176
1356
- 177
1357
- 178
1358
- 179
1359
- 180
1360
- 181
1361
- 182
1362
- 183
1363
- 184
1364
- 185
1365
- 186
1366
- 187
1367
- 188
1368
- 189
1369
- 190
1370
- 191
1371
- 192
1372
- 193
1373
- 194
1374
- 195
1375
- 196
1376
- 197
1377
- 198
1378
- 199
1379
- 200
1380
- 201
1381
- 202
1382
- 203</pre>
1383
- </td>
1384
- <td>
1385
- <pre class="code"><span class="info file"># File 'lib/celluloid_pubsub/web_server.rb', line 31</span>
1386
-
1387
- <span class='kw'>class</span> <span class='const'>WebServer</span> <span class='op'>&lt;</span> <span class='const'>Reel</span><span class='op'>::</span><span class='const'>Server</span><span class='op'>::</span><span class='const'>HTTP</span>
1388
- <span class='id identifier rubyid_include'>include</span> <span class='const'>Celluloid</span><span class='op'>::</span><span class='const'>Logger</span>
1389
-
1390
- <span class='comment'># The hostname on which the webserver runs on by default
1391
- </span> <span class='const'>HOST</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0.0.0.0</span><span class='tstring_end'>&#39;</span></span>
1392
- <span class='comment'># The port on which the webserver runs on by default
1393
- </span> <span class='const'>PORT</span> <span class='op'>=</span> <span class='int'>1234</span>
1394
- <span class='comment'># The request path that the webserver accepts by default
1395
- </span> <span class='const'>PATH</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/ws</span><span class='tstring_end'>&#39;</span></span>
1396
-
1397
- <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:options</span><span class='comma'>,</span> <span class='symbol'>:subscribers</span><span class='comma'>,</span> <span class='symbol'>:backlog</span><span class='comma'>,</span> <span class='symbol'>:hostname</span><span class='comma'>,</span> <span class='symbol'>:port</span><span class='comma'>,</span> <span class='symbol'>:path</span><span class='comma'>,</span> <span class='symbol'>:spy</span>
1398
-
1399
- <span class='comment'># receives a list of options that are used to configure the webserver
1400
- </span> <span class='comment'>#
1401
- </span> <span class='comment'># @param [Hash] options the options that can be used to connect to webser and send additional data
1402
- </span> <span class='comment'># @option options [String]:hostname The hostname on which the webserver runs on
1403
- </span> <span class='comment'># @option options [Integer] :port The port on which the webserver runs on
1404
- </span> <span class='comment'># @option options [String] :path The request path that the webserver accepts
1405
- </span> <span class='comment'># @option options [Boolean] :spy Enable this only if you want to enable debugging for the webserver
1406
- </span> <span class='comment'>#
1407
- </span> <span class='comment'># @return [void]
1408
- </span> <span class='comment'>#
1409
- </span> <span class='comment'># @api public
1410
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
1411
- <span class='id identifier rubyid_parse_options'>parse_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
1412
- <span class='ivar'>@subscribers</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
1413
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>CelluloidPubsub::WebServer example starting on </span><span class='embexpr_beg'>#{</span><span class='ivar'>@hostname</span><span class='embexpr_end'>}</span><span class='tstring_content'>:</span><span class='embexpr_beg'>#{</span><span class='ivar'>@port</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1414
- <span class='kw'>super</span><span class='lparen'>(</span><span class='ivar'>@hostname</span><span class='comma'>,</span> <span class='ivar'>@port</span><span class='comma'>,</span> <span class='lbrace'>{</span> <span class='label'>spy:</span> <span class='ivar'>@spy</span><span class='comma'>,</span> <span class='label'>backlog:</span> <span class='ivar'>@backlog</span> <span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_method'>method</span><span class='lparen'>(</span><span class='symbol'>:on_connection</span><span class='rparen'>)</span><span class='rparen'>)</span>
1415
- <span class='kw'>end</span>
1416
-
1417
- <span class='comment'># receives a list of options that are used to configure the webserver
1418
- </span> <span class='comment'>#
1419
- </span> <span class='comment'># @param [Hash] options the options that can be used to connect to webser and send additional data
1420
- </span> <span class='comment'># @option options [String]:hostname The hostname on which the webserver runs on
1421
- </span> <span class='comment'># @option options [Integer] :port The port on which the webserver runs on
1422
- </span> <span class='comment'># @option options [String] :path The request path that the webserver accepts
1423
- </span> <span class='comment'># @option options [Boolean] :spy Enable this only if you want to enable debugging for the webserver
1424
- </span> <span class='comment'># @option options [Integer]:backlog How many connections the server accepts
1425
- </span> <span class='comment'>#
1426
- </span> <span class='comment'># @return [void]
1427
- </span> <span class='comment'>#
1428
- </span> <span class='comment'># @api public
1429
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_parse_options'>parse_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
1430
- <span class='id identifier rubyid_raise'>raise</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Options is not a hash </span><span class='tstring_end'>&#39;</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
1431
- <span class='ivar'>@options</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_stringify_keys'>stringify_keys</span>
1432
- <span class='ivar'>@backlog</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:backlog</span><span class='comma'>,</span> <span class='int'>1024</span><span class='rparen'>)</span>
1433
- <span class='ivar'>@hostname</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:hostname</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>HOST</span><span class='rparen'>)</span>
1434
- <span class='ivar'>@port</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:port</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>PORT</span><span class='rparen'>)</span>
1435
- <span class='ivar'>@path</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:path</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>PATH</span><span class='rparen'>)</span>
1436
- <span class='ivar'>@spy</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:spy</span><span class='comma'>,</span> <span class='kw'>false</span><span class='rparen'>)</span>
1437
- <span class='kw'>end</span>
1438
-
1439
- <span class='comment'># checks if debug is enabled
1440
- </span> <span class='comment'>#
1441
- </span> <span class='comment'># @return [boolean]
1442
- </span> <span class='comment'>#
1443
- </span> <span class='comment'># @api public
1444
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1445
- <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1446
- <span class='kw'>end</span>
1447
-
1448
- <span class='comment'># checks if debug is enabled
1449
- </span> <span class='comment'>#
1450
- </span> <span class='comment'># @return [boolean]
1451
- </span> <span class='comment'>#
1452
- </span> <span class='comment'># @api public
1453
- </span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1454
- <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&amp;&amp;</span> <span class='lparen'>(</span><span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>true</span><span class='tstring_end'>&#39;</span></span> <span class='op'>||</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='kw'>true</span><span class='rparen'>)</span>
1455
- <span class='kw'>end</span>
1456
-
1457
- <span class='comment'># checks if debug is enabled
1458
- </span> <span class='comment'>#
1459
- </span> <span class='comment'># @param [String] current_topic The Channel to which the reactor instance {CelluloidPubsub::Rector} will publish the message to
1460
- </span> <span class='comment'># @param [Object] message
1461
- </span> <span class='comment'>#
1462
- </span> <span class='comment'># @return [void]
1463
- </span> <span class='comment'>#
1464
- </span> <span class='comment'># @api public
1465
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_publish_event'>publish_event</span><span class='lparen'>(</span><span class='id identifier rubyid_current_topic'>current_topic</span><span class='comma'>,</span> <span class='id identifier rubyid_message'>message</span><span class='rparen'>)</span>
1466
- <span class='kw'>return</span> <span class='kw'>if</span> <span class='id identifier rubyid_current_topic'>current_topic</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span> <span class='op'>||</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span>
1467
- <span class='ivar'>@subscribers</span><span class='lbracket'>[</span><span class='id identifier rubyid_current_topic'>current_topic</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_hash'>hash</span><span class='op'>|</span>
1468
- <span class='id identifier rubyid_hash'>hash</span><span class='lbracket'>[</span><span class='symbol'>:reactor</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_message'>message</span>
1469
- <span class='kw'>end</span>
1470
- <span class='kw'>end</span>
1471
-
1472
- <span class='comment'># callback that will execute when receiving new conections
1473
- </span> <span class='comment'># If the connections is a websocket will call method {#route_websocket}
1474
- </span> <span class='comment'># and if the connection is HTTP will call method {#route_request}
1475
- </span> <span class='comment'># For websocket connections , the connection is detached from the server and dispatched to another actor
1476
- </span> <span class='comment'>#
1477
- </span> <span class='comment'># @see #route_websocket
1478
- </span> <span class='comment'># @see #route_request
1479
- </span> <span class='comment'>#
1480
- </span> <span class='comment'># @param [Reel::WebSocket] connection The connection that was made to the webserver
1481
- </span> <span class='comment'>#
1482
- </span> <span class='comment'># @return [void]
1483
- </span> <span class='comment'>#
1484
- </span> <span class='comment'># @api public
1485
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_on_connection'>on_connection</span><span class='lparen'>(</span><span class='id identifier rubyid_connection'>connection</span><span class='rparen'>)</span>
1486
- <span class='kw'>while</span> <span class='id identifier rubyid_request'>request</span> <span class='op'>=</span> <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_request'>request</span>
1487
- <span class='kw'>if</span> <span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_websocket?'>websocket?</span>
1488
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Received a WebSocket connection</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1489
-
1490
- <span class='comment'># We&#39;re going to hand off this connection to another actor (Writer/Reader)
1491
- </span> <span class='comment'># However, initially Reel::Connections are &quot;attached&quot; to the
1492
- </span> <span class='comment'># Reel::Server::HTTP actor, meaning that the server manages the connection
1493
- </span> <span class='comment'># lifecycle (e.g. error handling) for us.
1494
- </span> <span class='comment'>#
1495
- </span> <span class='comment'># If we want to hand this connection off to another actor, we first
1496
- </span> <span class='comment'># need to detach it from the Reel::Server (in this case, Reel::Server::HTTP)
1497
- </span> <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_detach'>detach</span>
1498
- <span class='id identifier rubyid_route_websocket'>route_websocket</span><span class='lparen'>(</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span><span class='rparen'>)</span>
1499
- <span class='kw'>return</span>
1500
- <span class='kw'>else</span>
1501
- <span class='id identifier rubyid_route_request'>route_request</span> <span class='id identifier rubyid_connection'>connection</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span>
1502
- <span class='kw'>end</span>
1503
- <span class='kw'>end</span>
1504
- <span class='kw'>end</span>
1505
-
1506
- <span class='comment'># HTTP connections are not accepted so this method will show 404 message &quot;Not Found&quot;
1507
- </span> <span class='comment'>#
1508
- </span> <span class='comment'># @param [Reel::WebSocket] connection The HTTP connection that was received
1509
- </span> <span class='comment'># @param [Reel::Request] request The request that was made to the webserver and contains the type , the url, and the parameters
1510
- </span> <span class='comment'>#
1511
- </span> <span class='comment'># @return [void]
1512
- </span> <span class='comment'>#
1513
- </span> <span class='comment'># @api public
1514
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_route_request'>route_request</span><span class='lparen'>(</span><span class='id identifier rubyid_connection'>connection</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span><span class='rparen'>)</span>
1515
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>404 Not Found: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_path'>path</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1516
- <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_respond'>respond</span> <span class='symbol'>:not_found</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Not found</span><span class='tstring_end'>&#39;</span></span>
1517
- <span class='kw'>end</span>
1518
-
1519
- <span class='comment'># If the socket url matches with the one accepted by the server, it will dispatch the socket connection to a new reactor {CelluloidPubsub::Reactor#work}
1520
- </span> <span class='comment'># The new actor is linked to the webserver
1521
- </span> <span class='comment'>#
1522
- </span> <span class='comment'># @see CelluloidPubsub::Reactor#work
1523
- </span> <span class='comment'>#
1524
- </span> <span class='comment'># @param [Reel::WebSocket] socket The web socket connection that was received
1525
- </span> <span class='comment'>#
1526
- </span> <span class='comment'># @return [void]
1527
- </span> <span class='comment'>#
1528
- </span> <span class='comment'># @api public
1529
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_route_websocket'>route_websocket</span><span class='lparen'>(</span><span class='id identifier rubyid_socket'>socket</span><span class='rparen'>)</span>
1530
- <span class='kw'>if</span> <span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_url'>url</span> <span class='op'>==</span> <span class='ivar'>@path</span>
1531
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Reactor handles new socket connection</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1532
- <span class='id identifier rubyid_reactor'>reactor</span> <span class='op'>=</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>Reactor</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
1533
- <span class='const'>Actor</span><span class='period'>.</span><span class='id identifier rubyid_current'>current</span><span class='period'>.</span><span class='id identifier rubyid_link'>link</span> <span class='id identifier rubyid_reactor'>reactor</span>
1534
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_async'>async</span><span class='period'>.</span><span class='id identifier rubyid_work'>work</span><span class='lparen'>(</span><span class='id identifier rubyid_socket'>socket</span><span class='comma'>,</span> <span class='const'>Actor</span><span class='period'>.</span><span class='id identifier rubyid_current'>current</span><span class='rparen'>)</span>
1535
- <span class='kw'>else</span>
1536
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Received invalid WebSocket request for: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_url'>url</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1537
- <span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_close'>close</span>
1538
- <span class='kw'>end</span>
1539
- <span class='kw'>end</span>
1540
-
1541
- <span class='comment'># If the message can be parsed into a Hash it will respond to the reactor&#39;s websocket connection with the same message in JSON format
1542
- </span> <span class='comment'># otherwise will try send the message how it is and escaped into JSON format
1543
- </span> <span class='comment'>#
1544
- </span> <span class='comment'># @param [CelluloidPubsub::Reactor] reactor The reactor that received an unhandled message
1545
- </span> <span class='comment'># @param [Object] data The message that the reactor could not handle
1546
- </span> <span class='comment'>#
1547
- </span> <span class='comment'># @return [void]
1548
- </span> <span class='comment'>#
1549
- </span> <span class='comment'># @api public
1550
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_handle_dispatched_message'>handle_dispatched_message</span><span class='lparen'>(</span><span class='id identifier rubyid_reactor'>reactor</span><span class='comma'>,</span> <span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
1551
- <span class='id identifier rubyid_debug'>debug</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Webserver trying to dispatch message </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1552
- <span class='id identifier rubyid_message'>message</span> <span class='op'>=</span> <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_parse_json_data'>parse_json_data</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
1553
- <span class='kw'>if</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
1554
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_to_json'>to_json</span>
1555
- <span class='kw'>else</span>
1556
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_to_json'>to_json</span>
1557
- <span class='kw'>end</span>
1558
- <span class='kw'>end</span>
1559
- <span class='kw'>end</span></pre>
1560
- </td>
1561
- </tr>
1562
- </table>
1563
- </div>
1564
-
1565
-
1566
- <span id="options=-instance_method"></span>
1567
- <div class="method_details ">
1568
- <h3 class="signature " id="options-instance_method">
1569
-
1570
- - (<tt>Hash</tt>) <strong>options</strong>
1571
-
1572
-
1573
-
1574
-
1575
-
1576
- </h3><div class="docstring">
1577
- <div class="discussion">
1578
-
1579
- <p>Returns options used to configure the webserver</p>
1580
-
1581
-
1582
- </div>
1583
- </div>
1584
- <div class="tags">
1585
-
1586
-
1587
-
1588
- <p class="tag_title">Returns:</p>
1589
- <ul class="return">
1590
-
1591
- <li>
1592
-
1593
-
1594
- <span class='type'>(<tt>Hash</tt>)</span>
1595
-
1596
-
1597
-
1598
- &mdash;
1599
- <div class='inline'>
1600
- <p>options used to configure the webserver</p>
1601
- </div>
1602
-
1603
- </li>
1604
-
1605
- </ul>
1606
-
1607
- </div><table class="source_code">
1608
- <tr>
1609
- <td>
1610
- <pre class="lines">
1611
-
1612
-
1613
- 31
1614
- 32
1615
- 33
1616
- 34
1617
- 35
1618
- 36
1619
- 37
1620
- 38
1621
- 39
1622
- 40
1623
- 41
1624
- 42
1625
- 43
1626
- 44
1627
- 45
1628
- 46
1629
- 47
1630
- 48
1631
- 49
1632
- 50
1633
- 51
1634
- 52
1635
- 53
1636
- 54
1637
- 55
1638
- 56
1639
- 57
1640
- 58
1641
- 59
1642
- 60
1643
- 61
1644
- 62
1645
- 63
1646
- 64
1647
- 65
1648
- 66
1649
- 67
1650
- 68
1651
- 69
1652
- 70
1653
- 71
1654
- 72
1655
- 73
1656
- 74
1657
- 75
1658
- 76
1659
- 77
1660
- 78
1661
- 79
1662
- 80
1663
- 81
1664
- 82
1665
- 83
1666
- 84
1667
- 85
1668
- 86
1669
- 87
1670
- 88
1671
- 89
1672
- 90
1673
- 91
1674
- 92
1675
- 93
1676
- 94
1677
- 95
1678
- 96
1679
- 97
1680
- 98
1681
- 99
1682
- 100
1683
- 101
1684
- 102
1685
- 103
1686
- 104
1687
- 105
1688
- 106
1689
- 107
1690
- 108
1691
- 109
1692
- 110
1693
- 111
1694
- 112
1695
- 113
1696
- 114
1697
- 115
1698
- 116
1699
- 117
1700
- 118
1701
- 119
1702
- 120
1703
- 121
1704
- 122
1705
- 123
1706
- 124
1707
- 125
1708
- 126
1709
- 127
1710
- 128
1711
- 129
1712
- 130
1713
- 131
1714
- 132
1715
- 133
1716
- 134
1717
- 135
1718
- 136
1719
- 137
1720
- 138
1721
- 139
1722
- 140
1723
- 141
1724
- 142
1725
- 143
1726
- 144
1727
- 145
1728
- 146
1729
- 147
1730
- 148
1731
- 149
1732
- 150
1733
- 151
1734
- 152
1735
- 153
1736
- 154
1737
- 155
1738
- 156
1739
- 157
1740
- 158
1741
- 159
1742
- 160
1743
- 161
1744
- 162
1745
- 163
1746
- 164
1747
- 165
1748
- 166
1749
- 167
1750
- 168
1751
- 169
1752
- 170
1753
- 171
1754
- 172
1755
- 173
1756
- 174
1757
- 175
1758
- 176
1759
- 177
1760
- 178
1761
- 179
1762
- 180
1763
- 181
1764
- 182
1765
- 183
1766
- 184
1767
- 185
1768
- 186
1769
- 187
1770
- 188
1771
- 189
1772
- 190
1773
- 191
1774
- 192
1775
- 193
1776
- 194
1777
- 195
1778
- 196
1779
- 197
1780
- 198
1781
- 199
1782
- 200
1783
- 201
1784
- 202
1785
- 203</pre>
1786
- </td>
1787
- <td>
1788
- <pre class="code"><span class="info file"># File 'lib/celluloid_pubsub/web_server.rb', line 31</span>
1789
-
1790
- <span class='kw'>class</span> <span class='const'>WebServer</span> <span class='op'>&lt;</span> <span class='const'>Reel</span><span class='op'>::</span><span class='const'>Server</span><span class='op'>::</span><span class='const'>HTTP</span>
1791
- <span class='id identifier rubyid_include'>include</span> <span class='const'>Celluloid</span><span class='op'>::</span><span class='const'>Logger</span>
1792
-
1793
- <span class='comment'># The hostname on which the webserver runs on by default
1794
- </span> <span class='const'>HOST</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0.0.0.0</span><span class='tstring_end'>&#39;</span></span>
1795
- <span class='comment'># The port on which the webserver runs on by default
1796
- </span> <span class='const'>PORT</span> <span class='op'>=</span> <span class='int'>1234</span>
1797
- <span class='comment'># The request path that the webserver accepts by default
1798
- </span> <span class='const'>PATH</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/ws</span><span class='tstring_end'>&#39;</span></span>
1799
-
1800
- <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:options</span><span class='comma'>,</span> <span class='symbol'>:subscribers</span><span class='comma'>,</span> <span class='symbol'>:backlog</span><span class='comma'>,</span> <span class='symbol'>:hostname</span><span class='comma'>,</span> <span class='symbol'>:port</span><span class='comma'>,</span> <span class='symbol'>:path</span><span class='comma'>,</span> <span class='symbol'>:spy</span>
1801
-
1802
- <span class='comment'># receives a list of options that are used to configure the webserver
1803
- </span> <span class='comment'>#
1804
- </span> <span class='comment'># @param [Hash] options the options that can be used to connect to webser and send additional data
1805
- </span> <span class='comment'># @option options [String]:hostname The hostname on which the webserver runs on
1806
- </span> <span class='comment'># @option options [Integer] :port The port on which the webserver runs on
1807
- </span> <span class='comment'># @option options [String] :path The request path that the webserver accepts
1808
- </span> <span class='comment'># @option options [Boolean] :spy Enable this only if you want to enable debugging for the webserver
1809
- </span> <span class='comment'>#
1810
- </span> <span class='comment'># @return [void]
1811
- </span> <span class='comment'>#
1812
- </span> <span class='comment'># @api public
1813
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
1814
- <span class='id identifier rubyid_parse_options'>parse_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
1815
- <span class='ivar'>@subscribers</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
1816
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>CelluloidPubsub::WebServer example starting on </span><span class='embexpr_beg'>#{</span><span class='ivar'>@hostname</span><span class='embexpr_end'>}</span><span class='tstring_content'>:</span><span class='embexpr_beg'>#{</span><span class='ivar'>@port</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1817
- <span class='kw'>super</span><span class='lparen'>(</span><span class='ivar'>@hostname</span><span class='comma'>,</span> <span class='ivar'>@port</span><span class='comma'>,</span> <span class='lbrace'>{</span> <span class='label'>spy:</span> <span class='ivar'>@spy</span><span class='comma'>,</span> <span class='label'>backlog:</span> <span class='ivar'>@backlog</span> <span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_method'>method</span><span class='lparen'>(</span><span class='symbol'>:on_connection</span><span class='rparen'>)</span><span class='rparen'>)</span>
1818
- <span class='kw'>end</span>
1819
-
1820
- <span class='comment'># receives a list of options that are used to configure the webserver
1821
- </span> <span class='comment'>#
1822
- </span> <span class='comment'># @param [Hash] options the options that can be used to connect to webser and send additional data
1823
- </span> <span class='comment'># @option options [String]:hostname The hostname on which the webserver runs on
1824
- </span> <span class='comment'># @option options [Integer] :port The port on which the webserver runs on
1825
- </span> <span class='comment'># @option options [String] :path The request path that the webserver accepts
1826
- </span> <span class='comment'># @option options [Boolean] :spy Enable this only if you want to enable debugging for the webserver
1827
- </span> <span class='comment'># @option options [Integer]:backlog How many connections the server accepts
1828
- </span> <span class='comment'>#
1829
- </span> <span class='comment'># @return [void]
1830
- </span> <span class='comment'>#
1831
- </span> <span class='comment'># @api public
1832
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_parse_options'>parse_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
1833
- <span class='id identifier rubyid_raise'>raise</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Options is not a hash </span><span class='tstring_end'>&#39;</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
1834
- <span class='ivar'>@options</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_stringify_keys'>stringify_keys</span>
1835
- <span class='ivar'>@backlog</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:backlog</span><span class='comma'>,</span> <span class='int'>1024</span><span class='rparen'>)</span>
1836
- <span class='ivar'>@hostname</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:hostname</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>HOST</span><span class='rparen'>)</span>
1837
- <span class='ivar'>@port</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:port</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>PORT</span><span class='rparen'>)</span>
1838
- <span class='ivar'>@path</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:path</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>PATH</span><span class='rparen'>)</span>
1839
- <span class='ivar'>@spy</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:spy</span><span class='comma'>,</span> <span class='kw'>false</span><span class='rparen'>)</span>
1840
- <span class='kw'>end</span>
1841
-
1842
- <span class='comment'># checks if debug is enabled
1843
- </span> <span class='comment'>#
1844
- </span> <span class='comment'># @return [boolean]
1845
- </span> <span class='comment'>#
1846
- </span> <span class='comment'># @api public
1847
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1848
- <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1849
- <span class='kw'>end</span>
1850
-
1851
- <span class='comment'># checks if debug is enabled
1852
- </span> <span class='comment'>#
1853
- </span> <span class='comment'># @return [boolean]
1854
- </span> <span class='comment'>#
1855
- </span> <span class='comment'># @api public
1856
- </span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1857
- <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&amp;&amp;</span> <span class='lparen'>(</span><span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>true</span><span class='tstring_end'>&#39;</span></span> <span class='op'>||</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='kw'>true</span><span class='rparen'>)</span>
1858
- <span class='kw'>end</span>
1859
-
1860
- <span class='comment'># checks if debug is enabled
1861
- </span> <span class='comment'>#
1862
- </span> <span class='comment'># @param [String] current_topic The Channel to which the reactor instance {CelluloidPubsub::Rector} will publish the message to
1863
- </span> <span class='comment'># @param [Object] message
1864
- </span> <span class='comment'>#
1865
- </span> <span class='comment'># @return [void]
1866
- </span> <span class='comment'>#
1867
- </span> <span class='comment'># @api public
1868
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_publish_event'>publish_event</span><span class='lparen'>(</span><span class='id identifier rubyid_current_topic'>current_topic</span><span class='comma'>,</span> <span class='id identifier rubyid_message'>message</span><span class='rparen'>)</span>
1869
- <span class='kw'>return</span> <span class='kw'>if</span> <span class='id identifier rubyid_current_topic'>current_topic</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span> <span class='op'>||</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span>
1870
- <span class='ivar'>@subscribers</span><span class='lbracket'>[</span><span class='id identifier rubyid_current_topic'>current_topic</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_hash'>hash</span><span class='op'>|</span>
1871
- <span class='id identifier rubyid_hash'>hash</span><span class='lbracket'>[</span><span class='symbol'>:reactor</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_message'>message</span>
1872
- <span class='kw'>end</span>
1873
- <span class='kw'>end</span>
1874
-
1875
- <span class='comment'># callback that will execute when receiving new conections
1876
- </span> <span class='comment'># If the connections is a websocket will call method {#route_websocket}
1877
- </span> <span class='comment'># and if the connection is HTTP will call method {#route_request}
1878
- </span> <span class='comment'># For websocket connections , the connection is detached from the server and dispatched to another actor
1879
- </span> <span class='comment'>#
1880
- </span> <span class='comment'># @see #route_websocket
1881
- </span> <span class='comment'># @see #route_request
1882
- </span> <span class='comment'>#
1883
- </span> <span class='comment'># @param [Reel::WebSocket] connection The connection that was made to the webserver
1884
- </span> <span class='comment'>#
1885
- </span> <span class='comment'># @return [void]
1886
- </span> <span class='comment'>#
1887
- </span> <span class='comment'># @api public
1888
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_on_connection'>on_connection</span><span class='lparen'>(</span><span class='id identifier rubyid_connection'>connection</span><span class='rparen'>)</span>
1889
- <span class='kw'>while</span> <span class='id identifier rubyid_request'>request</span> <span class='op'>=</span> <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_request'>request</span>
1890
- <span class='kw'>if</span> <span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_websocket?'>websocket?</span>
1891
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Received a WebSocket connection</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1892
-
1893
- <span class='comment'># We&#39;re going to hand off this connection to another actor (Writer/Reader)
1894
- </span> <span class='comment'># However, initially Reel::Connections are &quot;attached&quot; to the
1895
- </span> <span class='comment'># Reel::Server::HTTP actor, meaning that the server manages the connection
1896
- </span> <span class='comment'># lifecycle (e.g. error handling) for us.
1897
- </span> <span class='comment'>#
1898
- </span> <span class='comment'># If we want to hand this connection off to another actor, we first
1899
- </span> <span class='comment'># need to detach it from the Reel::Server (in this case, Reel::Server::HTTP)
1900
- </span> <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_detach'>detach</span>
1901
- <span class='id identifier rubyid_route_websocket'>route_websocket</span><span class='lparen'>(</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span><span class='rparen'>)</span>
1902
- <span class='kw'>return</span>
1903
- <span class='kw'>else</span>
1904
- <span class='id identifier rubyid_route_request'>route_request</span> <span class='id identifier rubyid_connection'>connection</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span>
1905
- <span class='kw'>end</span>
1906
- <span class='kw'>end</span>
1907
- <span class='kw'>end</span>
1908
-
1909
- <span class='comment'># HTTP connections are not accepted so this method will show 404 message &quot;Not Found&quot;
1910
- </span> <span class='comment'>#
1911
- </span> <span class='comment'># @param [Reel::WebSocket] connection The HTTP connection that was received
1912
- </span> <span class='comment'># @param [Reel::Request] request The request that was made to the webserver and contains the type , the url, and the parameters
1913
- </span> <span class='comment'>#
1914
- </span> <span class='comment'># @return [void]
1915
- </span> <span class='comment'>#
1916
- </span> <span class='comment'># @api public
1917
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_route_request'>route_request</span><span class='lparen'>(</span><span class='id identifier rubyid_connection'>connection</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span><span class='rparen'>)</span>
1918
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>404 Not Found: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_path'>path</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1919
- <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_respond'>respond</span> <span class='symbol'>:not_found</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Not found</span><span class='tstring_end'>&#39;</span></span>
1920
- <span class='kw'>end</span>
1921
-
1922
- <span class='comment'># If the socket url matches with the one accepted by the server, it will dispatch the socket connection to a new reactor {CelluloidPubsub::Reactor#work}
1923
- </span> <span class='comment'># The new actor is linked to the webserver
1924
- </span> <span class='comment'>#
1925
- </span> <span class='comment'># @see CelluloidPubsub::Reactor#work
1926
- </span> <span class='comment'>#
1927
- </span> <span class='comment'># @param [Reel::WebSocket] socket The web socket connection that was received
1928
- </span> <span class='comment'>#
1929
- </span> <span class='comment'># @return [void]
1930
- </span> <span class='comment'>#
1931
- </span> <span class='comment'># @api public
1932
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_route_websocket'>route_websocket</span><span class='lparen'>(</span><span class='id identifier rubyid_socket'>socket</span><span class='rparen'>)</span>
1933
- <span class='kw'>if</span> <span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_url'>url</span> <span class='op'>==</span> <span class='ivar'>@path</span>
1934
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Reactor handles new socket connection</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1935
- <span class='id identifier rubyid_reactor'>reactor</span> <span class='op'>=</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>Reactor</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
1936
- <span class='const'>Actor</span><span class='period'>.</span><span class='id identifier rubyid_current'>current</span><span class='period'>.</span><span class='id identifier rubyid_link'>link</span> <span class='id identifier rubyid_reactor'>reactor</span>
1937
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_async'>async</span><span class='period'>.</span><span class='id identifier rubyid_work'>work</span><span class='lparen'>(</span><span class='id identifier rubyid_socket'>socket</span><span class='comma'>,</span> <span class='const'>Actor</span><span class='period'>.</span><span class='id identifier rubyid_current'>current</span><span class='rparen'>)</span>
1938
- <span class='kw'>else</span>
1939
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Received invalid WebSocket request for: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_url'>url</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1940
- <span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_close'>close</span>
1941
- <span class='kw'>end</span>
1942
- <span class='kw'>end</span>
1943
-
1944
- <span class='comment'># If the message can be parsed into a Hash it will respond to the reactor&#39;s websocket connection with the same message in JSON format
1945
- </span> <span class='comment'># otherwise will try send the message how it is and escaped into JSON format
1946
- </span> <span class='comment'>#
1947
- </span> <span class='comment'># @param [CelluloidPubsub::Reactor] reactor The reactor that received an unhandled message
1948
- </span> <span class='comment'># @param [Object] data The message that the reactor could not handle
1949
- </span> <span class='comment'>#
1950
- </span> <span class='comment'># @return [void]
1951
- </span> <span class='comment'>#
1952
- </span> <span class='comment'># @api public
1953
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_handle_dispatched_message'>handle_dispatched_message</span><span class='lparen'>(</span><span class='id identifier rubyid_reactor'>reactor</span><span class='comma'>,</span> <span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
1954
- <span class='id identifier rubyid_debug'>debug</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Webserver trying to dispatch message </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
1955
- <span class='id identifier rubyid_message'>message</span> <span class='op'>=</span> <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_parse_json_data'>parse_json_data</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
1956
- <span class='kw'>if</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
1957
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_to_json'>to_json</span>
1958
- <span class='kw'>else</span>
1959
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_to_json'>to_json</span>
1960
- <span class='kw'>end</span>
1961
- <span class='kw'>end</span>
1962
- <span class='kw'>end</span></pre>
1963
- </td>
1964
- </tr>
1965
- </table>
1966
- </div>
1967
-
1968
-
1969
- <span id="path=-instance_method"></span>
1970
- <div class="method_details ">
1971
- <h3 class="signature " id="path-instance_method">
1972
-
1973
- - (<tt>String</tt>) <strong>path</strong>
1974
-
1975
-
1976
-
1977
-
1978
-
1979
- </h3><div class="docstring">
1980
- <div class="discussion">
1981
-
1982
- <p>Returns The hostname on which the webserver runs on</p>
1983
-
1984
-
1985
- </div>
1986
- </div>
1987
- <div class="tags">
1988
-
1989
- <p class="tag_title">Returns:</p>
1990
- <ul class="return">
1991
-
1992
- <li>
1993
-
1994
-
1995
- <span class='type'>(<tt>String</tt>)</span>
1996
-
1997
-
1998
-
1999
- &mdash;
2000
- <div class='inline'>
2001
- <p>The hostname on which the webserver runs on</p>
2002
- </div>
2003
-
2004
- </li>
2005
-
2006
- </ul>
2007
-
2008
- </div><table class="source_code">
2009
- <tr>
2010
- <td>
2011
- <pre class="lines">
2012
-
2013
-
2014
- 31
2015
- 32
2016
- 33
2017
- 34
2018
- 35
2019
- 36
2020
- 37
2021
- 38
2022
- 39
2023
- 40
2024
- 41
2025
- 42
2026
- 43
2027
- 44
2028
- 45
2029
- 46
2030
- 47
2031
- 48
2032
- 49
2033
- 50
2034
- 51
2035
- 52
2036
- 53
2037
- 54
2038
- 55
2039
- 56
2040
- 57
2041
- 58
2042
- 59
2043
- 60
2044
- 61
2045
- 62
2046
- 63
2047
- 64
2048
- 65
2049
- 66
2050
- 67
2051
- 68
2052
- 69
2053
- 70
2054
- 71
2055
- 72
2056
- 73
2057
- 74
2058
- 75
2059
- 76
2060
- 77
2061
- 78
2062
- 79
2063
- 80
2064
- 81
2065
- 82
2066
- 83
2067
- 84
2068
- 85
2069
- 86
2070
- 87
2071
- 88
2072
- 89
2073
- 90
2074
- 91
2075
- 92
2076
- 93
2077
- 94
2078
- 95
2079
- 96
2080
- 97
2081
- 98
2082
- 99
2083
- 100
2084
- 101
2085
- 102
2086
- 103
2087
- 104
2088
- 105
2089
- 106
2090
- 107
2091
- 108
2092
- 109
2093
- 110
2094
- 111
2095
- 112
2096
- 113
2097
- 114
2098
- 115
2099
- 116
2100
- 117
2101
- 118
2102
- 119
2103
- 120
2104
- 121
2105
- 122
2106
- 123
2107
- 124
2108
- 125
2109
- 126
2110
- 127
2111
- 128
2112
- 129
2113
- 130
2114
- 131
2115
- 132
2116
- 133
2117
- 134
2118
- 135
2119
- 136
2120
- 137
2121
- 138
2122
- 139
2123
- 140
2124
- 141
2125
- 142
2126
- 143
2127
- 144
2128
- 145
2129
- 146
2130
- 147
2131
- 148
2132
- 149
2133
- 150
2134
- 151
2135
- 152
2136
- 153
2137
- 154
2138
- 155
2139
- 156
2140
- 157
2141
- 158
2142
- 159
2143
- 160
2144
- 161
2145
- 162
2146
- 163
2147
- 164
2148
- 165
2149
- 166
2150
- 167
2151
- 168
2152
- 169
2153
- 170
2154
- 171
2155
- 172
2156
- 173
2157
- 174
2158
- 175
2159
- 176
2160
- 177
2161
- 178
2162
- 179
2163
- 180
2164
- 181
2165
- 182
2166
- 183
2167
- 184
2168
- 185
2169
- 186
2170
- 187
2171
- 188
2172
- 189
2173
- 190
2174
- 191
2175
- 192
2176
- 193
2177
- 194
2178
- 195
2179
- 196
2180
- 197
2181
- 198
2182
- 199
2183
- 200
2184
- 201
2185
- 202
2186
- 203</pre>
2187
- </td>
2188
- <td>
2189
- <pre class="code"><span class="info file"># File 'lib/celluloid_pubsub/web_server.rb', line 31</span>
2190
-
2191
- <span class='kw'>class</span> <span class='const'>WebServer</span> <span class='op'>&lt;</span> <span class='const'>Reel</span><span class='op'>::</span><span class='const'>Server</span><span class='op'>::</span><span class='const'>HTTP</span>
2192
- <span class='id identifier rubyid_include'>include</span> <span class='const'>Celluloid</span><span class='op'>::</span><span class='const'>Logger</span>
2193
-
2194
- <span class='comment'># The hostname on which the webserver runs on by default
2195
- </span> <span class='const'>HOST</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0.0.0.0</span><span class='tstring_end'>&#39;</span></span>
2196
- <span class='comment'># The port on which the webserver runs on by default
2197
- </span> <span class='const'>PORT</span> <span class='op'>=</span> <span class='int'>1234</span>
2198
- <span class='comment'># The request path that the webserver accepts by default
2199
- </span> <span class='const'>PATH</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/ws</span><span class='tstring_end'>&#39;</span></span>
2200
-
2201
- <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:options</span><span class='comma'>,</span> <span class='symbol'>:subscribers</span><span class='comma'>,</span> <span class='symbol'>:backlog</span><span class='comma'>,</span> <span class='symbol'>:hostname</span><span class='comma'>,</span> <span class='symbol'>:port</span><span class='comma'>,</span> <span class='symbol'>:path</span><span class='comma'>,</span> <span class='symbol'>:spy</span>
2202
-
2203
- <span class='comment'># receives a list of options that are used to configure the webserver
2204
- </span> <span class='comment'>#
2205
- </span> <span class='comment'># @param [Hash] options the options that can be used to connect to webser and send additional data
2206
- </span> <span class='comment'># @option options [String]:hostname The hostname on which the webserver runs on
2207
- </span> <span class='comment'># @option options [Integer] :port The port on which the webserver runs on
2208
- </span> <span class='comment'># @option options [String] :path The request path that the webserver accepts
2209
- </span> <span class='comment'># @option options [Boolean] :spy Enable this only if you want to enable debugging for the webserver
2210
- </span> <span class='comment'>#
2211
- </span> <span class='comment'># @return [void]
2212
- </span> <span class='comment'>#
2213
- </span> <span class='comment'># @api public
2214
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
2215
- <span class='id identifier rubyid_parse_options'>parse_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
2216
- <span class='ivar'>@subscribers</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
2217
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>CelluloidPubsub::WebServer example starting on </span><span class='embexpr_beg'>#{</span><span class='ivar'>@hostname</span><span class='embexpr_end'>}</span><span class='tstring_content'>:</span><span class='embexpr_beg'>#{</span><span class='ivar'>@port</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
2218
- <span class='kw'>super</span><span class='lparen'>(</span><span class='ivar'>@hostname</span><span class='comma'>,</span> <span class='ivar'>@port</span><span class='comma'>,</span> <span class='lbrace'>{</span> <span class='label'>spy:</span> <span class='ivar'>@spy</span><span class='comma'>,</span> <span class='label'>backlog:</span> <span class='ivar'>@backlog</span> <span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_method'>method</span><span class='lparen'>(</span><span class='symbol'>:on_connection</span><span class='rparen'>)</span><span class='rparen'>)</span>
2219
- <span class='kw'>end</span>
2220
-
2221
- <span class='comment'># receives a list of options that are used to configure the webserver
2222
- </span> <span class='comment'>#
2223
- </span> <span class='comment'># @param [Hash] options the options that can be used to connect to webser and send additional data
2224
- </span> <span class='comment'># @option options [String]:hostname The hostname on which the webserver runs on
2225
- </span> <span class='comment'># @option options [Integer] :port The port on which the webserver runs on
2226
- </span> <span class='comment'># @option options [String] :path The request path that the webserver accepts
2227
- </span> <span class='comment'># @option options [Boolean] :spy Enable this only if you want to enable debugging for the webserver
2228
- </span> <span class='comment'># @option options [Integer]:backlog How many connections the server accepts
2229
- </span> <span class='comment'>#
2230
- </span> <span class='comment'># @return [void]
2231
- </span> <span class='comment'>#
2232
- </span> <span class='comment'># @api public
2233
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_parse_options'>parse_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
2234
- <span class='id identifier rubyid_raise'>raise</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Options is not a hash </span><span class='tstring_end'>&#39;</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
2235
- <span class='ivar'>@options</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_stringify_keys'>stringify_keys</span>
2236
- <span class='ivar'>@backlog</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:backlog</span><span class='comma'>,</span> <span class='int'>1024</span><span class='rparen'>)</span>
2237
- <span class='ivar'>@hostname</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:hostname</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>HOST</span><span class='rparen'>)</span>
2238
- <span class='ivar'>@port</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:port</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>PORT</span><span class='rparen'>)</span>
2239
- <span class='ivar'>@path</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:path</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>PATH</span><span class='rparen'>)</span>
2240
- <span class='ivar'>@spy</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:spy</span><span class='comma'>,</span> <span class='kw'>false</span><span class='rparen'>)</span>
2241
- <span class='kw'>end</span>
2242
-
2243
- <span class='comment'># checks if debug is enabled
2244
- </span> <span class='comment'>#
2245
- </span> <span class='comment'># @return [boolean]
2246
- </span> <span class='comment'>#
2247
- </span> <span class='comment'># @api public
2248
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
2249
- <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
2250
- <span class='kw'>end</span>
2251
-
2252
- <span class='comment'># checks if debug is enabled
2253
- </span> <span class='comment'>#
2254
- </span> <span class='comment'># @return [boolean]
2255
- </span> <span class='comment'>#
2256
- </span> <span class='comment'># @api public
2257
- </span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
2258
- <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&amp;&amp;</span> <span class='lparen'>(</span><span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>true</span><span class='tstring_end'>&#39;</span></span> <span class='op'>||</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='kw'>true</span><span class='rparen'>)</span>
2259
- <span class='kw'>end</span>
2260
-
2261
- <span class='comment'># checks if debug is enabled
2262
- </span> <span class='comment'>#
2263
- </span> <span class='comment'># @param [String] current_topic The Channel to which the reactor instance {CelluloidPubsub::Rector} will publish the message to
2264
- </span> <span class='comment'># @param [Object] message
2265
- </span> <span class='comment'>#
2266
- </span> <span class='comment'># @return [void]
2267
- </span> <span class='comment'>#
2268
- </span> <span class='comment'># @api public
2269
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_publish_event'>publish_event</span><span class='lparen'>(</span><span class='id identifier rubyid_current_topic'>current_topic</span><span class='comma'>,</span> <span class='id identifier rubyid_message'>message</span><span class='rparen'>)</span>
2270
- <span class='kw'>return</span> <span class='kw'>if</span> <span class='id identifier rubyid_current_topic'>current_topic</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span> <span class='op'>||</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span>
2271
- <span class='ivar'>@subscribers</span><span class='lbracket'>[</span><span class='id identifier rubyid_current_topic'>current_topic</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_hash'>hash</span><span class='op'>|</span>
2272
- <span class='id identifier rubyid_hash'>hash</span><span class='lbracket'>[</span><span class='symbol'>:reactor</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_message'>message</span>
2273
- <span class='kw'>end</span>
2274
- <span class='kw'>end</span>
2275
-
2276
- <span class='comment'># callback that will execute when receiving new conections
2277
- </span> <span class='comment'># If the connections is a websocket will call method {#route_websocket}
2278
- </span> <span class='comment'># and if the connection is HTTP will call method {#route_request}
2279
- </span> <span class='comment'># For websocket connections , the connection is detached from the server and dispatched to another actor
2280
- </span> <span class='comment'>#
2281
- </span> <span class='comment'># @see #route_websocket
2282
- </span> <span class='comment'># @see #route_request
2283
- </span> <span class='comment'>#
2284
- </span> <span class='comment'># @param [Reel::WebSocket] connection The connection that was made to the webserver
2285
- </span> <span class='comment'>#
2286
- </span> <span class='comment'># @return [void]
2287
- </span> <span class='comment'>#
2288
- </span> <span class='comment'># @api public
2289
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_on_connection'>on_connection</span><span class='lparen'>(</span><span class='id identifier rubyid_connection'>connection</span><span class='rparen'>)</span>
2290
- <span class='kw'>while</span> <span class='id identifier rubyid_request'>request</span> <span class='op'>=</span> <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_request'>request</span>
2291
- <span class='kw'>if</span> <span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_websocket?'>websocket?</span>
2292
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Received a WebSocket connection</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
2293
-
2294
- <span class='comment'># We&#39;re going to hand off this connection to another actor (Writer/Reader)
2295
- </span> <span class='comment'># However, initially Reel::Connections are &quot;attached&quot; to the
2296
- </span> <span class='comment'># Reel::Server::HTTP actor, meaning that the server manages the connection
2297
- </span> <span class='comment'># lifecycle (e.g. error handling) for us.
2298
- </span> <span class='comment'>#
2299
- </span> <span class='comment'># If we want to hand this connection off to another actor, we first
2300
- </span> <span class='comment'># need to detach it from the Reel::Server (in this case, Reel::Server::HTTP)
2301
- </span> <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_detach'>detach</span>
2302
- <span class='id identifier rubyid_route_websocket'>route_websocket</span><span class='lparen'>(</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span><span class='rparen'>)</span>
2303
- <span class='kw'>return</span>
2304
- <span class='kw'>else</span>
2305
- <span class='id identifier rubyid_route_request'>route_request</span> <span class='id identifier rubyid_connection'>connection</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span>
2306
- <span class='kw'>end</span>
2307
- <span class='kw'>end</span>
2308
- <span class='kw'>end</span>
2309
-
2310
- <span class='comment'># HTTP connections are not accepted so this method will show 404 message &quot;Not Found&quot;
2311
- </span> <span class='comment'>#
2312
- </span> <span class='comment'># @param [Reel::WebSocket] connection The HTTP connection that was received
2313
- </span> <span class='comment'># @param [Reel::Request] request The request that was made to the webserver and contains the type , the url, and the parameters
2314
- </span> <span class='comment'>#
2315
- </span> <span class='comment'># @return [void]
2316
- </span> <span class='comment'>#
2317
- </span> <span class='comment'># @api public
2318
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_route_request'>route_request</span><span class='lparen'>(</span><span class='id identifier rubyid_connection'>connection</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span><span class='rparen'>)</span>
2319
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>404 Not Found: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_path'>path</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
2320
- <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_respond'>respond</span> <span class='symbol'>:not_found</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Not found</span><span class='tstring_end'>&#39;</span></span>
2321
- <span class='kw'>end</span>
2322
-
2323
- <span class='comment'># If the socket url matches with the one accepted by the server, it will dispatch the socket connection to a new reactor {CelluloidPubsub::Reactor#work}
2324
- </span> <span class='comment'># The new actor is linked to the webserver
2325
- </span> <span class='comment'>#
2326
- </span> <span class='comment'># @see CelluloidPubsub::Reactor#work
2327
- </span> <span class='comment'>#
2328
- </span> <span class='comment'># @param [Reel::WebSocket] socket The web socket connection that was received
2329
- </span> <span class='comment'>#
2330
- </span> <span class='comment'># @return [void]
2331
- </span> <span class='comment'>#
2332
- </span> <span class='comment'># @api public
2333
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_route_websocket'>route_websocket</span><span class='lparen'>(</span><span class='id identifier rubyid_socket'>socket</span><span class='rparen'>)</span>
2334
- <span class='kw'>if</span> <span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_url'>url</span> <span class='op'>==</span> <span class='ivar'>@path</span>
2335
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Reactor handles new socket connection</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
2336
- <span class='id identifier rubyid_reactor'>reactor</span> <span class='op'>=</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>Reactor</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
2337
- <span class='const'>Actor</span><span class='period'>.</span><span class='id identifier rubyid_current'>current</span><span class='period'>.</span><span class='id identifier rubyid_link'>link</span> <span class='id identifier rubyid_reactor'>reactor</span>
2338
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_async'>async</span><span class='period'>.</span><span class='id identifier rubyid_work'>work</span><span class='lparen'>(</span><span class='id identifier rubyid_socket'>socket</span><span class='comma'>,</span> <span class='const'>Actor</span><span class='period'>.</span><span class='id identifier rubyid_current'>current</span><span class='rparen'>)</span>
2339
- <span class='kw'>else</span>
2340
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Received invalid WebSocket request for: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_url'>url</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
2341
- <span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_close'>close</span>
2342
- <span class='kw'>end</span>
2343
- <span class='kw'>end</span>
2344
-
2345
- <span class='comment'># If the message can be parsed into a Hash it will respond to the reactor&#39;s websocket connection with the same message in JSON format
2346
- </span> <span class='comment'># otherwise will try send the message how it is and escaped into JSON format
2347
- </span> <span class='comment'>#
2348
- </span> <span class='comment'># @param [CelluloidPubsub::Reactor] reactor The reactor that received an unhandled message
2349
- </span> <span class='comment'># @param [Object] data The message that the reactor could not handle
2350
- </span> <span class='comment'>#
2351
- </span> <span class='comment'># @return [void]
2352
- </span> <span class='comment'>#
2353
- </span> <span class='comment'># @api public
2354
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_handle_dispatched_message'>handle_dispatched_message</span><span class='lparen'>(</span><span class='id identifier rubyid_reactor'>reactor</span><span class='comma'>,</span> <span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
2355
- <span class='id identifier rubyid_debug'>debug</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Webserver trying to dispatch message </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
2356
- <span class='id identifier rubyid_message'>message</span> <span class='op'>=</span> <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_parse_json_data'>parse_json_data</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
2357
- <span class='kw'>if</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
2358
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_to_json'>to_json</span>
2359
- <span class='kw'>else</span>
2360
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_to_json'>to_json</span>
2361
- <span class='kw'>end</span>
2362
- <span class='kw'>end</span>
2363
- <span class='kw'>end</span></pre>
2364
- </td>
2365
- </tr>
2366
- </table>
2367
- </div>
2368
-
2369
-
2370
- <span id="port=-instance_method"></span>
2371
- <div class="method_details ">
2372
- <h3 class="signature " id="port-instance_method">
2373
-
2374
- - (<tt>String</tt>) <strong>port</strong>
2375
-
2376
-
2377
-
2378
-
2379
-
2380
- </h3><div class="docstring">
2381
- <div class="discussion">
2382
-
2383
- <p>Returns The port on which the webserver runs on</p>
2384
-
2385
-
2386
- </div>
2387
- </div>
2388
- <div class="tags">
2389
-
2390
- <p class="tag_title">Returns:</p>
2391
- <ul class="return">
2392
-
2393
- <li>
2394
-
2395
-
2396
- <span class='type'>(<tt>String</tt>)</span>
2397
-
2398
-
2399
-
2400
- &mdash;
2401
- <div class='inline'>
2402
- <p>The port on which the webserver runs on</p>
2403
- </div>
2404
-
2405
- </li>
2406
-
2407
- </ul>
2408
-
2409
- </div><table class="source_code">
2410
- <tr>
2411
- <td>
2412
- <pre class="lines">
2413
-
2414
-
2415
- 31
2416
- 32
2417
- 33
2418
- 34
2419
- 35
2420
- 36
2421
- 37
2422
- 38
2423
- 39
2424
- 40
2425
- 41
2426
- 42
2427
- 43
2428
- 44
2429
- 45
2430
- 46
2431
- 47
2432
- 48
2433
- 49
2434
- 50
2435
- 51
2436
- 52
2437
- 53
2438
- 54
2439
- 55
2440
- 56
2441
- 57
2442
- 58
2443
- 59
2444
- 60
2445
- 61
2446
- 62
2447
- 63
2448
- 64
2449
- 65
2450
- 66
2451
- 67
2452
- 68
2453
- 69
2454
- 70
2455
- 71
2456
- 72
2457
- 73
2458
- 74
2459
- 75
2460
- 76
2461
- 77
2462
- 78
2463
- 79
2464
- 80
2465
- 81
2466
- 82
2467
- 83
2468
- 84
2469
- 85
2470
- 86
2471
- 87
2472
- 88
2473
- 89
2474
- 90
2475
- 91
2476
- 92
2477
- 93
2478
- 94
2479
- 95
2480
- 96
2481
- 97
2482
- 98
2483
- 99
2484
- 100
2485
- 101
2486
- 102
2487
- 103
2488
- 104
2489
- 105
2490
- 106
2491
- 107
2492
- 108
2493
- 109
2494
- 110
2495
- 111
2496
- 112
2497
- 113
2498
- 114
2499
- 115
2500
- 116
2501
- 117
2502
- 118
2503
- 119
2504
- 120
2505
- 121
2506
- 122
2507
- 123
2508
- 124
2509
- 125
2510
- 126
2511
- 127
2512
- 128
2513
- 129
2514
- 130
2515
- 131
2516
- 132
2517
- 133
2518
- 134
2519
- 135
2520
- 136
2521
- 137
2522
- 138
2523
- 139
2524
- 140
2525
- 141
2526
- 142
2527
- 143
2528
- 144
2529
- 145
2530
- 146
2531
- 147
2532
- 148
2533
- 149
2534
- 150
2535
- 151
2536
- 152
2537
- 153
2538
- 154
2539
- 155
2540
- 156
2541
- 157
2542
- 158
2543
- 159
2544
- 160
2545
- 161
2546
- 162
2547
- 163
2548
- 164
2549
- 165
2550
- 166
2551
- 167
2552
- 168
2553
- 169
2554
- 170
2555
- 171
2556
- 172
2557
- 173
2558
- 174
2559
- 175
2560
- 176
2561
- 177
2562
- 178
2563
- 179
2564
- 180
2565
- 181
2566
- 182
2567
- 183
2568
- 184
2569
- 185
2570
- 186
2571
- 187
2572
- 188
2573
- 189
2574
- 190
2575
- 191
2576
- 192
2577
- 193
2578
- 194
2579
- 195
2580
- 196
2581
- 197
2582
- 198
2583
- 199
2584
- 200
2585
- 201
2586
- 202
2587
- 203</pre>
2588
- </td>
2589
- <td>
2590
- <pre class="code"><span class="info file"># File 'lib/celluloid_pubsub/web_server.rb', line 31</span>
2591
-
2592
- <span class='kw'>class</span> <span class='const'>WebServer</span> <span class='op'>&lt;</span> <span class='const'>Reel</span><span class='op'>::</span><span class='const'>Server</span><span class='op'>::</span><span class='const'>HTTP</span>
2593
- <span class='id identifier rubyid_include'>include</span> <span class='const'>Celluloid</span><span class='op'>::</span><span class='const'>Logger</span>
2594
-
2595
- <span class='comment'># The hostname on which the webserver runs on by default
2596
- </span> <span class='const'>HOST</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0.0.0.0</span><span class='tstring_end'>&#39;</span></span>
2597
- <span class='comment'># The port on which the webserver runs on by default
2598
- </span> <span class='const'>PORT</span> <span class='op'>=</span> <span class='int'>1234</span>
2599
- <span class='comment'># The request path that the webserver accepts by default
2600
- </span> <span class='const'>PATH</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/ws</span><span class='tstring_end'>&#39;</span></span>
2601
-
2602
- <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:options</span><span class='comma'>,</span> <span class='symbol'>:subscribers</span><span class='comma'>,</span> <span class='symbol'>:backlog</span><span class='comma'>,</span> <span class='symbol'>:hostname</span><span class='comma'>,</span> <span class='symbol'>:port</span><span class='comma'>,</span> <span class='symbol'>:path</span><span class='comma'>,</span> <span class='symbol'>:spy</span>
2603
-
2604
- <span class='comment'># receives a list of options that are used to configure the webserver
2605
- </span> <span class='comment'>#
2606
- </span> <span class='comment'># @param [Hash] options the options that can be used to connect to webser and send additional data
2607
- </span> <span class='comment'># @option options [String]:hostname The hostname on which the webserver runs on
2608
- </span> <span class='comment'># @option options [Integer] :port The port on which the webserver runs on
2609
- </span> <span class='comment'># @option options [String] :path The request path that the webserver accepts
2610
- </span> <span class='comment'># @option options [Boolean] :spy Enable this only if you want to enable debugging for the webserver
2611
- </span> <span class='comment'>#
2612
- </span> <span class='comment'># @return [void]
2613
- </span> <span class='comment'>#
2614
- </span> <span class='comment'># @api public
2615
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
2616
- <span class='id identifier rubyid_parse_options'>parse_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
2617
- <span class='ivar'>@subscribers</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
2618
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>CelluloidPubsub::WebServer example starting on </span><span class='embexpr_beg'>#{</span><span class='ivar'>@hostname</span><span class='embexpr_end'>}</span><span class='tstring_content'>:</span><span class='embexpr_beg'>#{</span><span class='ivar'>@port</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
2619
- <span class='kw'>super</span><span class='lparen'>(</span><span class='ivar'>@hostname</span><span class='comma'>,</span> <span class='ivar'>@port</span><span class='comma'>,</span> <span class='lbrace'>{</span> <span class='label'>spy:</span> <span class='ivar'>@spy</span><span class='comma'>,</span> <span class='label'>backlog:</span> <span class='ivar'>@backlog</span> <span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_method'>method</span><span class='lparen'>(</span><span class='symbol'>:on_connection</span><span class='rparen'>)</span><span class='rparen'>)</span>
2620
- <span class='kw'>end</span>
2621
-
2622
- <span class='comment'># receives a list of options that are used to configure the webserver
2623
- </span> <span class='comment'>#
2624
- </span> <span class='comment'># @param [Hash] options the options that can be used to connect to webser and send additional data
2625
- </span> <span class='comment'># @option options [String]:hostname The hostname on which the webserver runs on
2626
- </span> <span class='comment'># @option options [Integer] :port The port on which the webserver runs on
2627
- </span> <span class='comment'># @option options [String] :path The request path that the webserver accepts
2628
- </span> <span class='comment'># @option options [Boolean] :spy Enable this only if you want to enable debugging for the webserver
2629
- </span> <span class='comment'># @option options [Integer]:backlog How many connections the server accepts
2630
- </span> <span class='comment'>#
2631
- </span> <span class='comment'># @return [void]
2632
- </span> <span class='comment'>#
2633
- </span> <span class='comment'># @api public
2634
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_parse_options'>parse_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
2635
- <span class='id identifier rubyid_raise'>raise</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Options is not a hash </span><span class='tstring_end'>&#39;</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
2636
- <span class='ivar'>@options</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_stringify_keys'>stringify_keys</span>
2637
- <span class='ivar'>@backlog</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:backlog</span><span class='comma'>,</span> <span class='int'>1024</span><span class='rparen'>)</span>
2638
- <span class='ivar'>@hostname</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:hostname</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>HOST</span><span class='rparen'>)</span>
2639
- <span class='ivar'>@port</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:port</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>PORT</span><span class='rparen'>)</span>
2640
- <span class='ivar'>@path</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:path</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>PATH</span><span class='rparen'>)</span>
2641
- <span class='ivar'>@spy</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:spy</span><span class='comma'>,</span> <span class='kw'>false</span><span class='rparen'>)</span>
2642
- <span class='kw'>end</span>
2643
-
2644
- <span class='comment'># checks if debug is enabled
2645
- </span> <span class='comment'>#
2646
- </span> <span class='comment'># @return [boolean]
2647
- </span> <span class='comment'>#
2648
- </span> <span class='comment'># @api public
2649
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
2650
- <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
2651
- <span class='kw'>end</span>
2652
-
2653
- <span class='comment'># checks if debug is enabled
2654
- </span> <span class='comment'>#
2655
- </span> <span class='comment'># @return [boolean]
2656
- </span> <span class='comment'>#
2657
- </span> <span class='comment'># @api public
2658
- </span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
2659
- <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&amp;&amp;</span> <span class='lparen'>(</span><span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>true</span><span class='tstring_end'>&#39;</span></span> <span class='op'>||</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='kw'>true</span><span class='rparen'>)</span>
2660
- <span class='kw'>end</span>
2661
-
2662
- <span class='comment'># checks if debug is enabled
2663
- </span> <span class='comment'>#
2664
- </span> <span class='comment'># @param [String] current_topic The Channel to which the reactor instance {CelluloidPubsub::Rector} will publish the message to
2665
- </span> <span class='comment'># @param [Object] message
2666
- </span> <span class='comment'>#
2667
- </span> <span class='comment'># @return [void]
2668
- </span> <span class='comment'>#
2669
- </span> <span class='comment'># @api public
2670
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_publish_event'>publish_event</span><span class='lparen'>(</span><span class='id identifier rubyid_current_topic'>current_topic</span><span class='comma'>,</span> <span class='id identifier rubyid_message'>message</span><span class='rparen'>)</span>
2671
- <span class='kw'>return</span> <span class='kw'>if</span> <span class='id identifier rubyid_current_topic'>current_topic</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span> <span class='op'>||</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span>
2672
- <span class='ivar'>@subscribers</span><span class='lbracket'>[</span><span class='id identifier rubyid_current_topic'>current_topic</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_hash'>hash</span><span class='op'>|</span>
2673
- <span class='id identifier rubyid_hash'>hash</span><span class='lbracket'>[</span><span class='symbol'>:reactor</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_message'>message</span>
2674
- <span class='kw'>end</span>
2675
- <span class='kw'>end</span>
2676
-
2677
- <span class='comment'># callback that will execute when receiving new conections
2678
- </span> <span class='comment'># If the connections is a websocket will call method {#route_websocket}
2679
- </span> <span class='comment'># and if the connection is HTTP will call method {#route_request}
2680
- </span> <span class='comment'># For websocket connections , the connection is detached from the server and dispatched to another actor
2681
- </span> <span class='comment'>#
2682
- </span> <span class='comment'># @see #route_websocket
2683
- </span> <span class='comment'># @see #route_request
2684
- </span> <span class='comment'>#
2685
- </span> <span class='comment'># @param [Reel::WebSocket] connection The connection that was made to the webserver
2686
- </span> <span class='comment'>#
2687
- </span> <span class='comment'># @return [void]
2688
- </span> <span class='comment'>#
2689
- </span> <span class='comment'># @api public
2690
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_on_connection'>on_connection</span><span class='lparen'>(</span><span class='id identifier rubyid_connection'>connection</span><span class='rparen'>)</span>
2691
- <span class='kw'>while</span> <span class='id identifier rubyid_request'>request</span> <span class='op'>=</span> <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_request'>request</span>
2692
- <span class='kw'>if</span> <span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_websocket?'>websocket?</span>
2693
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Received a WebSocket connection</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
2694
-
2695
- <span class='comment'># We&#39;re going to hand off this connection to another actor (Writer/Reader)
2696
- </span> <span class='comment'># However, initially Reel::Connections are &quot;attached&quot; to the
2697
- </span> <span class='comment'># Reel::Server::HTTP actor, meaning that the server manages the connection
2698
- </span> <span class='comment'># lifecycle (e.g. error handling) for us.
2699
- </span> <span class='comment'>#
2700
- </span> <span class='comment'># If we want to hand this connection off to another actor, we first
2701
- </span> <span class='comment'># need to detach it from the Reel::Server (in this case, Reel::Server::HTTP)
2702
- </span> <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_detach'>detach</span>
2703
- <span class='id identifier rubyid_route_websocket'>route_websocket</span><span class='lparen'>(</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span><span class='rparen'>)</span>
2704
- <span class='kw'>return</span>
2705
- <span class='kw'>else</span>
2706
- <span class='id identifier rubyid_route_request'>route_request</span> <span class='id identifier rubyid_connection'>connection</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span>
2707
- <span class='kw'>end</span>
2708
- <span class='kw'>end</span>
2709
- <span class='kw'>end</span>
2710
-
2711
- <span class='comment'># HTTP connections are not accepted so this method will show 404 message &quot;Not Found&quot;
2712
- </span> <span class='comment'>#
2713
- </span> <span class='comment'># @param [Reel::WebSocket] connection The HTTP connection that was received
2714
- </span> <span class='comment'># @param [Reel::Request] request The request that was made to the webserver and contains the type , the url, and the parameters
2715
- </span> <span class='comment'>#
2716
- </span> <span class='comment'># @return [void]
2717
- </span> <span class='comment'>#
2718
- </span> <span class='comment'># @api public
2719
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_route_request'>route_request</span><span class='lparen'>(</span><span class='id identifier rubyid_connection'>connection</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span><span class='rparen'>)</span>
2720
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>404 Not Found: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_path'>path</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
2721
- <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_respond'>respond</span> <span class='symbol'>:not_found</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Not found</span><span class='tstring_end'>&#39;</span></span>
2722
- <span class='kw'>end</span>
2723
-
2724
- <span class='comment'># If the socket url matches with the one accepted by the server, it will dispatch the socket connection to a new reactor {CelluloidPubsub::Reactor#work}
2725
- </span> <span class='comment'># The new actor is linked to the webserver
2726
- </span> <span class='comment'>#
2727
- </span> <span class='comment'># @see CelluloidPubsub::Reactor#work
2728
- </span> <span class='comment'>#
2729
- </span> <span class='comment'># @param [Reel::WebSocket] socket The web socket connection that was received
2730
- </span> <span class='comment'>#
2731
- </span> <span class='comment'># @return [void]
2732
- </span> <span class='comment'>#
2733
- </span> <span class='comment'># @api public
2734
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_route_websocket'>route_websocket</span><span class='lparen'>(</span><span class='id identifier rubyid_socket'>socket</span><span class='rparen'>)</span>
2735
- <span class='kw'>if</span> <span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_url'>url</span> <span class='op'>==</span> <span class='ivar'>@path</span>
2736
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Reactor handles new socket connection</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
2737
- <span class='id identifier rubyid_reactor'>reactor</span> <span class='op'>=</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>Reactor</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
2738
- <span class='const'>Actor</span><span class='period'>.</span><span class='id identifier rubyid_current'>current</span><span class='period'>.</span><span class='id identifier rubyid_link'>link</span> <span class='id identifier rubyid_reactor'>reactor</span>
2739
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_async'>async</span><span class='period'>.</span><span class='id identifier rubyid_work'>work</span><span class='lparen'>(</span><span class='id identifier rubyid_socket'>socket</span><span class='comma'>,</span> <span class='const'>Actor</span><span class='period'>.</span><span class='id identifier rubyid_current'>current</span><span class='rparen'>)</span>
2740
- <span class='kw'>else</span>
2741
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Received invalid WebSocket request for: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_url'>url</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
2742
- <span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_close'>close</span>
2743
- <span class='kw'>end</span>
2744
- <span class='kw'>end</span>
2745
-
2746
- <span class='comment'># If the message can be parsed into a Hash it will respond to the reactor&#39;s websocket connection with the same message in JSON format
2747
- </span> <span class='comment'># otherwise will try send the message how it is and escaped into JSON format
2748
- </span> <span class='comment'>#
2749
- </span> <span class='comment'># @param [CelluloidPubsub::Reactor] reactor The reactor that received an unhandled message
2750
- </span> <span class='comment'># @param [Object] data The message that the reactor could not handle
2751
- </span> <span class='comment'>#
2752
- </span> <span class='comment'># @return [void]
2753
- </span> <span class='comment'>#
2754
- </span> <span class='comment'># @api public
2755
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_handle_dispatched_message'>handle_dispatched_message</span><span class='lparen'>(</span><span class='id identifier rubyid_reactor'>reactor</span><span class='comma'>,</span> <span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
2756
- <span class='id identifier rubyid_debug'>debug</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Webserver trying to dispatch message </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
2757
- <span class='id identifier rubyid_message'>message</span> <span class='op'>=</span> <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_parse_json_data'>parse_json_data</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
2758
- <span class='kw'>if</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
2759
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_to_json'>to_json</span>
2760
- <span class='kw'>else</span>
2761
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_to_json'>to_json</span>
2762
- <span class='kw'>end</span>
2763
- <span class='kw'>end</span>
2764
- <span class='kw'>end</span></pre>
2765
- </td>
2766
- </tr>
2767
- </table>
2768
- </div>
2769
-
2770
-
2771
- <span id="spy=-instance_method"></span>
2772
- <div class="method_details ">
2773
- <h3 class="signature " id="spy-instance_method">
2774
-
2775
- - (<tt>Boolean</tt>) <strong>spy</strong>
2776
-
2777
-
2778
-
2779
-
2780
-
2781
- </h3><div class="docstring">
2782
- <div class="discussion">
2783
-
2784
- <p>Returns Enable this only if you want to enable debugging for the webserver</p>
2785
-
2786
-
2787
- </div>
2788
- </div>
2789
- <div class="tags">
2790
-
2791
- <p class="tag_title">Returns:</p>
2792
- <ul class="return">
2793
-
2794
- <li>
2795
-
2796
-
2797
- <span class='type'>(<tt>Boolean</tt>)</span>
2798
-
2799
-
2800
-
2801
- &mdash;
2802
- <div class='inline'>
2803
- <p>Enable this only if you want to enable debugging for the webserver</p>
2804
- </div>
2805
-
2806
- </li>
2807
-
2808
- </ul>
2809
-
2810
- </div><table class="source_code">
2811
- <tr>
2812
- <td>
2813
- <pre class="lines">
2814
-
2815
-
2816
- 31
2817
- 32
2818
- 33
2819
- 34
2820
- 35
2821
- 36
2822
- 37
2823
- 38
2824
- 39
2825
- 40
2826
- 41
2827
- 42
2828
- 43
2829
- 44
2830
- 45
2831
- 46
2832
- 47
2833
- 48
2834
- 49
2835
- 50
2836
- 51
2837
- 52
2838
- 53
2839
- 54
2840
- 55
2841
- 56
2842
- 57
2843
- 58
2844
- 59
2845
- 60
2846
- 61
2847
- 62
2848
- 63
2849
- 64
2850
- 65
2851
- 66
2852
- 67
2853
- 68
2854
- 69
2855
- 70
2856
- 71
2857
- 72
2858
- 73
2859
- 74
2860
- 75
2861
- 76
2862
- 77
2863
- 78
2864
- 79
2865
- 80
2866
- 81
2867
- 82
2868
- 83
2869
- 84
2870
- 85
2871
- 86
2872
- 87
2873
- 88
2874
- 89
2875
- 90
2876
- 91
2877
- 92
2878
- 93
2879
- 94
2880
- 95
2881
- 96
2882
- 97
2883
- 98
2884
- 99
2885
- 100
2886
- 101
2887
- 102
2888
- 103
2889
- 104
2890
- 105
2891
- 106
2892
- 107
2893
- 108
2894
- 109
2895
- 110
2896
- 111
2897
- 112
2898
- 113
2899
- 114
2900
- 115
2901
- 116
2902
- 117
2903
- 118
2904
- 119
2905
- 120
2906
- 121
2907
- 122
2908
- 123
2909
- 124
2910
- 125
2911
- 126
2912
- 127
2913
- 128
2914
- 129
2915
- 130
2916
- 131
2917
- 132
2918
- 133
2919
- 134
2920
- 135
2921
- 136
2922
- 137
2923
- 138
2924
- 139
2925
- 140
2926
- 141
2927
- 142
2928
- 143
2929
- 144
2930
- 145
2931
- 146
2932
- 147
2933
- 148
2934
- 149
2935
- 150
2936
- 151
2937
- 152
2938
- 153
2939
- 154
2940
- 155
2941
- 156
2942
- 157
2943
- 158
2944
- 159
2945
- 160
2946
- 161
2947
- 162
2948
- 163
2949
- 164
2950
- 165
2951
- 166
2952
- 167
2953
- 168
2954
- 169
2955
- 170
2956
- 171
2957
- 172
2958
- 173
2959
- 174
2960
- 175
2961
- 176
2962
- 177
2963
- 178
2964
- 179
2965
- 180
2966
- 181
2967
- 182
2968
- 183
2969
- 184
2970
- 185
2971
- 186
2972
- 187
2973
- 188
2974
- 189
2975
- 190
2976
- 191
2977
- 192
2978
- 193
2979
- 194
2980
- 195
2981
- 196
2982
- 197
2983
- 198
2984
- 199
2985
- 200
2986
- 201
2987
- 202
2988
- 203</pre>
2989
- </td>
2990
- <td>
2991
- <pre class="code"><span class="info file"># File 'lib/celluloid_pubsub/web_server.rb', line 31</span>
2992
-
2993
- <span class='kw'>class</span> <span class='const'>WebServer</span> <span class='op'>&lt;</span> <span class='const'>Reel</span><span class='op'>::</span><span class='const'>Server</span><span class='op'>::</span><span class='const'>HTTP</span>
2994
- <span class='id identifier rubyid_include'>include</span> <span class='const'>Celluloid</span><span class='op'>::</span><span class='const'>Logger</span>
2995
-
2996
- <span class='comment'># The hostname on which the webserver runs on by default
2997
- </span> <span class='const'>HOST</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0.0.0.0</span><span class='tstring_end'>&#39;</span></span>
2998
- <span class='comment'># The port on which the webserver runs on by default
2999
- </span> <span class='const'>PORT</span> <span class='op'>=</span> <span class='int'>1234</span>
3000
- <span class='comment'># The request path that the webserver accepts by default
3001
- </span> <span class='const'>PATH</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/ws</span><span class='tstring_end'>&#39;</span></span>
3002
-
3003
- <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:options</span><span class='comma'>,</span> <span class='symbol'>:subscribers</span><span class='comma'>,</span> <span class='symbol'>:backlog</span><span class='comma'>,</span> <span class='symbol'>:hostname</span><span class='comma'>,</span> <span class='symbol'>:port</span><span class='comma'>,</span> <span class='symbol'>:path</span><span class='comma'>,</span> <span class='symbol'>:spy</span>
3004
-
3005
- <span class='comment'># receives a list of options that are used to configure the webserver
3006
- </span> <span class='comment'>#
3007
- </span> <span class='comment'># @param [Hash] options the options that can be used to connect to webser and send additional data
3008
- </span> <span class='comment'># @option options [String]:hostname The hostname on which the webserver runs on
3009
- </span> <span class='comment'># @option options [Integer] :port The port on which the webserver runs on
3010
- </span> <span class='comment'># @option options [String] :path The request path that the webserver accepts
3011
- </span> <span class='comment'># @option options [Boolean] :spy Enable this only if you want to enable debugging for the webserver
3012
- </span> <span class='comment'>#
3013
- </span> <span class='comment'># @return [void]
3014
- </span> <span class='comment'>#
3015
- </span> <span class='comment'># @api public
3016
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
3017
- <span class='id identifier rubyid_parse_options'>parse_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
3018
- <span class='ivar'>@subscribers</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
3019
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>CelluloidPubsub::WebServer example starting on </span><span class='embexpr_beg'>#{</span><span class='ivar'>@hostname</span><span class='embexpr_end'>}</span><span class='tstring_content'>:</span><span class='embexpr_beg'>#{</span><span class='ivar'>@port</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3020
- <span class='kw'>super</span><span class='lparen'>(</span><span class='ivar'>@hostname</span><span class='comma'>,</span> <span class='ivar'>@port</span><span class='comma'>,</span> <span class='lbrace'>{</span> <span class='label'>spy:</span> <span class='ivar'>@spy</span><span class='comma'>,</span> <span class='label'>backlog:</span> <span class='ivar'>@backlog</span> <span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_method'>method</span><span class='lparen'>(</span><span class='symbol'>:on_connection</span><span class='rparen'>)</span><span class='rparen'>)</span>
3021
- <span class='kw'>end</span>
3022
-
3023
- <span class='comment'># receives a list of options that are used to configure the webserver
3024
- </span> <span class='comment'>#
3025
- </span> <span class='comment'># @param [Hash] options the options that can be used to connect to webser and send additional data
3026
- </span> <span class='comment'># @option options [String]:hostname The hostname on which the webserver runs on
3027
- </span> <span class='comment'># @option options [Integer] :port The port on which the webserver runs on
3028
- </span> <span class='comment'># @option options [String] :path The request path that the webserver accepts
3029
- </span> <span class='comment'># @option options [Boolean] :spy Enable this only if you want to enable debugging for the webserver
3030
- </span> <span class='comment'># @option options [Integer]:backlog How many connections the server accepts
3031
- </span> <span class='comment'>#
3032
- </span> <span class='comment'># @return [void]
3033
- </span> <span class='comment'>#
3034
- </span> <span class='comment'># @api public
3035
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_parse_options'>parse_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
3036
- <span class='id identifier rubyid_raise'>raise</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Options is not a hash </span><span class='tstring_end'>&#39;</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
3037
- <span class='ivar'>@options</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_stringify_keys'>stringify_keys</span>
3038
- <span class='ivar'>@backlog</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:backlog</span><span class='comma'>,</span> <span class='int'>1024</span><span class='rparen'>)</span>
3039
- <span class='ivar'>@hostname</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:hostname</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>HOST</span><span class='rparen'>)</span>
3040
- <span class='ivar'>@port</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:port</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>PORT</span><span class='rparen'>)</span>
3041
- <span class='ivar'>@path</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:path</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>PATH</span><span class='rparen'>)</span>
3042
- <span class='ivar'>@spy</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:spy</span><span class='comma'>,</span> <span class='kw'>false</span><span class='rparen'>)</span>
3043
- <span class='kw'>end</span>
3044
-
3045
- <span class='comment'># checks if debug is enabled
3046
- </span> <span class='comment'>#
3047
- </span> <span class='comment'># @return [boolean]
3048
- </span> <span class='comment'>#
3049
- </span> <span class='comment'># @api public
3050
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3051
- <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3052
- <span class='kw'>end</span>
3053
-
3054
- <span class='comment'># checks if debug is enabled
3055
- </span> <span class='comment'>#
3056
- </span> <span class='comment'># @return [boolean]
3057
- </span> <span class='comment'>#
3058
- </span> <span class='comment'># @api public
3059
- </span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3060
- <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&amp;&amp;</span> <span class='lparen'>(</span><span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>true</span><span class='tstring_end'>&#39;</span></span> <span class='op'>||</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='kw'>true</span><span class='rparen'>)</span>
3061
- <span class='kw'>end</span>
3062
-
3063
- <span class='comment'># checks if debug is enabled
3064
- </span> <span class='comment'>#
3065
- </span> <span class='comment'># @param [String] current_topic The Channel to which the reactor instance {CelluloidPubsub::Rector} will publish the message to
3066
- </span> <span class='comment'># @param [Object] message
3067
- </span> <span class='comment'>#
3068
- </span> <span class='comment'># @return [void]
3069
- </span> <span class='comment'>#
3070
- </span> <span class='comment'># @api public
3071
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_publish_event'>publish_event</span><span class='lparen'>(</span><span class='id identifier rubyid_current_topic'>current_topic</span><span class='comma'>,</span> <span class='id identifier rubyid_message'>message</span><span class='rparen'>)</span>
3072
- <span class='kw'>return</span> <span class='kw'>if</span> <span class='id identifier rubyid_current_topic'>current_topic</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span> <span class='op'>||</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span>
3073
- <span class='ivar'>@subscribers</span><span class='lbracket'>[</span><span class='id identifier rubyid_current_topic'>current_topic</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_hash'>hash</span><span class='op'>|</span>
3074
- <span class='id identifier rubyid_hash'>hash</span><span class='lbracket'>[</span><span class='symbol'>:reactor</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_message'>message</span>
3075
- <span class='kw'>end</span>
3076
- <span class='kw'>end</span>
3077
-
3078
- <span class='comment'># callback that will execute when receiving new conections
3079
- </span> <span class='comment'># If the connections is a websocket will call method {#route_websocket}
3080
- </span> <span class='comment'># and if the connection is HTTP will call method {#route_request}
3081
- </span> <span class='comment'># For websocket connections , the connection is detached from the server and dispatched to another actor
3082
- </span> <span class='comment'>#
3083
- </span> <span class='comment'># @see #route_websocket
3084
- </span> <span class='comment'># @see #route_request
3085
- </span> <span class='comment'>#
3086
- </span> <span class='comment'># @param [Reel::WebSocket] connection The connection that was made to the webserver
3087
- </span> <span class='comment'>#
3088
- </span> <span class='comment'># @return [void]
3089
- </span> <span class='comment'>#
3090
- </span> <span class='comment'># @api public
3091
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_on_connection'>on_connection</span><span class='lparen'>(</span><span class='id identifier rubyid_connection'>connection</span><span class='rparen'>)</span>
3092
- <span class='kw'>while</span> <span class='id identifier rubyid_request'>request</span> <span class='op'>=</span> <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_request'>request</span>
3093
- <span class='kw'>if</span> <span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_websocket?'>websocket?</span>
3094
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Received a WebSocket connection</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3095
-
3096
- <span class='comment'># We&#39;re going to hand off this connection to another actor (Writer/Reader)
3097
- </span> <span class='comment'># However, initially Reel::Connections are &quot;attached&quot; to the
3098
- </span> <span class='comment'># Reel::Server::HTTP actor, meaning that the server manages the connection
3099
- </span> <span class='comment'># lifecycle (e.g. error handling) for us.
3100
- </span> <span class='comment'>#
3101
- </span> <span class='comment'># If we want to hand this connection off to another actor, we first
3102
- </span> <span class='comment'># need to detach it from the Reel::Server (in this case, Reel::Server::HTTP)
3103
- </span> <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_detach'>detach</span>
3104
- <span class='id identifier rubyid_route_websocket'>route_websocket</span><span class='lparen'>(</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span><span class='rparen'>)</span>
3105
- <span class='kw'>return</span>
3106
- <span class='kw'>else</span>
3107
- <span class='id identifier rubyid_route_request'>route_request</span> <span class='id identifier rubyid_connection'>connection</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span>
3108
- <span class='kw'>end</span>
3109
- <span class='kw'>end</span>
3110
- <span class='kw'>end</span>
3111
-
3112
- <span class='comment'># HTTP connections are not accepted so this method will show 404 message &quot;Not Found&quot;
3113
- </span> <span class='comment'>#
3114
- </span> <span class='comment'># @param [Reel::WebSocket] connection The HTTP connection that was received
3115
- </span> <span class='comment'># @param [Reel::Request] request The request that was made to the webserver and contains the type , the url, and the parameters
3116
- </span> <span class='comment'>#
3117
- </span> <span class='comment'># @return [void]
3118
- </span> <span class='comment'>#
3119
- </span> <span class='comment'># @api public
3120
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_route_request'>route_request</span><span class='lparen'>(</span><span class='id identifier rubyid_connection'>connection</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span><span class='rparen'>)</span>
3121
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>404 Not Found: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_path'>path</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3122
- <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_respond'>respond</span> <span class='symbol'>:not_found</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Not found</span><span class='tstring_end'>&#39;</span></span>
3123
- <span class='kw'>end</span>
3124
-
3125
- <span class='comment'># If the socket url matches with the one accepted by the server, it will dispatch the socket connection to a new reactor {CelluloidPubsub::Reactor#work}
3126
- </span> <span class='comment'># The new actor is linked to the webserver
3127
- </span> <span class='comment'>#
3128
- </span> <span class='comment'># @see CelluloidPubsub::Reactor#work
3129
- </span> <span class='comment'>#
3130
- </span> <span class='comment'># @param [Reel::WebSocket] socket The web socket connection that was received
3131
- </span> <span class='comment'>#
3132
- </span> <span class='comment'># @return [void]
3133
- </span> <span class='comment'>#
3134
- </span> <span class='comment'># @api public
3135
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_route_websocket'>route_websocket</span><span class='lparen'>(</span><span class='id identifier rubyid_socket'>socket</span><span class='rparen'>)</span>
3136
- <span class='kw'>if</span> <span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_url'>url</span> <span class='op'>==</span> <span class='ivar'>@path</span>
3137
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Reactor handles new socket connection</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3138
- <span class='id identifier rubyid_reactor'>reactor</span> <span class='op'>=</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>Reactor</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
3139
- <span class='const'>Actor</span><span class='period'>.</span><span class='id identifier rubyid_current'>current</span><span class='period'>.</span><span class='id identifier rubyid_link'>link</span> <span class='id identifier rubyid_reactor'>reactor</span>
3140
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_async'>async</span><span class='period'>.</span><span class='id identifier rubyid_work'>work</span><span class='lparen'>(</span><span class='id identifier rubyid_socket'>socket</span><span class='comma'>,</span> <span class='const'>Actor</span><span class='period'>.</span><span class='id identifier rubyid_current'>current</span><span class='rparen'>)</span>
3141
- <span class='kw'>else</span>
3142
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Received invalid WebSocket request for: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_url'>url</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3143
- <span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_close'>close</span>
3144
- <span class='kw'>end</span>
3145
- <span class='kw'>end</span>
3146
-
3147
- <span class='comment'># If the message can be parsed into a Hash it will respond to the reactor&#39;s websocket connection with the same message in JSON format
3148
- </span> <span class='comment'># otherwise will try send the message how it is and escaped into JSON format
3149
- </span> <span class='comment'>#
3150
- </span> <span class='comment'># @param [CelluloidPubsub::Reactor] reactor The reactor that received an unhandled message
3151
- </span> <span class='comment'># @param [Object] data The message that the reactor could not handle
3152
- </span> <span class='comment'>#
3153
- </span> <span class='comment'># @return [void]
3154
- </span> <span class='comment'>#
3155
- </span> <span class='comment'># @api public
3156
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_handle_dispatched_message'>handle_dispatched_message</span><span class='lparen'>(</span><span class='id identifier rubyid_reactor'>reactor</span><span class='comma'>,</span> <span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
3157
- <span class='id identifier rubyid_debug'>debug</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Webserver trying to dispatch message </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3158
- <span class='id identifier rubyid_message'>message</span> <span class='op'>=</span> <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_parse_json_data'>parse_json_data</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
3159
- <span class='kw'>if</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
3160
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_to_json'>to_json</span>
3161
- <span class='kw'>else</span>
3162
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_to_json'>to_json</span>
3163
- <span class='kw'>end</span>
3164
- <span class='kw'>end</span>
3165
- <span class='kw'>end</span></pre>
3166
- </td>
3167
- </tr>
3168
- </table>
3169
- </div>
3170
-
3171
-
3172
- <span id="subscribers=-instance_method"></span>
3173
- <div class="method_details ">
3174
- <h3 class="signature " id="subscribers-instance_method">
3175
-
3176
- - (<tt>Hash</tt>) <strong>subscribers</strong>
3177
-
3178
-
3179
-
3180
-
3181
-
3182
- </h3><div class="docstring">
3183
- <div class="discussion">
3184
-
3185
- <p>Returns The hostname on which the webserver runs on</p>
3186
-
3187
-
3188
- </div>
3189
- </div>
3190
- <div class="tags">
3191
-
3192
- <p class="tag_title">Returns:</p>
3193
- <ul class="return">
3194
-
3195
- <li>
3196
-
3197
-
3198
- <span class='type'>(<tt>Hash</tt>)</span>
3199
-
3200
-
3201
-
3202
- &mdash;
3203
- <div class='inline'>
3204
- <p>The hostname on which the webserver runs on</p>
3205
- </div>
3206
-
3207
- </li>
3208
-
3209
- </ul>
3210
-
3211
- </div><table class="source_code">
3212
- <tr>
3213
- <td>
3214
- <pre class="lines">
3215
-
3216
-
3217
- 31
3218
- 32
3219
- 33
3220
- 34
3221
- 35
3222
- 36
3223
- 37
3224
- 38
3225
- 39
3226
- 40
3227
- 41
3228
- 42
3229
- 43
3230
- 44
3231
- 45
3232
- 46
3233
- 47
3234
- 48
3235
- 49
3236
- 50
3237
- 51
3238
- 52
3239
- 53
3240
- 54
3241
- 55
3242
- 56
3243
- 57
3244
- 58
3245
- 59
3246
- 60
3247
- 61
3248
- 62
3249
- 63
3250
- 64
3251
- 65
3252
- 66
3253
- 67
3254
- 68
3255
- 69
3256
- 70
3257
- 71
3258
- 72
3259
- 73
3260
- 74
3261
- 75
3262
- 76
3263
- 77
3264
- 78
3265
- 79
3266
- 80
3267
- 81
3268
- 82
3269
- 83
3270
- 84
3271
- 85
3272
- 86
3273
- 87
3274
- 88
3275
- 89
3276
- 90
3277
- 91
3278
- 92
3279
- 93
3280
- 94
3281
- 95
3282
- 96
3283
- 97
3284
- 98
3285
- 99
3286
- 100
3287
- 101
3288
- 102
3289
- 103
3290
- 104
3291
- 105
3292
- 106
3293
- 107
3294
- 108
3295
- 109
3296
- 110
3297
- 111
3298
- 112
3299
- 113
3300
- 114
3301
- 115
3302
- 116
3303
- 117
3304
- 118
3305
- 119
3306
- 120
3307
- 121
3308
- 122
3309
- 123
3310
- 124
3311
- 125
3312
- 126
3313
- 127
3314
- 128
3315
- 129
3316
- 130
3317
- 131
3318
- 132
3319
- 133
3320
- 134
3321
- 135
3322
- 136
3323
- 137
3324
- 138
3325
- 139
3326
- 140
3327
- 141
3328
- 142
3329
- 143
3330
- 144
3331
- 145
3332
- 146
3333
- 147
3334
- 148
3335
- 149
3336
- 150
3337
- 151
3338
- 152
3339
- 153
3340
- 154
3341
- 155
3342
- 156
3343
- 157
3344
- 158
3345
- 159
3346
- 160
3347
- 161
3348
- 162
3349
- 163
3350
- 164
3351
- 165
3352
- 166
3353
- 167
3354
- 168
3355
- 169
3356
- 170
3357
- 171
3358
- 172
3359
- 173
3360
- 174
3361
- 175
3362
- 176
3363
- 177
3364
- 178
3365
- 179
3366
- 180
3367
- 181
3368
- 182
3369
- 183
3370
- 184
3371
- 185
3372
- 186
3373
- 187
3374
- 188
3375
- 189
3376
- 190
3377
- 191
3378
- 192
3379
- 193
3380
- 194
3381
- 195
3382
- 196
3383
- 197
3384
- 198
3385
- 199
3386
- 200
3387
- 201
3388
- 202
3389
- 203</pre>
3390
- </td>
3391
- <td>
3392
- <pre class="code"><span class="info file"># File 'lib/celluloid_pubsub/web_server.rb', line 31</span>
3393
-
3394
- <span class='kw'>class</span> <span class='const'>WebServer</span> <span class='op'>&lt;</span> <span class='const'>Reel</span><span class='op'>::</span><span class='const'>Server</span><span class='op'>::</span><span class='const'>HTTP</span>
3395
- <span class='id identifier rubyid_include'>include</span> <span class='const'>Celluloid</span><span class='op'>::</span><span class='const'>Logger</span>
3396
-
3397
- <span class='comment'># The hostname on which the webserver runs on by default
3398
- </span> <span class='const'>HOST</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0.0.0.0</span><span class='tstring_end'>&#39;</span></span>
3399
- <span class='comment'># The port on which the webserver runs on by default
3400
- </span> <span class='const'>PORT</span> <span class='op'>=</span> <span class='int'>1234</span>
3401
- <span class='comment'># The request path that the webserver accepts by default
3402
- </span> <span class='const'>PATH</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/ws</span><span class='tstring_end'>&#39;</span></span>
3403
-
3404
- <span class='id identifier rubyid_attr_accessor'>attr_accessor</span> <span class='symbol'>:options</span><span class='comma'>,</span> <span class='symbol'>:subscribers</span><span class='comma'>,</span> <span class='symbol'>:backlog</span><span class='comma'>,</span> <span class='symbol'>:hostname</span><span class='comma'>,</span> <span class='symbol'>:port</span><span class='comma'>,</span> <span class='symbol'>:path</span><span class='comma'>,</span> <span class='symbol'>:spy</span>
3405
-
3406
- <span class='comment'># receives a list of options that are used to configure the webserver
3407
- </span> <span class='comment'>#
3408
- </span> <span class='comment'># @param [Hash] options the options that can be used to connect to webser and send additional data
3409
- </span> <span class='comment'># @option options [String]:hostname The hostname on which the webserver runs on
3410
- </span> <span class='comment'># @option options [Integer] :port The port on which the webserver runs on
3411
- </span> <span class='comment'># @option options [String] :path The request path that the webserver accepts
3412
- </span> <span class='comment'># @option options [Boolean] :spy Enable this only if you want to enable debugging for the webserver
3413
- </span> <span class='comment'>#
3414
- </span> <span class='comment'># @return [void]
3415
- </span> <span class='comment'>#
3416
- </span> <span class='comment'># @api public
3417
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
3418
- <span class='id identifier rubyid_parse_options'>parse_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
3419
- <span class='ivar'>@subscribers</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
3420
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>CelluloidPubsub::WebServer example starting on </span><span class='embexpr_beg'>#{</span><span class='ivar'>@hostname</span><span class='embexpr_end'>}</span><span class='tstring_content'>:</span><span class='embexpr_beg'>#{</span><span class='ivar'>@port</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3421
- <span class='kw'>super</span><span class='lparen'>(</span><span class='ivar'>@hostname</span><span class='comma'>,</span> <span class='ivar'>@port</span><span class='comma'>,</span> <span class='lbrace'>{</span> <span class='label'>spy:</span> <span class='ivar'>@spy</span><span class='comma'>,</span> <span class='label'>backlog:</span> <span class='ivar'>@backlog</span> <span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_method'>method</span><span class='lparen'>(</span><span class='symbol'>:on_connection</span><span class='rparen'>)</span><span class='rparen'>)</span>
3422
- <span class='kw'>end</span>
3423
-
3424
- <span class='comment'># receives a list of options that are used to configure the webserver
3425
- </span> <span class='comment'>#
3426
- </span> <span class='comment'># @param [Hash] options the options that can be used to connect to webser and send additional data
3427
- </span> <span class='comment'># @option options [String]:hostname The hostname on which the webserver runs on
3428
- </span> <span class='comment'># @option options [Integer] :port The port on which the webserver runs on
3429
- </span> <span class='comment'># @option options [String] :path The request path that the webserver accepts
3430
- </span> <span class='comment'># @option options [Boolean] :spy Enable this only if you want to enable debugging for the webserver
3431
- </span> <span class='comment'># @option options [Integer]:backlog How many connections the server accepts
3432
- </span> <span class='comment'>#
3433
- </span> <span class='comment'># @return [void]
3434
- </span> <span class='comment'>#
3435
- </span> <span class='comment'># @api public
3436
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_parse_options'>parse_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
3437
- <span class='id identifier rubyid_raise'>raise</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Options is not a hash </span><span class='tstring_end'>&#39;</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
3438
- <span class='ivar'>@options</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_stringify_keys'>stringify_keys</span>
3439
- <span class='ivar'>@backlog</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:backlog</span><span class='comma'>,</span> <span class='int'>1024</span><span class='rparen'>)</span>
3440
- <span class='ivar'>@hostname</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:hostname</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>HOST</span><span class='rparen'>)</span>
3441
- <span class='ivar'>@port</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:port</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>PORT</span><span class='rparen'>)</span>
3442
- <span class='ivar'>@path</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:path</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>PATH</span><span class='rparen'>)</span>
3443
- <span class='ivar'>@spy</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:spy</span><span class='comma'>,</span> <span class='kw'>false</span><span class='rparen'>)</span>
3444
- <span class='kw'>end</span>
3445
-
3446
- <span class='comment'># checks if debug is enabled
3447
- </span> <span class='comment'>#
3448
- </span> <span class='comment'># @return [boolean]
3449
- </span> <span class='comment'>#
3450
- </span> <span class='comment'># @api public
3451
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3452
- <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3453
- <span class='kw'>end</span>
3454
-
3455
- <span class='comment'># checks if debug is enabled
3456
- </span> <span class='comment'>#
3457
- </span> <span class='comment'># @return [boolean]
3458
- </span> <span class='comment'>#
3459
- </span> <span class='comment'># @api public
3460
- </span> <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3461
- <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&amp;&amp;</span> <span class='lparen'>(</span><span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>true</span><span class='tstring_end'>&#39;</span></span> <span class='op'>||</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='kw'>true</span><span class='rparen'>)</span>
3462
- <span class='kw'>end</span>
3463
-
3464
- <span class='comment'># checks if debug is enabled
3465
- </span> <span class='comment'>#
3466
- </span> <span class='comment'># @param [String] current_topic The Channel to which the reactor instance {CelluloidPubsub::Rector} will publish the message to
3467
- </span> <span class='comment'># @param [Object] message
3468
- </span> <span class='comment'>#
3469
- </span> <span class='comment'># @return [void]
3470
- </span> <span class='comment'>#
3471
- </span> <span class='comment'># @api public
3472
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_publish_event'>publish_event</span><span class='lparen'>(</span><span class='id identifier rubyid_current_topic'>current_topic</span><span class='comma'>,</span> <span class='id identifier rubyid_message'>message</span><span class='rparen'>)</span>
3473
- <span class='kw'>return</span> <span class='kw'>if</span> <span class='id identifier rubyid_current_topic'>current_topic</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span> <span class='op'>||</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span>
3474
- <span class='ivar'>@subscribers</span><span class='lbracket'>[</span><span class='id identifier rubyid_current_topic'>current_topic</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_hash'>hash</span><span class='op'>|</span>
3475
- <span class='id identifier rubyid_hash'>hash</span><span class='lbracket'>[</span><span class='symbol'>:reactor</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_message'>message</span>
3476
- <span class='kw'>end</span>
3477
- <span class='kw'>end</span>
3478
-
3479
- <span class='comment'># callback that will execute when receiving new conections
3480
- </span> <span class='comment'># If the connections is a websocket will call method {#route_websocket}
3481
- </span> <span class='comment'># and if the connection is HTTP will call method {#route_request}
3482
- </span> <span class='comment'># For websocket connections , the connection is detached from the server and dispatched to another actor
3483
- </span> <span class='comment'>#
3484
- </span> <span class='comment'># @see #route_websocket
3485
- </span> <span class='comment'># @see #route_request
3486
- </span> <span class='comment'>#
3487
- </span> <span class='comment'># @param [Reel::WebSocket] connection The connection that was made to the webserver
3488
- </span> <span class='comment'>#
3489
- </span> <span class='comment'># @return [void]
3490
- </span> <span class='comment'>#
3491
- </span> <span class='comment'># @api public
3492
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_on_connection'>on_connection</span><span class='lparen'>(</span><span class='id identifier rubyid_connection'>connection</span><span class='rparen'>)</span>
3493
- <span class='kw'>while</span> <span class='id identifier rubyid_request'>request</span> <span class='op'>=</span> <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_request'>request</span>
3494
- <span class='kw'>if</span> <span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_websocket?'>websocket?</span>
3495
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Received a WebSocket connection</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3496
-
3497
- <span class='comment'># We&#39;re going to hand off this connection to another actor (Writer/Reader)
3498
- </span> <span class='comment'># However, initially Reel::Connections are &quot;attached&quot; to the
3499
- </span> <span class='comment'># Reel::Server::HTTP actor, meaning that the server manages the connection
3500
- </span> <span class='comment'># lifecycle (e.g. error handling) for us.
3501
- </span> <span class='comment'>#
3502
- </span> <span class='comment'># If we want to hand this connection off to another actor, we first
3503
- </span> <span class='comment'># need to detach it from the Reel::Server (in this case, Reel::Server::HTTP)
3504
- </span> <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_detach'>detach</span>
3505
- <span class='id identifier rubyid_route_websocket'>route_websocket</span><span class='lparen'>(</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span><span class='rparen'>)</span>
3506
- <span class='kw'>return</span>
3507
- <span class='kw'>else</span>
3508
- <span class='id identifier rubyid_route_request'>route_request</span> <span class='id identifier rubyid_connection'>connection</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span>
3509
- <span class='kw'>end</span>
3510
- <span class='kw'>end</span>
3511
- <span class='kw'>end</span>
3512
-
3513
- <span class='comment'># HTTP connections are not accepted so this method will show 404 message &quot;Not Found&quot;
3514
- </span> <span class='comment'>#
3515
- </span> <span class='comment'># @param [Reel::WebSocket] connection The HTTP connection that was received
3516
- </span> <span class='comment'># @param [Reel::Request] request The request that was made to the webserver and contains the type , the url, and the parameters
3517
- </span> <span class='comment'>#
3518
- </span> <span class='comment'># @return [void]
3519
- </span> <span class='comment'>#
3520
- </span> <span class='comment'># @api public
3521
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_route_request'>route_request</span><span class='lparen'>(</span><span class='id identifier rubyid_connection'>connection</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span><span class='rparen'>)</span>
3522
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>404 Not Found: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_path'>path</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3523
- <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_respond'>respond</span> <span class='symbol'>:not_found</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Not found</span><span class='tstring_end'>&#39;</span></span>
3524
- <span class='kw'>end</span>
3525
-
3526
- <span class='comment'># If the socket url matches with the one accepted by the server, it will dispatch the socket connection to a new reactor {CelluloidPubsub::Reactor#work}
3527
- </span> <span class='comment'># The new actor is linked to the webserver
3528
- </span> <span class='comment'>#
3529
- </span> <span class='comment'># @see CelluloidPubsub::Reactor#work
3530
- </span> <span class='comment'>#
3531
- </span> <span class='comment'># @param [Reel::WebSocket] socket The web socket connection that was received
3532
- </span> <span class='comment'>#
3533
- </span> <span class='comment'># @return [void]
3534
- </span> <span class='comment'>#
3535
- </span> <span class='comment'># @api public
3536
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_route_websocket'>route_websocket</span><span class='lparen'>(</span><span class='id identifier rubyid_socket'>socket</span><span class='rparen'>)</span>
3537
- <span class='kw'>if</span> <span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_url'>url</span> <span class='op'>==</span> <span class='ivar'>@path</span>
3538
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Reactor handles new socket connection</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3539
- <span class='id identifier rubyid_reactor'>reactor</span> <span class='op'>=</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>Reactor</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
3540
- <span class='const'>Actor</span><span class='period'>.</span><span class='id identifier rubyid_current'>current</span><span class='period'>.</span><span class='id identifier rubyid_link'>link</span> <span class='id identifier rubyid_reactor'>reactor</span>
3541
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_async'>async</span><span class='period'>.</span><span class='id identifier rubyid_work'>work</span><span class='lparen'>(</span><span class='id identifier rubyid_socket'>socket</span><span class='comma'>,</span> <span class='const'>Actor</span><span class='period'>.</span><span class='id identifier rubyid_current'>current</span><span class='rparen'>)</span>
3542
- <span class='kw'>else</span>
3543
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Received invalid WebSocket request for: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_url'>url</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3544
- <span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_close'>close</span>
3545
- <span class='kw'>end</span>
3546
- <span class='kw'>end</span>
3547
-
3548
- <span class='comment'># If the message can be parsed into a Hash it will respond to the reactor&#39;s websocket connection with the same message in JSON format
3549
- </span> <span class='comment'># otherwise will try send the message how it is and escaped into JSON format
3550
- </span> <span class='comment'>#
3551
- </span> <span class='comment'># @param [CelluloidPubsub::Reactor] reactor The reactor that received an unhandled message
3552
- </span> <span class='comment'># @param [Object] data The message that the reactor could not handle
3553
- </span> <span class='comment'>#
3554
- </span> <span class='comment'># @return [void]
3555
- </span> <span class='comment'>#
3556
- </span> <span class='comment'># @api public
3557
- </span> <span class='kw'>def</span> <span class='id identifier rubyid_handle_dispatched_message'>handle_dispatched_message</span><span class='lparen'>(</span><span class='id identifier rubyid_reactor'>reactor</span><span class='comma'>,</span> <span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
3558
- <span class='id identifier rubyid_debug'>debug</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Webserver trying to dispatch message </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3559
- <span class='id identifier rubyid_message'>message</span> <span class='op'>=</span> <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_parse_json_data'>parse_json_data</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
3560
- <span class='kw'>if</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
3561
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_to_json'>to_json</span>
3562
- <span class='kw'>else</span>
3563
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_to_json'>to_json</span>
3564
- <span class='kw'>end</span>
3565
- <span class='kw'>end</span>
3566
- <span class='kw'>end</span></pre>
3567
- </td>
3568
- </tr>
3569
- </table>
3570
- </div>
3571
-
3572
- </div>
3573
-
3574
-
3575
- <div id="class_method_details" class="method_details_list">
3576
- <h2>Class Method Details</h2>
3577
-
3578
-
3579
- <div class="method_details first">
3580
- <h3 class="signature first" id="debug_enabled?-class_method">
3581
-
3582
- + (<tt>boolean</tt>) <strong>debug_enabled?</strong>
3583
-
3584
-
3585
-
3586
-
3587
-
3588
- </h3><div class="docstring">
3589
- <div class="discussion">
3590
-
3591
- <p>checks if debug is enabled</p>
3592
-
3593
-
3594
- </div>
3595
- </div>
3596
- <div class="tags">
3597
-
3598
- <p class="tag_title">Returns:</p>
3599
- <ul class="return">
3600
-
3601
- <li>
3602
-
3603
-
3604
- <span class='type'>(<tt>boolean</tt>)</span>
3605
-
3606
-
3607
-
3608
- </li>
3609
-
3610
- </ul>
3611
-
3612
- </div><table class="source_code">
3613
- <tr>
3614
- <td>
3615
- <pre class="lines">
3616
-
3617
-
3618
- 97
3619
- 98
3620
- 99</pre>
3621
- </td>
3622
- <td>
3623
- <pre class="code"><span class="info file"># File 'lib/celluloid_pubsub/web_server.rb', line 97</span>
3624
-
3625
- <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3626
- <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&amp;&amp;</span> <span class='lparen'>(</span><span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>true</span><span class='tstring_end'>&#39;</span></span> <span class='op'>||</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='kw'>true</span><span class='rparen'>)</span>
3627
- <span class='kw'>end</span></pre>
3628
- </td>
3629
- </tr>
3630
- </table>
3631
- </div>
3632
-
3633
- </div>
3634
-
3635
- <div id="instance_method_details" class="method_details_list">
3636
- <h2>Instance Method Details</h2>
3637
-
3638
-
3639
- <div class="method_details first">
3640
- <h3 class="signature first" id="debug_enabled?-instance_method">
3641
-
3642
- - (<tt>boolean</tt>) <strong>debug_enabled?</strong>
3643
-
3644
-
3645
-
3646
-
3647
-
3648
- </h3><div class="docstring">
3649
- <div class="discussion">
3650
-
3651
- <p>checks if debug is enabled</p>
3652
-
3653
-
3654
- </div>
3655
- </div>
3656
- <div class="tags">
3657
-
3658
- <p class="tag_title">Returns:</p>
3659
- <ul class="return">
3660
-
3661
- <li>
3662
-
3663
-
3664
- <span class='type'>(<tt>boolean</tt>)</span>
3665
-
3666
-
3667
-
3668
- </li>
3669
-
3670
- </ul>
3671
-
3672
- </div><table class="source_code">
3673
- <tr>
3674
- <td>
3675
- <pre class="lines">
3676
-
3677
-
3678
- 88
3679
- 89
3680
- 90</pre>
3681
- </td>
3682
- <td>
3683
- <pre class="code"><span class="info file"># File 'lib/celluloid_pubsub/web_server.rb', line 88</span>
3684
-
3685
- <span class='kw'>def</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3686
- <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3687
- <span class='kw'>end</span></pre>
3688
- </td>
3689
- </tr>
3690
- </table>
3691
- </div>
3692
-
3693
- <div class="method_details ">
3694
- <h3 class="signature " id="handle_dispatched_message-instance_method">
3695
-
3696
- - (<tt>void</tt>) <strong>handle_dispatched_message</strong>(reactor, data)
3697
-
3698
-
3699
-
3700
-
3701
-
3702
- </h3><div class="docstring">
3703
- <div class="discussion">
3704
- <p class="note returns_void">This method returns an undefined value.</p>
3705
- <p>If the message can be parsed into a Hash it will respond to the
3706
- reactor&#39;s websocket connection with the same message in JSON format
3707
- otherwise will try send the message how it is and escaped into JSON format</p>
3708
-
3709
-
3710
- </div>
3711
- </div>
3712
- <div class="tags">
3713
- <p class="tag_title">Parameters:</p>
3714
- <ul class="param">
3715
-
3716
- <li>
3717
-
3718
- <span class='name'>reactor</span>
3719
-
3720
-
3721
- <span class='type'>(<tt><span class='object_link'><a href="Reactor.html" title="CelluloidPubsub::Reactor (class)">CelluloidPubsub::Reactor</a></span></tt>)</span>
3722
-
3723
-
3724
-
3725
- &mdash;
3726
- <div class='inline'>
3727
- <p>The reactor that received an unhandled message</p>
3728
- </div>
3729
-
3730
- </li>
3731
-
3732
- <li>
3733
-
3734
- <span class='name'>data</span>
3735
-
3736
-
3737
- <span class='type'>(<tt>Object</tt>)</span>
3738
-
3739
-
3740
-
3741
- &mdash;
3742
- <div class='inline'>
3743
- <p>The message that the reactor could not handle</p>
3744
- </div>
3745
-
3746
- </li>
3747
-
3748
- </ul>
3749
-
3750
-
3751
- </div><table class="source_code">
3752
- <tr>
3753
- <td>
3754
- <pre class="lines">
3755
-
3756
-
3757
- 194
3758
- 195
3759
- 196
3760
- 197
3761
- 198
3762
- 199
3763
- 200
3764
- 201
3765
- 202</pre>
3766
- </td>
3767
- <td>
3768
- <pre class="code"><span class="info file"># File 'lib/celluloid_pubsub/web_server.rb', line 194</span>
3769
-
3770
- <span class='kw'>def</span> <span class='id identifier rubyid_handle_dispatched_message'>handle_dispatched_message</span><span class='lparen'>(</span><span class='id identifier rubyid_reactor'>reactor</span><span class='comma'>,</span> <span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
3771
- <span class='id identifier rubyid_debug'>debug</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Webserver trying to dispatch message </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_inspect'>inspect</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3772
- <span class='id identifier rubyid_message'>message</span> <span class='op'>=</span> <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_parse_json_data'>parse_json_data</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
3773
- <span class='kw'>if</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
3774
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_to_json'>to_json</span>
3775
- <span class='kw'>else</span>
3776
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_to_json'>to_json</span>
3777
- <span class='kw'>end</span>
3778
- <span class='kw'>end</span></pre>
3779
- </td>
3780
- </tr>
3781
- </table>
3782
- </div>
3783
-
3784
- <div class="method_details ">
3785
- <h3 class="signature " id="on_connection-instance_method">
3786
-
3787
- - (<tt>void</tt>) <strong>on_connection</strong>(connection)
3788
-
3789
-
3790
-
3791
-
3792
-
3793
- </h3><div class="docstring">
3794
- <div class="discussion">
3795
- <p class="note returns_void">This method returns an undefined value.</p>
3796
- <p>callback that will execute when receiving new conections If the connections
3797
- is a websocket will call method <span class='object_link'><a href="#route_websocket-instance_method" title="CelluloidPubsub::WebServer#route_websocket (method)">#route_websocket</a></span> and if the connection is
3798
- HTTP will call method <span class='object_link'><a href="#route_request-instance_method" title="CelluloidPubsub::WebServer#route_request (method)">#route_request</a></span> For websocket connections , the
3799
- connection is detached from the server and dispatched to another actor</p>
3800
-
3801
-
3802
- </div>
3803
- </div>
3804
- <div class="tags">
3805
- <p class="tag_title">Parameters:</p>
3806
- <ul class="param">
3807
-
3808
- <li>
3809
-
3810
- <span class='name'>connection</span>
3811
-
3812
-
3813
- <span class='type'>(<tt>Reel::WebSocket</tt>)</span>
3814
-
3815
-
3816
-
3817
- &mdash;
3818
- <div class='inline'>
3819
- <p>The connection that was made to the webserver</p>
3820
- </div>
3821
-
3822
- </li>
3823
-
3824
- </ul>
3825
-
3826
-
3827
- <p class="tag_title">See Also:</p>
3828
- <ul class="see">
3829
-
3830
- <li><span class='object_link'><a href="#route_websocket-instance_method" title="CelluloidPubsub::WebServer#route_websocket (method)">#route_websocket</a></span></li>
3831
-
3832
- <li><span class='object_link'><a href="#route_request-instance_method" title="CelluloidPubsub::WebServer#route_request (method)">#route_request</a></span></li>
3833
-
3834
- </ul>
3835
-
3836
- </div><table class="source_code">
3837
- <tr>
3838
- <td>
3839
- <pre class="lines">
3840
-
3841
-
3842
- 129
3843
- 130
3844
- 131
3845
- 132
3846
- 133
3847
- 134
3848
- 135
3849
- 136
3850
- 137
3851
- 138
3852
- 139
3853
- 140
3854
- 141
3855
- 142
3856
- 143
3857
- 144
3858
- 145
3859
- 146
3860
- 147
3861
- 148</pre>
3862
- </td>
3863
- <td>
3864
- <pre class="code"><span class="info file"># File 'lib/celluloid_pubsub/web_server.rb', line 129</span>
3865
-
3866
- <span class='kw'>def</span> <span class='id identifier rubyid_on_connection'>on_connection</span><span class='lparen'>(</span><span class='id identifier rubyid_connection'>connection</span><span class='rparen'>)</span>
3867
- <span class='kw'>while</span> <span class='id identifier rubyid_request'>request</span> <span class='op'>=</span> <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_request'>request</span>
3868
- <span class='kw'>if</span> <span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_websocket?'>websocket?</span>
3869
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Received a WebSocket connection</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
3870
-
3871
- <span class='comment'># We&#39;re going to hand off this connection to another actor (Writer/Reader)
3872
- </span> <span class='comment'># However, initially Reel::Connections are &quot;attached&quot; to the
3873
- </span> <span class='comment'># Reel::Server::HTTP actor, meaning that the server manages the connection
3874
- </span> <span class='comment'># lifecycle (e.g. error handling) for us.
3875
- </span> <span class='comment'>#
3876
- </span> <span class='comment'># If we want to hand this connection off to another actor, we first
3877
- </span> <span class='comment'># need to detach it from the Reel::Server (in this case, Reel::Server::HTTP)
3878
- </span> <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_detach'>detach</span>
3879
- <span class='id identifier rubyid_route_websocket'>route_websocket</span><span class='lparen'>(</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span><span class='rparen'>)</span>
3880
- <span class='kw'>return</span>
3881
- <span class='kw'>else</span>
3882
- <span class='id identifier rubyid_route_request'>route_request</span> <span class='id identifier rubyid_connection'>connection</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span>
3883
- <span class='kw'>end</span>
3884
- <span class='kw'>end</span>
3885
- <span class='kw'>end</span></pre>
3886
- </td>
3887
- </tr>
3888
- </table>
3889
- </div>
3890
-
3891
- <div class="method_details ">
3892
- <h3 class="signature " id="parse_options-instance_method">
3893
-
3894
- - (<tt>void</tt>) <strong>parse_options</strong>(options)
3895
-
3896
-
3897
-
3898
-
3899
-
3900
- </h3><div class="docstring">
3901
- <div class="discussion">
3902
- <p class="note returns_void">This method returns an undefined value.</p>
3903
- <p>receives a list of options that are used to configure the webserver</p>
3904
-
3905
-
3906
- </div>
3907
- </div>
3908
- <div class="tags">
3909
- <p class="tag_title">Parameters:</p>
3910
- <ul class="param">
3911
-
3912
- <li>
3913
-
3914
- <span class='name'>options</span>
3915
-
3916
-
3917
- <span class='type'>(<tt>Hash</tt>)</span>
3918
-
3919
-
3920
-
3921
- &mdash;
3922
- <div class='inline'>
3923
- <p>the options that can be used to connect to webser and send additional data</p>
3924
- </div>
3925
-
3926
- </li>
3927
-
3928
- </ul>
3929
-
3930
-
3931
-
3932
-
3933
- <p class="tag_title">Options Hash (<tt>options</tt>):</p>
3934
- <ul class="option">
3935
-
3936
- <li>
3937
- <span class="name">:hostname</span>
3938
- <span class="type">(<tt>String</tt>)</span>
3939
- <span class="default">
3940
-
3941
- </span>
3942
-
3943
- &mdash; <div class='inline'>
3944
- <p>The hostname on which the webserver runs on</p>
3945
- </div>
3946
-
3947
- </li>
3948
-
3949
- <li>
3950
- <span class="name">:port</span>
3951
- <span class="type">(<tt>Integer</tt>)</span>
3952
- <span class="default">
3953
-
3954
- </span>
3955
-
3956
- &mdash; <div class='inline'>
3957
- <p>The port on which the webserver runs on</p>
3958
- </div>
3959
-
3960
- </li>
3961
-
3962
- <li>
3963
- <span class="name">:path</span>
3964
- <span class="type">(<tt>String</tt>)</span>
3965
- <span class="default">
3966
-
3967
- </span>
3968
-
3969
- &mdash; <div class='inline'>
3970
- <p>The request path that the webserver accepts</p>
3971
- </div>
3972
-
3973
- </li>
3974
-
3975
- <li>
3976
- <span class="name">:spy</span>
3977
- <span class="type">(<tt>Boolean</tt>)</span>
3978
- <span class="default">
3979
-
3980
- </span>
3981
-
3982
- &mdash; <div class='inline'>
3983
- <p>Enable this only if you want to enable debugging for the webserver</p>
3984
- </div>
3985
-
3986
- </li>
3987
-
3988
- <li>
3989
- <span class="name">:backlog</span>
3990
- <span class="type">(<tt>Integer</tt>)</span>
3991
- <span class="default">
3992
-
3993
- </span>
3994
-
3995
- &mdash; <div class='inline'>
3996
- <p>How many connections the server accepts</p>
3997
- </div>
3998
-
3999
- </li>
4000
-
4001
- </ul>
4002
-
4003
-
4004
-
4005
- </div><table class="source_code">
4006
- <tr>
4007
- <td>
4008
- <pre class="lines">
4009
-
4010
-
4011
- 73
4012
- 74
4013
- 75
4014
- 76
4015
- 77
4016
- 78
4017
- 79
4018
- 80
4019
- 81</pre>
4020
- </td>
4021
- <td>
4022
- <pre class="code"><span class="info file"># File 'lib/celluloid_pubsub/web_server.rb', line 73</span>
4023
-
4024
- <span class='kw'>def</span> <span class='id identifier rubyid_parse_options'>parse_options</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span><span class='rparen'>)</span>
4025
- <span class='id identifier rubyid_raise'>raise</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Options is not a hash </span><span class='tstring_end'>&#39;</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
4026
- <span class='ivar'>@options</span> <span class='op'>=</span> <span class='id identifier rubyid_options'>options</span><span class='period'>.</span><span class='id identifier rubyid_stringify_keys'>stringify_keys</span>
4027
- <span class='ivar'>@backlog</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:backlog</span><span class='comma'>,</span> <span class='int'>1024</span><span class='rparen'>)</span>
4028
- <span class='ivar'>@hostname</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:hostname</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>HOST</span><span class='rparen'>)</span>
4029
- <span class='ivar'>@port</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:port</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>PORT</span><span class='rparen'>)</span>
4030
- <span class='ivar'>@path</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:path</span><span class='comma'>,</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>WebServer</span><span class='op'>::</span><span class='const'>PATH</span><span class='rparen'>)</span>
4031
- <span class='ivar'>@spy</span> <span class='op'>=</span> <span class='ivar'>@options</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='symbol'>:spy</span><span class='comma'>,</span> <span class='kw'>false</span><span class='rparen'>)</span>
4032
- <span class='kw'>end</span></pre>
4033
- </td>
4034
- </tr>
4035
- </table>
4036
- </div>
4037
-
4038
- <div class="method_details ">
4039
- <h3 class="signature " id="publish_event-instance_method">
4040
-
4041
- - (<tt>void</tt>) <strong>publish_event</strong>(current_topic, message)
4042
-
4043
-
4044
-
4045
-
4046
-
4047
- </h3><div class="docstring">
4048
- <div class="discussion">
4049
- <p class="note returns_void">This method returns an undefined value.</p>
4050
- <p>checks if debug is enabled</p>
4051
-
4052
-
4053
- </div>
4054
- </div>
4055
- <div class="tags">
4056
- <p class="tag_title">Parameters:</p>
4057
- <ul class="param">
4058
-
4059
- <li>
4060
-
4061
- <span class='name'>current_topic</span>
4062
-
4063
-
4064
- <span class='type'>(<tt>String</tt>)</span>
4065
-
4066
-
4067
-
4068
- &mdash;
4069
- <div class='inline'>
4070
- <p>The Channel to which the reactor instance Rector will
4071
- publish the message to</p>
4072
- </div>
4073
-
4074
- </li>
4075
-
4076
- <li>
4077
-
4078
- <span class='name'>message</span>
4079
-
4080
-
4081
- <span class='type'>(<tt>Object</tt>)</span>
4082
-
4083
-
4084
-
4085
- </li>
4086
-
4087
- </ul>
4088
-
4089
-
4090
- </div><table class="source_code">
4091
- <tr>
4092
- <td>
4093
- <pre class="lines">
4094
-
4095
-
4096
- 109
4097
- 110
4098
- 111
4099
- 112
4100
- 113
4101
- 114</pre>
4102
- </td>
4103
- <td>
4104
- <pre class="code"><span class="info file"># File 'lib/celluloid_pubsub/web_server.rb', line 109</span>
4105
-
4106
- <span class='kw'>def</span> <span class='id identifier rubyid_publish_event'>publish_event</span><span class='lparen'>(</span><span class='id identifier rubyid_current_topic'>current_topic</span><span class='comma'>,</span> <span class='id identifier rubyid_message'>message</span><span class='rparen'>)</span>
4107
- <span class='kw'>return</span> <span class='kw'>if</span> <span class='id identifier rubyid_current_topic'>current_topic</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span> <span class='op'>||</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span>
4108
- <span class='ivar'>@subscribers</span><span class='lbracket'>[</span><span class='id identifier rubyid_current_topic'>current_topic</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_hash'>hash</span><span class='op'>|</span>
4109
- <span class='id identifier rubyid_hash'>hash</span><span class='lbracket'>[</span><span class='symbol'>:reactor</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_websocket'>websocket</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_message'>message</span>
4110
- <span class='kw'>end</span>
4111
- <span class='kw'>end</span></pre>
4112
- </td>
4113
- </tr>
4114
- </table>
4115
- </div>
4116
-
4117
- <div class="method_details ">
4118
- <h3 class="signature " id="route_request-instance_method">
4119
-
4120
- - (<tt>void</tt>) <strong>route_request</strong>(connection, request)
4121
-
4122
-
4123
-
4124
-
4125
-
4126
- </h3><div class="docstring">
4127
- <div class="discussion">
4128
- <p class="note returns_void">This method returns an undefined value.</p>
4129
- <p>HTTP connections are not accepted so this method will show 404 message “Not
4130
- Found”</p>
4131
-
4132
-
4133
- </div>
4134
- </div>
4135
- <div class="tags">
4136
- <p class="tag_title">Parameters:</p>
4137
- <ul class="param">
4138
-
4139
- <li>
4140
-
4141
- <span class='name'>connection</span>
4142
-
4143
-
4144
- <span class='type'>(<tt>Reel::WebSocket</tt>)</span>
4145
-
4146
-
4147
-
4148
- &mdash;
4149
- <div class='inline'>
4150
- <p>The HTTP connection that was received</p>
4151
- </div>
4152
-
4153
- </li>
4154
-
4155
- <li>
4156
-
4157
- <span class='name'>request</span>
4158
-
4159
-
4160
- <span class='type'>(<tt>Reel::Request</tt>)</span>
4161
-
4162
-
4163
-
4164
- &mdash;
4165
- <div class='inline'>
4166
- <p>The request that was made to the webserver and contains the type , the url,
4167
- and the parameters</p>
4168
- </div>
4169
-
4170
- </li>
4171
-
4172
- </ul>
4173
-
4174
-
4175
- </div><table class="source_code">
4176
- <tr>
4177
- <td>
4178
- <pre class="lines">
4179
-
4180
-
4181
- 158
4182
- 159
4183
- 160
4184
- 161</pre>
4185
- </td>
4186
- <td>
4187
- <pre class="code"><span class="info file"># File 'lib/celluloid_pubsub/web_server.rb', line 158</span>
4188
-
4189
- <span class='kw'>def</span> <span class='id identifier rubyid_route_request'>route_request</span><span class='lparen'>(</span><span class='id identifier rubyid_connection'>connection</span><span class='comma'>,</span> <span class='id identifier rubyid_request'>request</span><span class='rparen'>)</span>
4190
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>404 Not Found: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_request'>request</span><span class='period'>.</span><span class='id identifier rubyid_path'>path</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
4191
- <span class='id identifier rubyid_connection'>connection</span><span class='period'>.</span><span class='id identifier rubyid_respond'>respond</span> <span class='symbol'>:not_found</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Not found</span><span class='tstring_end'>&#39;</span></span>
4192
- <span class='kw'>end</span></pre>
4193
- </td>
4194
- </tr>
4195
- </table>
4196
- </div>
4197
-
4198
- <div class="method_details ">
4199
- <h3 class="signature " id="route_websocket-instance_method">
4200
-
4201
- - (<tt>void</tt>) <strong>route_websocket</strong>(socket)
4202
-
4203
-
4204
-
4205
-
4206
-
4207
- </h3><div class="docstring">
4208
- <div class="discussion">
4209
- <p class="note returns_void">This method returns an undefined value.</p>
4210
- <p>If the socket url matches with the one accepted by the server, it will
4211
- dispatch the socket connection to a new reactor
4212
- <span class='object_link'><a href="Reactor.html#work-instance_method" title="CelluloidPubsub::Reactor#work (method)">Reactor#work</a></span> The new actor is linked to the webserver</p>
4213
-
4214
-
4215
- </div>
4216
- </div>
4217
- <div class="tags">
4218
-
4219
-
4220
- <p class="tag_title">See Also:</p>
4221
- <ul class="see">
4222
-
4223
- <li><span class='object_link'><a href="Reactor.html#work-instance_method" title="CelluloidPubsub::Reactor#work (method)">@param [Reel::WebSocket] socket The web socket connection that was received</a></span></li>
4224
-
4225
- </ul>
4226
-
4227
- </div><table class="source_code">
4228
- <tr>
4229
- <td>
4230
- <pre class="lines">
4231
-
4232
-
4233
- 173
4234
- 174
4235
- 175
4236
- 176
4237
- 177
4238
- 178
4239
- 179
4240
- 180
4241
- 181
4242
- 182
4243
- 183</pre>
4244
- </td>
4245
- <td>
4246
- <pre class="code"><span class="info file"># File 'lib/celluloid_pubsub/web_server.rb', line 173</span>
4247
-
4248
- <span class='kw'>def</span> <span class='id identifier rubyid_route_websocket'>route_websocket</span><span class='lparen'>(</span><span class='id identifier rubyid_socket'>socket</span><span class='rparen'>)</span>
4249
- <span class='kw'>if</span> <span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_url'>url</span> <span class='op'>==</span> <span class='ivar'>@path</span>
4250
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Reactor handles new socket connection</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
4251
- <span class='id identifier rubyid_reactor'>reactor</span> <span class='op'>=</span> <span class='const'>CelluloidPubsub</span><span class='op'>::</span><span class='const'>Reactor</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
4252
- <span class='const'>Actor</span><span class='period'>.</span><span class='id identifier rubyid_current'>current</span><span class='period'>.</span><span class='id identifier rubyid_link'>link</span> <span class='id identifier rubyid_reactor'>reactor</span>
4253
- <span class='id identifier rubyid_reactor'>reactor</span><span class='period'>.</span><span class='id identifier rubyid_async'>async</span><span class='period'>.</span><span class='id identifier rubyid_work'>work</span><span class='lparen'>(</span><span class='id identifier rubyid_socket'>socket</span><span class='comma'>,</span> <span class='const'>Actor</span><span class='period'>.</span><span class='id identifier rubyid_current'>current</span><span class='rparen'>)</span>
4254
- <span class='kw'>else</span>
4255
- <span class='id identifier rubyid_info'>info</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Received invalid WebSocket request for: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_url'>url</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
4256
- <span class='id identifier rubyid_socket'>socket</span><span class='period'>.</span><span class='id identifier rubyid_close'>close</span>
4257
- <span class='kw'>end</span>
4258
- <span class='kw'>end</span></pre>
4259
- </td>
4260
- </tr>
4261
- </table>
4262
- </div>
4263
-
4264
- </div>
4265
-
4266
- </div>
4267
-
4268
- <div id="footer">
4269
- Generated on Fri Mar 13 18:05:42 2015 by
4270
- <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
4271
- 0.8.7.6 (ruby-2.0.0).
4272
- </div>
4273
-
4274
- </body>
4275
- </html>