celluloid_pubsub 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +1 -1
- data/Guardfile +4 -0
- data/Rakefile +12 -1
- data/bin/inch +16 -0
- data/bin/sparkr +16 -0
- data/celluloid_pubsub.gemspec +2 -1
- data/doc/CelluloidPubsub/Client/PubSubWorker.html +3676 -0
- data/doc/CelluloidPubsub/Client.html +340 -0
- data/doc/CelluloidPubsub/Reactor.html +3502 -0
- data/doc/CelluloidPubsub/Registry.html +234 -0
- data/doc/CelluloidPubsub/VERSION.html +204 -0
- data/doc/CelluloidPubsub/WebServer.html +4275 -0
- data/doc/CelluloidPubsub.html +225 -0
- data/doc/_index.html +184 -0
- data/doc/class_list.html +58 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +57 -0
- data/doc/css/style.css +339 -0
- data/doc/file.README.html +226 -0
- data/doc/file_list.html +60 -0
- data/doc/frames.html +26 -0
- data/doc/index.html +226 -0
- data/doc/js/app.js +219 -0
- data/doc/js/full_list.js +181 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +357 -0
- data/doc/top-level-namespace.html +112 -0
- data/examples/simple_test.rb +3 -1
- data/lib/celluloid_pubsub/client_pubsub.rb +117 -0
- data/lib/celluloid_pubsub/reactor.rb +138 -7
- data/lib/celluloid_pubsub/registry.rb +3 -0
- data/lib/celluloid_pubsub/version.rb +15 -2
- data/lib/celluloid_pubsub/web_server.rb +112 -0
- metadata +41 -10
@@ -0,0 +1,4275 @@
|
|
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
|
+
— 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> »
|
35
|
+
<span class='title'><span class='object_link'><a href="../CelluloidPubsub.html" title="CelluloidPubsub (module)">CelluloidPubsub</a></span></span>
|
36
|
+
»
|
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'>'</span><span class='tstring_content'>0.0.0.0</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>/ws</span><span class='tstring_end'>'</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'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
|
+
—
|
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
|
+
— <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
|
+
— <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
|
+
— <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
|
+
— <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'>"</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'>"</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'>&</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
|
+
—
|
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'><</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'>'</span><span class='tstring_content'>0.0.0.0</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>/ws</span><span class='tstring_end'>'</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'>"</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'>"</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'>&</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'>'</span><span class='tstring_content'>Options is not a hash </span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&&</span> <span class='lparen'>(</span><span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>true</span><span class='tstring_end'>'</span></span> <span class='op'>||</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</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'><<</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'>'</span><span class='tstring_content'>Received a WebSocket connection</span><span class='tstring_end'>'</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
|
1088
|
+
|
1089
|
+
<span class='comment'># We're going to hand off this connection to another actor (Writer/Reader)
|
1090
|
+
</span> <span class='comment'># However, initially Reel::Connections are "attached" 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 "Not Found"
|
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'>"</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'>"</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'>'</span><span class='tstring_content'>Not found</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>Reactor handles new socket connection</span><span class='tstring_end'>'</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'>"</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'>"</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'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'>"</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'>"</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'>&&</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'><<</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'><<</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
|
+
—
|
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'><</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'>'</span><span class='tstring_content'>0.0.0.0</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>/ws</span><span class='tstring_end'>'</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'>"</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'>"</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'>&</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'>'</span><span class='tstring_content'>Options is not a hash </span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&&</span> <span class='lparen'>(</span><span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>true</span><span class='tstring_end'>'</span></span> <span class='op'>||</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</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'><<</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'>'</span><span class='tstring_content'>Received a WebSocket connection</span><span class='tstring_end'>'</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
|
1489
|
+
|
1490
|
+
<span class='comment'># We're going to hand off this connection to another actor (Writer/Reader)
|
1491
|
+
</span> <span class='comment'># However, initially Reel::Connections are "attached" 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 "Not Found"
|
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'>"</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'>"</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'>'</span><span class='tstring_content'>Not found</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>Reactor handles new socket connection</span><span class='tstring_end'>'</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'>"</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'>"</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'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'>"</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'>"</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'>&&</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'><<</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'><<</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
|
+
—
|
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'><</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'>'</span><span class='tstring_content'>0.0.0.0</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>/ws</span><span class='tstring_end'>'</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'>"</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'>"</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'>&</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'>'</span><span class='tstring_content'>Options is not a hash </span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&&</span> <span class='lparen'>(</span><span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>true</span><span class='tstring_end'>'</span></span> <span class='op'>||</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</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'><<</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'>'</span><span class='tstring_content'>Received a WebSocket connection</span><span class='tstring_end'>'</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
|
1892
|
+
|
1893
|
+
<span class='comment'># We're going to hand off this connection to another actor (Writer/Reader)
|
1894
|
+
</span> <span class='comment'># However, initially Reel::Connections are "attached" 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 "Not Found"
|
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'>"</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'>"</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'>'</span><span class='tstring_content'>Not found</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>Reactor handles new socket connection</span><span class='tstring_end'>'</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'>"</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'>"</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'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'>"</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'>"</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'>&&</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'><<</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'><<</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
|
+
—
|
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'><</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'>'</span><span class='tstring_content'>0.0.0.0</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>/ws</span><span class='tstring_end'>'</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'>"</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'>"</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'>&</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'>'</span><span class='tstring_content'>Options is not a hash </span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&&</span> <span class='lparen'>(</span><span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>true</span><span class='tstring_end'>'</span></span> <span class='op'>||</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</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'><<</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'>'</span><span class='tstring_content'>Received a WebSocket connection</span><span class='tstring_end'>'</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
|
2293
|
+
|
2294
|
+
<span class='comment'># We're going to hand off this connection to another actor (Writer/Reader)
|
2295
|
+
</span> <span class='comment'># However, initially Reel::Connections are "attached" 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 "Not Found"
|
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'>"</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'>"</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'>'</span><span class='tstring_content'>Not found</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>Reactor handles new socket connection</span><span class='tstring_end'>'</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'>"</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'>"</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'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'>"</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'>"</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'>&&</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'><<</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'><<</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
|
+
—
|
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'><</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'>'</span><span class='tstring_content'>0.0.0.0</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>/ws</span><span class='tstring_end'>'</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'>"</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'>"</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'>&</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'>'</span><span class='tstring_content'>Options is not a hash </span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&&</span> <span class='lparen'>(</span><span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>true</span><span class='tstring_end'>'</span></span> <span class='op'>||</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</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'><<</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'>'</span><span class='tstring_content'>Received a WebSocket connection</span><span class='tstring_end'>'</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
|
2694
|
+
|
2695
|
+
<span class='comment'># We're going to hand off this connection to another actor (Writer/Reader)
|
2696
|
+
</span> <span class='comment'># However, initially Reel::Connections are "attached" 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 "Not Found"
|
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'>"</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'>"</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'>'</span><span class='tstring_content'>Not found</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>Reactor handles new socket connection</span><span class='tstring_end'>'</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'>"</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'>"</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'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'>"</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'>"</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'>&&</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'><<</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'><<</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
|
+
—
|
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'><</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'>'</span><span class='tstring_content'>0.0.0.0</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>/ws</span><span class='tstring_end'>'</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'>"</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'>"</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'>&</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'>'</span><span class='tstring_content'>Options is not a hash </span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&&</span> <span class='lparen'>(</span><span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>true</span><span class='tstring_end'>'</span></span> <span class='op'>||</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</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'><<</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'>'</span><span class='tstring_content'>Received a WebSocket connection</span><span class='tstring_end'>'</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
|
3095
|
+
|
3096
|
+
<span class='comment'># We're going to hand off this connection to another actor (Writer/Reader)
|
3097
|
+
</span> <span class='comment'># However, initially Reel::Connections are "attached" 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 "Not Found"
|
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'>"</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'>"</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'>'</span><span class='tstring_content'>Not found</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>Reactor handles new socket connection</span><span class='tstring_end'>'</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'>"</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'>"</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'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'>"</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'>"</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'>&&</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'><<</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'><<</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
|
+
—
|
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'><</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'>'</span><span class='tstring_content'>0.0.0.0</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>/ws</span><span class='tstring_end'>'</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'>"</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'>"</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'>&</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'>'</span><span class='tstring_content'>Options is not a hash </span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&&</span> <span class='lparen'>(</span><span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>true</span><span class='tstring_end'>'</span></span> <span class='op'>||</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</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'><<</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'>'</span><span class='tstring_content'>Received a WebSocket connection</span><span class='tstring_end'>'</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
|
3496
|
+
|
3497
|
+
<span class='comment'># We're going to hand off this connection to another actor (Writer/Reader)
|
3498
|
+
</span> <span class='comment'># However, initially Reel::Connections are "attached" 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 "Not Found"
|
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'>"</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'>"</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'>'</span><span class='tstring_content'>Not found</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>Reactor handles new socket connection</span><span class='tstring_end'>'</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'>"</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'>"</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'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'>"</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'>"</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'>&&</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'><<</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'><<</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'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_present?'>present?</span> <span class='op'>&&</span> <span class='lparen'>(</span><span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>true</span><span class='tstring_end'>'</span></span> <span class='op'>||</span> <span class='const'>ENV</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>DEBUG_CELLULOID</span><span class='tstring_end'>'</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'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
|
+
—
|
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
|
+
—
|
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'>"</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'>"</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'>&&</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'><<</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'><<</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
|
+
—
|
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'>'</span><span class='tstring_content'>Received a WebSocket connection</span><span class='tstring_end'>'</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_debug_enabled?'>debug_enabled?</span>
|
3870
|
+
|
3871
|
+
<span class='comment'># We're going to hand off this connection to another actor (Writer/Reader)
|
3872
|
+
</span> <span class='comment'># However, initially Reel::Connections are "attached" 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
|
+
—
|
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
|
+
— <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
|
+
— <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
|
+
— <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
|
+
— <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
|
+
— <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'>'</span><span class='tstring_content'>Options is not a hash </span><span class='tstring_end'>'</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
|
+
—
|
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'><<</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
|
+
—
|
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
|
+
—
|
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'>"</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'>"</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'>'</span><span class='tstring_content'>Not found</span><span class='tstring_end'>'</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'>'</span><span class='tstring_content'>Reactor handles new socket connection</span><span class='tstring_end'>'</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'>"</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'>"</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 12:25:43 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>
|