ionian 0.6.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/doc/Ionian/Extension/IO.html +21 -13
- data/doc/Ionian/Extension/Socket.html +17 -17
- data/doc/Ionian/Server.html +17 -7
- data/doc/Ionian/Socket.html +12 -11
- data/doc/created.rid +6 -6
- data/doc/js/search_index.js +1 -1
- data/lib/ionian/extension/io.rb +25 -8
- data/lib/ionian/extension/socket.rb +8 -0
- data/lib/ionian/server.rb +10 -1
- data/lib/ionian/socket.rb +2 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5bf6ad6b7843ed3ef7ebc1fd83e43f4b33f3d167
|
4
|
+
data.tar.gz: b76ab62698c36c925283444132a9bd568b63ae22
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6cf447c0f1858c87397ac08b6dffe363fa9c5714607351c032b38b1b5461d36c0ef7708e8abddb8e31111a53ede9bacd577b1d0ed4449f88f4d248942972fcf
|
7
|
+
data.tar.gz: f0623d616b5232ffc8c01a8f32ddc488c7892d90266f03b91e728b6b74159638d8c2d1b035005eb1dda981037763c5688aedb44280eb2c3ba914155d1e9955b0
|
@@ -390,7 +390,7 @@ automatically.</p>
|
|
390
390
|
|
391
391
|
|
392
392
|
<div class="method-source-code" id="purge-source">
|
393
|
-
<pre><span class="ruby-comment"># File lib/ionian/extension/io.rb, line
|
393
|
+
<pre><span class="ruby-comment"># File lib/ionian/extension/io.rb, line 151</span>
|
394
394
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">purge</span>
|
395
395
|
<span class="ruby-comment"># Erase IO buffer.</span>
|
396
396
|
<span class="ruby-keyword">while</span> <span class="ruby-operator">::</span><span class="ruby-constant">IO</span>.<span class="ruby-identifier">select</span> [<span class="ruby-keyword">self</span>], <span class="ruby-keyword">nil</span>, <span class="ruby-keyword">nil</span>, <span class="ruby-value">0</span>
|
@@ -476,6 +476,9 @@ helpful for protocols like RS232 that do not have packet boundries.</p>
|
|
476
476
|
<p>kwargs:</p>
|
477
477
|
|
478
478
|
<pre>timeout: Timeout in seconds IO::select will block.
|
479
|
+
expression: Override the expression match for this single
|
480
|
+
method call.
|
481
|
+
notify: Set to false to skip notifying match listener procs.
|
479
482
|
skip_select: Skip over the IO::select statement. Use if you
|
480
483
|
are calling IO::select ahead of this method.
|
481
484
|
build_methods: Build accessor methods from named capture groups.
|
@@ -485,11 +488,15 @@ build_methods: Build accessor methods from named capture groups.
|
|
485
488
|
|
486
489
|
|
487
490
|
<div class="method-source-code" id="read_match-source">
|
488
|
-
<pre><span class="ruby-comment"># File lib/ionian/extension/io.rb, line
|
491
|
+
<pre><span class="ruby-comment"># File lib/ionian/extension/io.rb, line 86</span>
|
489
492
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">read_match</span>(<span class="ruby-operator">**</span><span class="ruby-identifier">kwargs</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
|
490
|
-
<span class="ruby-identifier">timeout</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:timeout</span>,
|
491
|
-
<span class="ruby-identifier">
|
492
|
-
<span class="ruby-identifier">
|
493
|
+
<span class="ruby-identifier">timeout</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:timeout</span>, <span class="ruby-ivar">@ionian_timeout</span>
|
494
|
+
<span class="ruby-identifier">notify</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:notify</span>, <span class="ruby-keyword">true</span>
|
495
|
+
<span class="ruby-identifier">skip_select</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:skip_select</span>, <span class="ruby-ivar">@ionian_skip_select</span>
|
496
|
+
<span class="ruby-identifier">build_methods</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:build_methods</span>, <span class="ruby-ivar">@ionian_build_methods</span>
|
497
|
+
|
498
|
+
<span class="ruby-identifier">exp</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:expression</span>, <span class="ruby-ivar">@ionian_expression</span>
|
499
|
+
<span class="ruby-identifier">exp</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span> <span class="ruby-node">"(.*?)#{exp}"</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">exp</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">String</span>
|
493
500
|
|
494
501
|
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">skip_select</span>
|
495
502
|
<span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">unless</span> <span class="ruby-operator">::</span><span class="ruby-constant">IO</span>.<span class="ruby-identifier">select</span> [<span class="ruby-keyword">self</span>], <span class="ruby-keyword">nil</span>, <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">timeout</span>
|
@@ -503,7 +510,7 @@ build_methods: Build accessor methods from named capture groups.
|
|
503
510
|
|
504
511
|
<span class="ruby-ivar">@matches</span> = []
|
505
512
|
|
506
|
-
<span class="ruby-keyword">while</span> <span class="ruby-ivar">@ionian_buf</span> <span class="ruby-operator">=~</span> <span class="ruby-
|
513
|
+
<span class="ruby-keyword">while</span> <span class="ruby-ivar">@ionian_buf</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">exp</span>
|
507
514
|
<span class="ruby-ivar">@matches</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">$~</span> <span class="ruby-comment"># Match data.</span>
|
508
515
|
<span class="ruby-keyword">yield</span> <span class="ruby-identifier">$~</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">block_given?</span>
|
509
516
|
<span class="ruby-ivar">@ionian_buf</span> = <span class="ruby-node">$'</span> <span class="ruby-comment"># Leave post match data in the buffer.</span>
|
@@ -520,6 +527,9 @@ build_methods: Build accessor methods from named capture groups.
|
|
520
527
|
<span class="ruby-keyword">end</span>
|
521
528
|
<span class="ruby-keyword">end</span>
|
522
529
|
|
530
|
+
<span class="ruby-comment"># Notify on_match listeners.</span>
|
531
|
+
<span class="ruby-ivar">@matches</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">match</span><span class="ruby-operator">|</span> <span class="ruby-identifier">notify_listeners</span> <span class="ruby-identifier">match</span>} <span class="ruby-keyword">if</span> <span class="ruby-identifier">notify</span>
|
532
|
+
|
523
533
|
<span class="ruby-ivar">@matches</span>
|
524
534
|
<span class="ruby-keyword">end</span></pre>
|
525
535
|
</div>
|
@@ -555,7 +565,7 @@ ionian_socket.register_observer {…}</p>
|
|
555
565
|
|
556
566
|
|
557
567
|
<div class="method-source-code" id="register_observer-source">
|
558
|
-
<pre><span class="ruby-comment"># File lib/ionian/extension/io.rb, line
|
568
|
+
<pre><span class="ruby-comment"># File lib/ionian/extension/io.rb, line 164</span>
|
559
569
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">register_observer</span>(<span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
|
560
570
|
<span class="ruby-ivar">@ionian_listeners</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">block</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@ionian_listeners</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">block</span>
|
561
571
|
<span class="ruby-identifier">block</span>
|
@@ -596,15 +606,13 @@ be used if <a href="IO.html#method-i-read_match">read_match</a> is used.</p>
|
|
596
606
|
|
597
607
|
|
598
608
|
<div class="method-source-code" id="run_match-source">
|
599
|
-
<pre><span class="ruby-comment"># File lib/ionian/extension/io.rb, line
|
609
|
+
<pre><span class="ruby-comment"># File lib/ionian/extension/io.rb, line 134</span>
|
600
610
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">run_match</span>(<span class="ruby-operator">**</span><span class="ruby-identifier">kwargs</span>)
|
601
611
|
<span class="ruby-ivar">@match_listener</span> <span class="ruby-operator">||=</span> <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">new</span> <span class="ruby-keyword">do</span>
|
602
612
|
<span class="ruby-keyword">begin</span>
|
603
613
|
<span class="ruby-keyword">while</span> <span class="ruby-keyword">not</span> <span class="ruby-identifier">closed?</span> <span class="ruby-keyword">do</span>
|
604
|
-
|
605
|
-
|
606
|
-
<span class="ruby-ivar">@ionian_listeners</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">listener</span><span class="ruby-operator">|</span> <span class="ruby-identifier">listener</span>.<span class="ruby-identifier">call</span> <span class="ruby-identifier">match</span>, <span class="ruby-keyword">self</span>}
|
607
|
-
} <span class="ruby-keyword">if</span> <span class="ruby-identifier">matches</span>
|
614
|
+
<span class="ruby-identifier">matches</span> = <span class="ruby-identifier">read_match</span> <span class="ruby-operator">**</span><span class="ruby-identifier">kwargs</span>
|
615
|
+
<span class="ruby-identifier">matches</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">match</span><span class="ruby-operator">|</span> <span class="ruby-identifier">notify_listeners</span> <span class="ruby-identifier">match</span> } <span class="ruby-keyword">if</span> <span class="ruby-identifier">matches</span>
|
608
616
|
<span class="ruby-keyword">end</span>
|
609
617
|
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">EOFError</span>
|
610
618
|
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">IOError</span>
|
@@ -642,7 +650,7 @@ be used if <a href="IO.html#method-i-read_match">read_match</a> is used.</p>
|
|
642
650
|
|
643
651
|
|
644
652
|
<div class="method-source-code" id="unregister_observer-source">
|
645
|
-
<pre><span class="ruby-comment"># File lib/ionian/extension/io.rb, line
|
653
|
+
<pre><span class="ruby-comment"># File lib/ionian/extension/io.rb, line 172</span>
|
646
654
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">unregister_observer</span>(<span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
|
647
655
|
<span class="ruby-ivar">@ionian_listeners</span>.<span class="ruby-identifier">delete_if</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">o</span><span class="ruby-operator">|</span> <span class="ruby-identifier">o</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">block</span>}
|
648
656
|
<span class="ruby-identifier">block</span>
|
@@ -708,13 +708,13 @@ IP_MULTICAST_TTL )</p>
|
|
708
708
|
|
709
709
|
<div class="method-description">
|
710
710
|
|
711
|
-
|
711
|
+
<p>Not yet implemented.</p>
|
712
712
|
|
713
713
|
|
714
714
|
|
715
715
|
|
716
716
|
<div class="method-source-code" id="ipv6_add_membership-source">
|
717
|
-
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line
|
717
|
+
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line 189</span>
|
718
718
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">ipv6_add_membership</span>
|
719
719
|
<span class="ruby-comment"># TODO: Implement</span>
|
720
720
|
<span class="ruby-keyword">false</span>
|
@@ -742,13 +742,13 @@ IP_MULTICAST_TTL )</p>
|
|
742
742
|
|
743
743
|
<div class="method-description">
|
744
744
|
|
745
|
-
|
745
|
+
<p>Not yet implemented.</p>
|
746
746
|
|
747
747
|
|
748
748
|
|
749
749
|
|
750
750
|
<div class="method-source-code" id="ipv6_drop_membership-source">
|
751
|
-
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line
|
751
|
+
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line 195</span>
|
752
752
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">ipv6_drop_membership</span>
|
753
753
|
<span class="ruby-comment"># TODO: Implement</span>
|
754
754
|
<span class="ruby-keyword">false</span>
|
@@ -776,13 +776,13 @@ IP_MULTICAST_TTL )</p>
|
|
776
776
|
|
777
777
|
<div class="method-description">
|
778
778
|
|
779
|
-
|
779
|
+
<p>Not yet implemented.</p>
|
780
780
|
|
781
781
|
|
782
782
|
|
783
783
|
|
784
784
|
<div class="method-source-code" id="ipv6_multicast_hops-source">
|
785
|
-
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line
|
785
|
+
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line 212</span>
|
786
786
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">ipv6_multicast_hops</span>
|
787
787
|
<span class="ruby-comment"># TODO: Implement</span>
|
788
788
|
<span class="ruby-keyword">false</span>
|
@@ -810,13 +810,13 @@ IP_MULTICAST_TTL )</p>
|
|
810
810
|
|
811
811
|
<div class="method-description">
|
812
812
|
|
813
|
-
|
813
|
+
<p>Not yet implemented.</p>
|
814
814
|
|
815
815
|
|
816
816
|
|
817
817
|
|
818
818
|
<div class="method-source-code" id="ipv6_multicast_hops-3D-source">
|
819
|
-
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line
|
819
|
+
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line 218</span>
|
820
820
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">ipv6_multicast_hops=</span>(<span class="ruby-identifier">value</span>)
|
821
821
|
<span class="ruby-comment"># TODO: Implement</span>
|
822
822
|
<span class="ruby-keyword">end</span></pre>
|
@@ -843,13 +843,13 @@ IP_MULTICAST_TTL )</p>
|
|
843
843
|
|
844
844
|
<div class="method-description">
|
845
845
|
|
846
|
-
|
846
|
+
<p>Not yet implemented.</p>
|
847
847
|
|
848
848
|
|
849
849
|
|
850
850
|
|
851
851
|
<div class="method-source-code" id="ipv6_multicast_if-source">
|
852
|
-
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line
|
852
|
+
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line 201</span>
|
853
853
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">ipv6_multicast_if</span>
|
854
854
|
<span class="ruby-comment"># TODO: Implement</span>
|
855
855
|
<span class="ruby-keyword">false</span>
|
@@ -877,13 +877,13 @@ IP_MULTICAST_TTL )</p>
|
|
877
877
|
|
878
878
|
<div class="method-description">
|
879
879
|
|
880
|
-
|
880
|
+
<p>Not yet implemented.</p>
|
881
881
|
|
882
882
|
|
883
883
|
|
884
884
|
|
885
885
|
<div class="method-source-code" id="ipv6_multicast_if-3D-source">
|
886
|
-
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line
|
886
|
+
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line 207</span>
|
887
887
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">ipv6_multicast_if=</span>(<span class="ruby-identifier">value</span>)
|
888
888
|
<span class="ruby-comment"># TODO: Implement</span>
|
889
889
|
<span class="ruby-keyword">end</span></pre>
|
@@ -910,13 +910,13 @@ IP_MULTICAST_TTL )</p>
|
|
910
910
|
|
911
911
|
<div class="method-description">
|
912
912
|
|
913
|
-
|
913
|
+
<p>Not yet implemented.</p>
|
914
914
|
|
915
915
|
|
916
916
|
|
917
917
|
|
918
918
|
<div class="method-source-code" id="ipv6_multicast_loop-source">
|
919
|
-
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line
|
919
|
+
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line 223</span>
|
920
920
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">ipv6_multicast_loop</span>
|
921
921
|
<span class="ruby-comment"># TODO: Implement</span>
|
922
922
|
<span class="ruby-keyword">false</span>
|
@@ -948,13 +948,13 @@ IP_MULTICAST_TTL )</p>
|
|
948
948
|
|
949
949
|
<div class="method-description">
|
950
950
|
|
951
|
-
|
951
|
+
<p>Not yet implemented.</p>
|
952
952
|
|
953
953
|
|
954
954
|
|
955
955
|
|
956
956
|
<div class="method-source-code" id="ipv6_multicast_loop-3D-source">
|
957
|
-
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line
|
957
|
+
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line 231</span>
|
958
958
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">ipv6_multicast_loop=</span>(<span class="ruby-identifier">value</span>)
|
959
959
|
<span class="ruby-comment"># TODO: Implement</span>
|
960
960
|
<span class="ruby-keyword">end</span></pre>
|
@@ -1015,7 +1015,7 @@ IP_MULTICAST_TTL )</p>
|
|
1015
1015
|
|
1016
1016
|
|
1017
1017
|
<div class="method-source-code" id="multicast-source">
|
1018
|
-
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line
|
1018
|
+
<pre><span class="ruby-comment"># File lib/ionian/extension/socket.rb, line 238</span>
|
1019
1019
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">multicast</span>(<span class="ruby-identifier">address</span>)
|
1020
1020
|
<span class="ruby-identifier">address</span> <span class="ruby-operator">>=</span> <span class="ruby-string">'224.0.0.0'</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">address</span> <span class="ruby-operator"><=</span> <span class="ruby-string">'239.255.255.255'</span> <span class="ruby-operator">?</span> <span class="ruby-keyword">true</span> <span class="ruby-operator">:</span> <span class="ruby-keyword">false</span>
|
1021
1021
|
<span class="ruby-keyword">end</span></pre>
|
data/doc/Ionian/Server.html
CHANGED
@@ -134,13 +134,23 @@
|
|
134
134
|
|
135
135
|
<div class="method-description">
|
136
136
|
|
137
|
-
|
137
|
+
<p>A convenient wrapper for TCP and Unix server sockets (UDP doesn't use a
|
138
|
+
server).</p>
|
139
|
+
|
140
|
+
<p>Accepts an optional block that is passed to <a
|
141
|
+
href="Server.html#method-i-register_accept_listener">register_accept_listener</a>.</p>
|
142
|
+
|
143
|
+
<p>Args:</p>
|
144
|
+
|
145
|
+
<pre>interface: The address of the network interface to bind to.
|
146
|
+
Defaults to all.
|
147
|
+
protocol: :tcp, :unix. Default is :tcp.</pre>
|
138
148
|
|
139
149
|
|
140
150
|
|
141
151
|
|
142
152
|
<div class="method-source-code" id="new-source">
|
143
|
-
<pre><span class="ruby-comment"># File lib/ionian/server.rb, line
|
153
|
+
<pre><span class="ruby-comment"># File lib/ionian/server.rb, line 18</span>
|
144
154
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span> <span class="ruby-operator">**</span><span class="ruby-identifier">kwargs</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>
|
145
155
|
<span class="ruby-ivar">@accept_listeners</span> = []
|
146
156
|
<span class="ruby-identifier">register_accept_listener</span> <span class="ruby-operator">&</span><span class="ruby-identifier">block</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">block_given?</span>
|
@@ -163,7 +173,7 @@
|
|
163
173
|
<span class="ruby-ivar">@server</span> = <span class="ruby-constant">TCPServer</span>.<span class="ruby-identifier">new</span> <span class="ruby-ivar">@interface</span>, <span class="ruby-ivar">@port</span>
|
164
174
|
<span class="ruby-ivar">@server</span>.<span class="ruby-identifier">setsockopt</span> <span class="ruby-operator">::</span><span class="ruby-constant">Socket</span><span class="ruby-operator">::</span><span class="ruby-constant">SOL_SOCKET</span>, <span class="ruby-operator">::</span><span class="ruby-constant">Socket</span><span class="ruby-operator">::</span><span class="ruby-constant">SO_REUSEADDR</span>, [<span class="ruby-value">1</span>].<span class="ruby-identifier">pack</span>(<span class="ruby-string">'i'</span>)
|
165
175
|
<span class="ruby-keyword">when</span> <span class="ruby-value">:udp</span>
|
166
|
-
<span class="ruby-
|
176
|
+
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">"UDP should be implemented with Ionian::Socket."</span>
|
167
177
|
<span class="ruby-keyword">when</span> <span class="ruby-value">:unix</span>
|
168
178
|
<span class="ruby-ivar">@server</span> = <span class="ruby-constant">UNIXServer</span>.<span class="ruby-identifier">new</span> <span class="ruby-ivar">@interface</span>
|
169
179
|
<span class="ruby-keyword">end</span>
|
@@ -205,7 +215,7 @@
|
|
205
215
|
|
206
216
|
|
207
217
|
<div class="method-source-code" id="close-source">
|
208
|
-
<pre><span class="ruby-comment"># File lib/ionian/server.rb, line
|
218
|
+
<pre><span class="ruby-comment"># File lib/ionian/server.rb, line 71</span>
|
209
219
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">close</span>
|
210
220
|
<span class="ruby-ivar">@server</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@server</span>
|
211
221
|
<span class="ruby-ivar">@accept_thread</span>.<span class="ruby-identifier">join</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@accept_thread</span>
|
@@ -243,7 +253,7 @@ will be run when a connection is accepted.</p>
|
|
243
253
|
|
244
254
|
|
245
255
|
<div class="method-source-code" id="listen-source">
|
246
|
-
<pre><span class="ruby-comment"># File lib/ionian/server.rb, line
|
256
|
+
<pre><span class="ruby-comment"># File lib/ionian/server.rb, line 49</span>
|
247
257
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">listen</span> <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>
|
248
258
|
<span class="ruby-identifier">register_accept_listener</span> <span class="ruby-operator">&</span><span class="ruby-identifier">block</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">block_given?</span>
|
249
259
|
|
@@ -322,7 +332,7 @@ connected client is passed to the block as an Ionain::Client.</p>
|
|
322
332
|
|
323
333
|
|
324
334
|
<div class="method-source-code" id="register_accept_listener-source">
|
325
|
-
<pre><span class="ruby-comment"># File lib/ionian/server.rb, line
|
335
|
+
<pre><span class="ruby-comment"># File lib/ionian/server.rb, line 79</span>
|
326
336
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">register_accept_listener</span> <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>
|
327
337
|
<span class="ruby-ivar">@accept_listeners</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">block</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@accept_listeners</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">block</span>
|
328
338
|
<span class="ruby-identifier">block</span>
|
@@ -360,7 +370,7 @@ connected client is passed to the block as an Ionain::Client.</p>
|
|
360
370
|
|
361
371
|
|
362
372
|
<div class="method-source-code" id="unregister_accept_listener-source">
|
363
|
-
<pre><span class="ruby-comment"># File lib/ionian/server.rb, line
|
373
|
+
<pre><span class="ruby-comment"># File lib/ionian/server.rb, line 87</span>
|
364
374
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">unregister_accept_listener</span> <span class="ruby-identifier">proc</span>
|
365
375
|
<span class="ruby-ivar">@accept_listeners</span>.<span class="ruby-identifier">delete_if</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">o</span><span class="ruby-operator">|</span> <span class="ruby-identifier">o</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">proc</span>}
|
366
376
|
<span class="ruby-identifier">proc</span>
|
data/doc/Ionian/Socket.html
CHANGED
@@ -166,7 +166,7 @@
|
|
166
166
|
|
167
167
|
<div class="method-description">
|
168
168
|
|
169
|
-
|
169
|
+
<p>Returns the regular expression used to match incoming data.</p>
|
170
170
|
|
171
171
|
</div>
|
172
172
|
</div>
|
@@ -245,7 +245,7 @@ expression: Overrides the #read_match regular expression for received data.</pre
|
|
245
245
|
|
246
246
|
|
247
247
|
<div class="method-source-code" id="new-source">
|
248
|
-
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line
|
248
|
+
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 27</span>
|
249
249
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">existing_socket</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-operator">**</span><span class="ruby-identifier">kwargs</span>)
|
250
250
|
<span class="ruby-ivar">@socket</span> = <span class="ruby-identifier">existing_socket</span>
|
251
251
|
|
@@ -296,6 +296,7 @@ expression: Overrides the #read_match regular expression for received data.</pre
|
|
296
296
|
|
297
297
|
<span class="ruby-ivar">@protocol</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:protocol</span>, <span class="ruby-identifier">default_protocol</span>
|
298
298
|
<span class="ruby-ivar">@persistent</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:persistent</span>, <span class="ruby-keyword">true</span>
|
299
|
+
<span class="ruby-ivar">@persistent</span> = <span class="ruby-keyword">true</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@protocol</span> <span class="ruby-operator">==</span> <span class="ruby-value">:udp</span>
|
299
300
|
|
300
301
|
<span class="ruby-ivar">@reuse_addr</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:reuse_addr</span>, <span class="ruby-keyword">false</span>
|
301
302
|
<span class="ruby-ivar">@no_delay</span> = <span class="ruby-identifier">kwargs</span>.<span class="ruby-identifier">fetch</span> <span class="ruby-value">:no_delay</span>, <span class="ruby-keyword">false</span>
|
@@ -370,7 +371,7 @@ expression: Overrides the #read_match regular expression for received data.</pre
|
|
370
371
|
|
371
372
|
|
372
373
|
<div class="method-source-code" id="closed-3F-source">
|
373
|
-
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line
|
374
|
+
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 150</span>
|
374
375
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">closed?</span>
|
375
376
|
<span class="ruby-keyword">return</span> <span class="ruby-keyword">true</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@socket</span>
|
376
377
|
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">closed?</span>
|
@@ -406,7 +407,7 @@ href="Extension/IO.html#method-i-read_match">Ionian::Extension::IO#read_match</a
|
|
406
407
|
|
407
408
|
|
408
409
|
<div class="method-source-code" id="cmd-source">
|
409
|
-
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line
|
410
|
+
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 102</span>
|
410
411
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">cmd</span>(<span class="ruby-identifier">string</span>, <span class="ruby-operator">**</span><span class="ruby-identifier">kwargs</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
|
411
412
|
<span class="ruby-identifier">create_socket</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@persistent</span>
|
412
413
|
|
@@ -453,7 +454,7 @@ non-persistent sockets.</p>
|
|
453
454
|
|
454
455
|
|
455
456
|
<div class="method-source-code" id="flush-source">
|
456
|
-
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line
|
457
|
+
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 157</span>
|
457
458
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">flush</span>
|
458
459
|
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">flush</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@persistent</span>
|
459
460
|
<span class="ruby-keyword">end</span></pre>
|
@@ -489,7 +490,7 @@ non-persistent sockets.</p>
|
|
489
490
|
|
490
491
|
|
491
492
|
<div class="method-source-code" id="has_data-3F-source">
|
492
|
-
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line
|
493
|
+
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 144</span>
|
493
494
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">has_data?</span>(<span class="ruby-operator">**</span><span class="ruby-identifier">kwargs</span>)
|
494
495
|
<span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@socket</span>
|
495
496
|
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">has_data?</span> <span class="ruby-identifier">kwargs</span>
|
@@ -551,7 +552,7 @@ non-persistent sockets.</p>
|
|
551
552
|
|
552
553
|
|
553
554
|
<div class="method-source-code" id="persistent-3F-source">
|
554
|
-
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line
|
555
|
+
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 94</span>
|
555
556
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">persistent?</span>
|
556
557
|
<span class="ruby-ivar">@persistent</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">false</span> <span class="ruby-operator">||</span> <span class="ruby-ivar">@persistent</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">nil</span> <span class="ruby-operator">?</span> <span class="ruby-keyword">false</span> <span class="ruby-operator">:</span> <span class="ruby-keyword">true</span>
|
557
558
|
<span class="ruby-keyword">end</span></pre>
|
@@ -585,7 +586,7 @@ any string not already ending with one.</p>
|
|
585
586
|
|
586
587
|
|
587
588
|
<div class="method-source-code" id="puts-source">
|
588
|
-
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line
|
589
|
+
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 163</span>
|
589
590
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">puts</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">string</span>)
|
590
591
|
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">string</span>.<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">chomp</span>}.<span class="ruby-identifier">join</span>(<span class="ruby-string">"\n"</span>) <span class="ruby-operator">+</span> <span class="ruby-string">"\n"</span>
|
591
592
|
<span class="ruby-keyword">end</span></pre>
|
@@ -620,7 +621,7 @@ reference to the given block. block = ionian_socket.register_observer {…}</p>
|
|
620
621
|
|
621
622
|
|
622
623
|
<div class="method-source-code" id="register_observer-source">
|
623
|
-
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line
|
624
|
+
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 123</span>
|
624
625
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">register_observer</span> <span class="ruby-operator">&</span><span class="ruby-identifier">block</span>
|
625
626
|
<span class="ruby-ivar">@ionian_listeners</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">block</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@ionian_listeners</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">block</span>
|
626
627
|
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">register_observer</span> <span class="ruby-operator">&</span><span class="ruby-identifier">block</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@socket</span>
|
@@ -659,7 +660,7 @@ reference to the given block. block = ionian_socket.register_observer {…}</p>
|
|
659
660
|
|
660
661
|
|
661
662
|
<div class="method-source-code" id="unregister_observer-source">
|
662
|
-
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line
|
663
|
+
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 132</span>
|
663
664
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">unregister_observer</span>(<span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
|
664
665
|
<span class="ruby-ivar">@ionian_listeners</span>.<span class="ruby-identifier">delete_if</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">o</span><span class="ruby-operator">|</span> <span class="ruby-identifier">o</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">block</span>}
|
665
666
|
<span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">unregister_observer</span> <span class="ruby-operator">&</span><span class="ruby-identifier">block</span> <span class="ruby-keyword">if</span> <span class="ruby-ivar">@socket</span>
|
@@ -694,7 +695,7 @@ reference to the given block. block = ionian_socket.register_observer {…}</p>
|
|
694
695
|
|
695
696
|
|
696
697
|
<div class="method-source-code" id="write-source">
|
697
|
-
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line
|
698
|
+
<pre><span class="ruby-comment"># File lib/ionian/socket.rb, line 169</span>
|
698
699
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">write</span>(<span class="ruby-identifier">string</span>)
|
699
700
|
<span class="ruby-identifier">create_socket</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@persistent</span>
|
700
701
|
|
data/doc/created.rid
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
|
2
|
-
lib/ionian.rb
|
3
|
-
lib/ionian/extension/io.rb
|
4
|
-
lib/ionian/extension/socket.rb
|
5
|
-
lib/ionian/server.rb
|
6
|
-
lib/ionian/socket.rb
|
1
|
+
Fri, 24 Jan 2014 22:04:49 -0800
|
2
|
+
lib/ionian.rb Mon, 20 Jan 2014 16:23:59 -0800
|
3
|
+
lib/ionian/extension/io.rb Fri, 24 Jan 2014 15:44:42 -0800
|
4
|
+
lib/ionian/extension/socket.rb Fri, 24 Jan 2014 22:04:33 -0800
|
5
|
+
lib/ionian/server.rb Fri, 24 Jan 2014 22:03:08 -0800
|
6
|
+
lib/ionian/socket.rb Fri, 24 Jan 2014 22:03:54 -0800
|
data/doc/js/search_index.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
var search_data = {"index":{"searchIndex":["ionian","extension","io","socket","server","socket","<<()","close()","closed?()","cmd()","cork()","cork=()","cork?()","expression()","expression=()","extended()","extended()","flush()","has_data?()","has_data?()","initialize_ionian()","initialize_ionian_socket()","ip_add_membership()","ip_drop_membership()","ip_multicast_if()","ip_multicast_if=()","ip_multicast_loop()","ip_multicast_loop=()","ip_multicast_loop?()","ip_multicast_ttl()","ip_multicast_ttl=()","ipv6_add_membership()","ipv6_drop_membership()","ipv6_multicast_hops()","ipv6_multicast_hops=()","ipv6_multicast_if()","ipv6_multicast_if=()","ipv6_multicast_loop()","ipv6_multicast_loop=()","ipv6_multicast_loop?()","listen()","multicast()","multicast?()","new()","new()","no_delay()","no_delay=()","no_delay?()","on_accept()","on_match()","on_match()","persistent?()","purge()","puts()","read_all()","read_match()","recork()","register_accept_listener()","register_observer()","register_observer()","reuse_addr()","reuse_addr=()","reuse_addr?()","run_match()","ttl()","ttl=()","ttl?()","unregister_accept_listener()","unregister_observer()","unregister_observer()","write()"],"longSearchIndex":["ionian","ionian::extension","ionian::extension::io","ionian::extension::socket","ionian::server","ionian::socket","ionian::socket#<<()","ionian::server#close()","ionian::socket#closed?()","ionian::socket#cmd()","ionian::extension::socket#cork()","ionian::extension::socket#cork=()","ionian::extension::socket#cork?()","ionian::extension::io#expression()","ionian::extension::io#expression=()","ionian::extension::io::extended()","ionian::extension::socket::extended()","ionian::socket#flush()","ionian::extension::io#has_data?()","ionian::socket#has_data?()","ionian::extension::io#initialize_ionian()","ionian::extension::socket#initialize_ionian_socket()","ionian::extension::socket#ip_add_membership()","ionian::extension::socket#ip_drop_membership()","ionian::extension::socket#ip_multicast_if()","ionian::extension::socket#ip_multicast_if=()","ionian::extension::socket#ip_multicast_loop()","ionian::extension::socket#ip_multicast_loop=()","ionian::extension::socket#ip_multicast_loop?()","ionian::extension::socket#ip_multicast_ttl()","ionian::extension::socket#ip_multicast_ttl=()","ionian::extension::socket#ipv6_add_membership()","ionian::extension::socket#ipv6_drop_membership()","ionian::extension::socket#ipv6_multicast_hops()","ionian::extension::socket#ipv6_multicast_hops=()","ionian::extension::socket#ipv6_multicast_if()","ionian::extension::socket#ipv6_multicast_if=()","ionian::extension::socket#ipv6_multicast_loop()","ionian::extension::socket#ipv6_multicast_loop=()","ionian::extension::socket#ipv6_multicast_loop?()","ionian::server#listen()","ionian::extension::socket#multicast()","ionian::extension::socket#multicast?()","ionian::server::new()","ionian::socket::new()","ionian::extension::socket#no_delay()","ionian::extension::socket#no_delay=()","ionian::extension::socket#no_delay?()","ionian::server#on_accept()","ionian::extension::io#on_match()","ionian::socket#on_match()","ionian::socket#persistent?()","ionian::extension::io#purge()","ionian::socket#puts()","ionian::extension::io#read_all()","ionian::extension::io#read_match()","ionian::extension::socket#recork()","ionian::server#register_accept_listener()","ionian::extension::io#register_observer()","ionian::socket#register_observer()","ionian::extension::socket#reuse_addr()","ionian::extension::socket#reuse_addr=()","ionian::extension::socket#reuse_addr?()","ionian::extension::io#run_match()","ionian::extension::socket#ttl()","ionian::extension::socket#ttl=()","ionian::extension::socket#ttl?()","ionian::server#unregister_accept_listener()","ionian::extension::io#unregister_observer()","ionian::socket#unregister_observer()","ionian::socket#write()"],"info":[["Ionian","","Ionian.html","","<p>A library to simplify interaction with IO streams. This includes network\nsockets, file sockets, and serial …\n"],["Ionian::Extension","","Ionian/Extension.html","","<p>A collection of mixins.\n"],["Ionian::Extension::IO","","Ionian/Extension/IO.html","","<p>A mixin for IO objects that allows regular expression matching and\nconvenient notification of received …\n"],["Ionian::Extension::Socket","","Ionian/Extension/Socket.html","","<p>A mixin for Socket objects.\n<p>This module was designed to be extended by instantiated objects that\nimplement …\n"],["Ionian::Server","","Ionian/Server.html","","<p>A convenient wrapper for TCP, UDP, and Unix server sockets.\n"],["Ionian::Socket","","Ionian/Socket.html","","<p>A convenient wrapper for TCP, UDP, and Unix client sockets.\n"],["<<","Ionian::Socket","Ionian/Socket.html#method-i-3C-3C","(string)",""],["close","Ionian::Server","Ionian/Server.html#method-i-close","()","<p>Shutdown the server socket and stop listening for connections.\n"],["closed?","Ionian::Socket","Ionian/Socket.html#method-i-closed-3F","()","<p>Returns true if the socket is closed.\n"],["cmd","Ionian::Socket","Ionian/Socket.html#method-i-cmd","(string, **kwargs, &block)","<p>Send a command (data) to the socket. Returns an array of received matches.\nBlock yields received match. …\n"],["cork","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-cork","()","<p>Returns true if multiple writes are buffered into a single segment. See\n#recork. Linux only. ( TCP_CORK …\n"],["cork=","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-cork-3D","(value)","<p>Buffers multiple writes into a single segment if true. The segment is sent\nonce the cork flag is disabled, …\n"],["cork?","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-cork-3F","()",""],["expression","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-expression","()","<p>Returns the regular expression used for #read_match.\n"],["expression=","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-expression-3D","(exp)","<p>Set the expression to match against the read buffer. Can be a regular\nexpression specifying capture groups, …\n"],["extended","Ionian::Extension::IO","Ionian/Extension/IO.html#method-c-extended","(obj)","<p>Called automaticallly when the object is extended with #extend.\n"],["extended","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-c-extended","(obj)","<p>Called automaticallly when the object is extended with #extend.\n"],["flush","Ionian::Socket","Ionian/Socket.html#method-i-flush","()","<p>Flushes buffered data to the operating system. This method has no effect on\nnon-persistent sockets.\n"],["has_data?","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-has_data-3F","(timeout: 0)","<p>Returns true if there is data in the receive buffer. Args:\n\n<pre>Timeout: Number of seconds to wait for data ...</pre>\n"],["has_data?","Ionian::Socket","Ionian/Socket.html#method-i-has_data-3F","(**kwargs)","<p>Returns true if there is data in the receive buffer. Args:\n\n<pre>Timeout: Number of seconds to wait for data ...</pre>\n"],["initialize_ionian","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-initialize_ionian","()","<p>Initialize the Ionian instance variables. This is called automatically if\n#extend is called on an object. …\n"],["initialize_ionian_socket","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-initialize_ionian_socket","()","<p>Initialize the Ionian Socket variables. This is called automatically if\n#extend is called on an object. …\n"],["ip_add_membership","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ip_add_membership","(address = nil, interface = nil)","<p>Join a multicast group. Address is the class D multicast address (uses\nremote address if not specified). …\n"],["ip_drop_membership","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ip_drop_membership","(address = nil, interface = nil)","<p>Leave a multicast group. Address is the class D multicast address (uses\nremote address if not specified). …\n"],["ip_multicast_if","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ip_multicast_if","()","<p>Returns the default interface for outgoing multicasts. ( IP_MULTICAST_IF )\n"],["ip_multicast_if=","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ip_multicast_if-3D","(interface = nil)","<p>Specify default interface for outgoing multicasts. ( IP_MULTICAST_IF )\n"],["ip_multicast_loop","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ip_multicast_loop","()","<p>Returns true if loopback of outgoing multicasts is enabled. (\nIP_MULTICAST_LOOP )\n"],["ip_multicast_loop=","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ip_multicast_loop-3D","(value)","<p>Enables loopback of outgoing multicasts if true. ( IP_MULTICAST_LOOP )\n"],["ip_multicast_loop?","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ip_multicast_loop-3F","()",""],["ip_multicast_ttl","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ip_multicast_ttl","()","<p>Returns the time to live (hop limit) for outgoing multicasts. (\nIP_MULTICAST_TTL )\n"],["ip_multicast_ttl=","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ip_multicast_ttl-3D","(value)","<p>Set the time to live (hop limit) for outgoing multicasts. (\nIP_MULTICAST_TTL )\n"],["ipv6_add_membership","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ipv6_add_membership","()",""],["ipv6_drop_membership","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ipv6_drop_membership","()",""],["ipv6_multicast_hops","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ipv6_multicast_hops","()",""],["ipv6_multicast_hops=","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ipv6_multicast_hops-3D","(value)",""],["ipv6_multicast_if","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ipv6_multicast_if","()",""],["ipv6_multicast_if=","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ipv6_multicast_if-3D","(value)",""],["ipv6_multicast_loop","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ipv6_multicast_loop","()",""],["ipv6_multicast_loop=","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ipv6_multicast_loop-3D","(value)",""],["ipv6_multicast_loop?","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ipv6_multicast_loop-3F","()",""],["listen","Ionian::Server","Ionian/Server.html#method-i-listen","(&block)","<p>Starts the socket server listening for connections. Blocks registered with\n#register_accept_listener …\n"],["multicast","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-multicast","(address)","<p>Returns true if the given address is within the multicast range.\n"],["multicast?","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-multicast-3F","(address)",""],["new","Ionian::Server","Ionian/Server.html#method-c-new","(**kwargs, &block)",""],["new","Ionian::Socket","Ionian/Socket.html#method-c-new","(existing_socket = nil, **kwargs)","<p>Creates a new socket or wraps an existing socket.\n<p>Args:\n\n<pre>host: IP or hostname to connect to.\nport: ...</pre>\n"],["no_delay","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-no_delay","()","<p>Returns true if the Nagle algorithm is disabled. ( TCP_NODELAY )\n"],["no_delay=","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-no_delay-3D","(value)","<p>Disables the Nagle algorithm if true. ( TCP_NODELAY )\n"],["no_delay?","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-no_delay-3F","()",""],["on_accept","Ionian::Server","Ionian/Server.html#method-i-on_accept","(&block)",""],["on_match","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-on_match","(&block)",""],["on_match","Ionian::Socket","Ionian/Socket.html#method-i-on_match","(&block)",""],["persistent?","Ionian::Socket","Ionian/Socket.html#method-i-persistent-3F","()","<p>Returns true if the socket remains open after writing data.\n"],["purge","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-purge","()","<p>Erase the data in the IO and Ionian buffers. This is typically handled\nautomatically.\n"],["puts","Ionian::Socket","Ionian/Socket.html#method-i-puts","(*string)","<p>Writes the given string(s) to the socket and appends a newline character to\nany string not already ending …\n"],["read_all","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-read_all","()","<p>Read all data in the buffer. An alternative to using #readpartial with a\nlarge length.\n"],["read_match","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-read_match","(**kwargs, &block)","<p>Read matched data from the buffer. This method SHOULD NOT be used if\n#run_match is used.\n<p>Passes matches …\n"],["recork","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-recork","()","<p>Unsets cork to transmit data, then reapplies cork. ( TCP_CORK )\n"],["register_accept_listener","Ionian::Server","Ionian/Server.html#method-i-register_accept_listener","(&block)","<p>Register a block to be run when server accepts a client connection. The\nconnected client is passed to …\n"],["register_observer","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-register_observer","(&block)","<p>Register a block to be called when #run_match receives matched data. Method\ncallbacks can be registered …\n"],["register_observer","Ionian::Socket","Ionian/Socket.html#method-i-register_observer","(&block)","<p>Register a block to be called when #run_match receives matched data. Method\ncallbacks can be registered …\n"],["reuse_addr","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-reuse_addr","()","<p>Returns true if local address reuse is allowed. ( SO_REUSEADDR )\n"],["reuse_addr=","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-reuse_addr-3D","(value)","<p>Allows local address reuse if true. ( SO_REUSEADDR )\n"],["reuse_addr?","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-reuse_addr-3F","()",""],["run_match","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-run_match","(**kwargs)","<p>Start a thread that checks for data and notifies listeners (do |match,\nsocket|). Passes kwargs to #read_match …\n"],["ttl","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ttl","()","<p>Returns the time to live (hop limit). ( IP_TTL )\n"],["ttl=","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ttl-3D","(value)","<p>Sets the time to live (hop limit). ( IP_TTL )\n"],["ttl?","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ttl-3F","()",""],["unregister_accept_listener","Ionian::Server","Ionian/Server.html#method-i-unregister_accept_listener","(proc)","<p>Unregisters a socket accept notifier block.\n"],["unregister_observer","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-unregister_observer","(&block)","<p>Unregister a block from being called when matched data is received.\n"],["unregister_observer","Ionian::Socket","Ionian/Socket.html#method-i-unregister_observer","(&block)","<p>Unregister a block from being called when matched data is received.\n"],["write","Ionian::Socket","Ionian/Socket.html#method-i-write","(string)","<p>Writes the given string to the socket. Returns the number of bytes written.\n"]]}}
|
1
|
+
var search_data = {"index":{"searchIndex":["ionian","extension","io","socket","server","socket","<<()","close()","closed?()","cmd()","cork()","cork=()","cork?()","expression()","expression=()","extended()","extended()","flush()","has_data?()","has_data?()","initialize_ionian()","initialize_ionian_socket()","ip_add_membership()","ip_drop_membership()","ip_multicast_if()","ip_multicast_if=()","ip_multicast_loop()","ip_multicast_loop=()","ip_multicast_loop?()","ip_multicast_ttl()","ip_multicast_ttl=()","ipv6_add_membership()","ipv6_drop_membership()","ipv6_multicast_hops()","ipv6_multicast_hops=()","ipv6_multicast_if()","ipv6_multicast_if=()","ipv6_multicast_loop()","ipv6_multicast_loop=()","ipv6_multicast_loop?()","listen()","multicast()","multicast?()","new()","new()","no_delay()","no_delay=()","no_delay?()","on_accept()","on_match()","on_match()","persistent?()","purge()","puts()","read_all()","read_match()","recork()","register_accept_listener()","register_observer()","register_observer()","reuse_addr()","reuse_addr=()","reuse_addr?()","run_match()","ttl()","ttl=()","ttl?()","unregister_accept_listener()","unregister_observer()","unregister_observer()","write()"],"longSearchIndex":["ionian","ionian::extension","ionian::extension::io","ionian::extension::socket","ionian::server","ionian::socket","ionian::socket#<<()","ionian::server#close()","ionian::socket#closed?()","ionian::socket#cmd()","ionian::extension::socket#cork()","ionian::extension::socket#cork=()","ionian::extension::socket#cork?()","ionian::extension::io#expression()","ionian::extension::io#expression=()","ionian::extension::io::extended()","ionian::extension::socket::extended()","ionian::socket#flush()","ionian::extension::io#has_data?()","ionian::socket#has_data?()","ionian::extension::io#initialize_ionian()","ionian::extension::socket#initialize_ionian_socket()","ionian::extension::socket#ip_add_membership()","ionian::extension::socket#ip_drop_membership()","ionian::extension::socket#ip_multicast_if()","ionian::extension::socket#ip_multicast_if=()","ionian::extension::socket#ip_multicast_loop()","ionian::extension::socket#ip_multicast_loop=()","ionian::extension::socket#ip_multicast_loop?()","ionian::extension::socket#ip_multicast_ttl()","ionian::extension::socket#ip_multicast_ttl=()","ionian::extension::socket#ipv6_add_membership()","ionian::extension::socket#ipv6_drop_membership()","ionian::extension::socket#ipv6_multicast_hops()","ionian::extension::socket#ipv6_multicast_hops=()","ionian::extension::socket#ipv6_multicast_if()","ionian::extension::socket#ipv6_multicast_if=()","ionian::extension::socket#ipv6_multicast_loop()","ionian::extension::socket#ipv6_multicast_loop=()","ionian::extension::socket#ipv6_multicast_loop?()","ionian::server#listen()","ionian::extension::socket#multicast()","ionian::extension::socket#multicast?()","ionian::server::new()","ionian::socket::new()","ionian::extension::socket#no_delay()","ionian::extension::socket#no_delay=()","ionian::extension::socket#no_delay?()","ionian::server#on_accept()","ionian::extension::io#on_match()","ionian::socket#on_match()","ionian::socket#persistent?()","ionian::extension::io#purge()","ionian::socket#puts()","ionian::extension::io#read_all()","ionian::extension::io#read_match()","ionian::extension::socket#recork()","ionian::server#register_accept_listener()","ionian::extension::io#register_observer()","ionian::socket#register_observer()","ionian::extension::socket#reuse_addr()","ionian::extension::socket#reuse_addr=()","ionian::extension::socket#reuse_addr?()","ionian::extension::io#run_match()","ionian::extension::socket#ttl()","ionian::extension::socket#ttl=()","ionian::extension::socket#ttl?()","ionian::server#unregister_accept_listener()","ionian::extension::io#unregister_observer()","ionian::socket#unregister_observer()","ionian::socket#write()"],"info":[["Ionian","","Ionian.html","","<p>A library to simplify interaction with IO streams. This includes network\nsockets, file sockets, and serial …\n"],["Ionian::Extension","","Ionian/Extension.html","","<p>A collection of mixins.\n"],["Ionian::Extension::IO","","Ionian/Extension/IO.html","","<p>A mixin for IO objects that allows regular expression matching and\nconvenient notification of received …\n"],["Ionian::Extension::Socket","","Ionian/Extension/Socket.html","","<p>A mixin for Socket objects.\n<p>This module was designed to be extended by instantiated objects that\nimplement …\n"],["Ionian::Server","","Ionian/Server.html","","<p>A convenient wrapper for TCP, UDP, and Unix server sockets.\n"],["Ionian::Socket","","Ionian/Socket.html","","<p>A convenient wrapper for TCP, UDP, and Unix client sockets.\n"],["<<","Ionian::Socket","Ionian/Socket.html#method-i-3C-3C","(string)",""],["close","Ionian::Server","Ionian/Server.html#method-i-close","()","<p>Shutdown the server socket and stop listening for connections.\n"],["closed?","Ionian::Socket","Ionian/Socket.html#method-i-closed-3F","()","<p>Returns true if the socket is closed.\n"],["cmd","Ionian::Socket","Ionian/Socket.html#method-i-cmd","(string, **kwargs, &block)","<p>Send a command (data) to the socket. Returns an array of received matches.\nBlock yields received match. …\n"],["cork","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-cork","()","<p>Returns true if multiple writes are buffered into a single segment. See\n#recork. Linux only. ( TCP_CORK …\n"],["cork=","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-cork-3D","(value)","<p>Buffers multiple writes into a single segment if true. The segment is sent\nonce the cork flag is disabled, …\n"],["cork?","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-cork-3F","()",""],["expression","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-expression","()","<p>Returns the regular expression used for #read_match.\n"],["expression=","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-expression-3D","(exp)","<p>Set the expression to match against the read buffer. Can be a regular\nexpression specifying capture groups, …\n"],["extended","Ionian::Extension::IO","Ionian/Extension/IO.html#method-c-extended","(obj)","<p>Called automaticallly when the object is extended with #extend.\n"],["extended","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-c-extended","(obj)","<p>Called automaticallly when the object is extended with #extend.\n"],["flush","Ionian::Socket","Ionian/Socket.html#method-i-flush","()","<p>Flushes buffered data to the operating system. This method has no effect on\nnon-persistent sockets.\n"],["has_data?","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-has_data-3F","(timeout: 0)","<p>Returns true if there is data in the receive buffer. Args:\n\n<pre>Timeout: Number of seconds to wait for data ...</pre>\n"],["has_data?","Ionian::Socket","Ionian/Socket.html#method-i-has_data-3F","(**kwargs)","<p>Returns true if there is data in the receive buffer. Args:\n\n<pre>Timeout: Number of seconds to wait for data ...</pre>\n"],["initialize_ionian","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-initialize_ionian","()","<p>Initialize the Ionian instance variables. This is called automatically if\n#extend is called on an object. …\n"],["initialize_ionian_socket","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-initialize_ionian_socket","()","<p>Initialize the Ionian Socket variables. This is called automatically if\n#extend is called on an object. …\n"],["ip_add_membership","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ip_add_membership","(address = nil, interface = nil)","<p>Join a multicast group. Address is the class D multicast address (uses\nremote address if not specified). …\n"],["ip_drop_membership","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ip_drop_membership","(address = nil, interface = nil)","<p>Leave a multicast group. Address is the class D multicast address (uses\nremote address if not specified). …\n"],["ip_multicast_if","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ip_multicast_if","()","<p>Returns the default interface for outgoing multicasts. ( IP_MULTICAST_IF )\n"],["ip_multicast_if=","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ip_multicast_if-3D","(interface = nil)","<p>Specify default interface for outgoing multicasts. ( IP_MULTICAST_IF )\n"],["ip_multicast_loop","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ip_multicast_loop","()","<p>Returns true if loopback of outgoing multicasts is enabled. (\nIP_MULTICAST_LOOP )\n"],["ip_multicast_loop=","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ip_multicast_loop-3D","(value)","<p>Enables loopback of outgoing multicasts if true. ( IP_MULTICAST_LOOP )\n"],["ip_multicast_loop?","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ip_multicast_loop-3F","()",""],["ip_multicast_ttl","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ip_multicast_ttl","()","<p>Returns the time to live (hop limit) for outgoing multicasts. (\nIP_MULTICAST_TTL )\n"],["ip_multicast_ttl=","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ip_multicast_ttl-3D","(value)","<p>Set the time to live (hop limit) for outgoing multicasts. (\nIP_MULTICAST_TTL )\n"],["ipv6_add_membership","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ipv6_add_membership","()","<p>Not yet implemented.\n"],["ipv6_drop_membership","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ipv6_drop_membership","()","<p>Not yet implemented.\n"],["ipv6_multicast_hops","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ipv6_multicast_hops","()","<p>Not yet implemented.\n"],["ipv6_multicast_hops=","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ipv6_multicast_hops-3D","(value)","<p>Not yet implemented.\n"],["ipv6_multicast_if","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ipv6_multicast_if","()","<p>Not yet implemented.\n"],["ipv6_multicast_if=","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ipv6_multicast_if-3D","(value)","<p>Not yet implemented.\n"],["ipv6_multicast_loop","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ipv6_multicast_loop","()","<p>Not yet implemented.\n"],["ipv6_multicast_loop=","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ipv6_multicast_loop-3D","(value)","<p>Not yet implemented.\n"],["ipv6_multicast_loop?","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ipv6_multicast_loop-3F","()",""],["listen","Ionian::Server","Ionian/Server.html#method-i-listen","(&block)","<p>Starts the socket server listening for connections. Blocks registered with\n#register_accept_listener …\n"],["multicast","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-multicast","(address)","<p>Returns true if the given address is within the multicast range.\n"],["multicast?","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-multicast-3F","(address)",""],["new","Ionian::Server","Ionian/Server.html#method-c-new","(**kwargs, &block)","<p>A convenient wrapper for TCP and Unix server sockets (UDP doesn't use a\nserver).\n<p>Accepts an optional …\n"],["new","Ionian::Socket","Ionian/Socket.html#method-c-new","(existing_socket = nil, **kwargs)","<p>Creates a new socket or wraps an existing socket.\n<p>Args:\n\n<pre>host: IP or hostname to connect to.\nport: ...</pre>\n"],["no_delay","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-no_delay","()","<p>Returns true if the Nagle algorithm is disabled. ( TCP_NODELAY )\n"],["no_delay=","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-no_delay-3D","(value)","<p>Disables the Nagle algorithm if true. ( TCP_NODELAY )\n"],["no_delay?","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-no_delay-3F","()",""],["on_accept","Ionian::Server","Ionian/Server.html#method-i-on_accept","(&block)",""],["on_match","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-on_match","(&block)",""],["on_match","Ionian::Socket","Ionian/Socket.html#method-i-on_match","(&block)",""],["persistent?","Ionian::Socket","Ionian/Socket.html#method-i-persistent-3F","()","<p>Returns true if the socket remains open after writing data.\n"],["purge","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-purge","()","<p>Erase the data in the IO and Ionian buffers. This is typically handled\nautomatically.\n"],["puts","Ionian::Socket","Ionian/Socket.html#method-i-puts","(*string)","<p>Writes the given string(s) to the socket and appends a newline character to\nany string not already ending …\n"],["read_all","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-read_all","()","<p>Read all data in the buffer. An alternative to using #readpartial with a\nlarge length.\n"],["read_match","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-read_match","(**kwargs, &block)","<p>Read matched data from the buffer. This method SHOULD NOT be used if\n#run_match is used.\n<p>Passes matches …\n"],["recork","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-recork","()","<p>Unsets cork to transmit data, then reapplies cork. ( TCP_CORK )\n"],["register_accept_listener","Ionian::Server","Ionian/Server.html#method-i-register_accept_listener","(&block)","<p>Register a block to be run when server accepts a client connection. The\nconnected client is passed to …\n"],["register_observer","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-register_observer","(&block)","<p>Register a block to be called when #run_match receives matched data. Method\ncallbacks can be registered …\n"],["register_observer","Ionian::Socket","Ionian/Socket.html#method-i-register_observer","(&block)","<p>Register a block to be called when #run_match receives matched data. Method\ncallbacks can be registered …\n"],["reuse_addr","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-reuse_addr","()","<p>Returns true if local address reuse is allowed. ( SO_REUSEADDR )\n"],["reuse_addr=","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-reuse_addr-3D","(value)","<p>Allows local address reuse if true. ( SO_REUSEADDR )\n"],["reuse_addr?","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-reuse_addr-3F","()",""],["run_match","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-run_match","(**kwargs)","<p>Start a thread that checks for data and notifies listeners (do |match,\nsocket|). Passes kwargs to #read_match …\n"],["ttl","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ttl","()","<p>Returns the time to live (hop limit). ( IP_TTL )\n"],["ttl=","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ttl-3D","(value)","<p>Sets the time to live (hop limit). ( IP_TTL )\n"],["ttl?","Ionian::Extension::Socket","Ionian/Extension/Socket.html#method-i-ttl-3F","()",""],["unregister_accept_listener","Ionian::Server","Ionian/Server.html#method-i-unregister_accept_listener","(proc)","<p>Unregisters a socket accept notifier block.\n"],["unregister_observer","Ionian::Extension::IO","Ionian/Extension/IO.html#method-i-unregister_observer","(&block)","<p>Unregister a block from being called when matched data is received.\n"],["unregister_observer","Ionian::Socket","Ionian/Socket.html#method-i-unregister_observer","(&block)","<p>Unregister a block from being called when matched data is received.\n"],["write","Ionian::Socket","Ionian/Socket.html#method-i-write","(string)","<p>Writes the given string to the socket. Returns the number of bytes written.\n"]]}}
|
data/lib/ionian/extension/io.rb
CHANGED
@@ -76,14 +76,21 @@ module Ionian
|
|
76
76
|
#
|
77
77
|
# kwargs:
|
78
78
|
# timeout: Timeout in seconds IO::select will block.
|
79
|
+
# expression: Override the expression match for this single
|
80
|
+
# method call.
|
81
|
+
# notify: Set to false to skip notifying match listener procs.
|
79
82
|
# skip_select: Skip over the IO::select statement. Use if you
|
80
83
|
# are calling IO::select ahead of this method.
|
81
84
|
# build_methods: Build accessor methods from named capture groups.
|
82
85
|
# Enabled by default.
|
83
86
|
def read_match(**kwargs, &block)
|
84
|
-
timeout = kwargs.fetch :timeout,
|
85
|
-
|
86
|
-
|
87
|
+
timeout = kwargs.fetch :timeout, @ionian_timeout
|
88
|
+
notify = kwargs.fetch :notify, true
|
89
|
+
skip_select = kwargs.fetch :skip_select, @ionian_skip_select
|
90
|
+
build_methods = kwargs.fetch :build_methods, @ionian_build_methods
|
91
|
+
|
92
|
+
exp = kwargs.fetch :expression, @ionian_expression
|
93
|
+
exp = Regexp.new "(.*?)#{exp}" if exp.is_a? String
|
87
94
|
|
88
95
|
unless skip_select
|
89
96
|
return nil unless ::IO.select [self], nil, nil, timeout
|
@@ -97,7 +104,7 @@ module Ionian
|
|
97
104
|
|
98
105
|
@matches = []
|
99
106
|
|
100
|
-
while @ionian_buf =~
|
107
|
+
while @ionian_buf =~ exp
|
101
108
|
@matches << $~ # Match data.
|
102
109
|
yield $~ if block_given?
|
103
110
|
@ionian_buf = $' # Leave post match data in the buffer.
|
@@ -115,6 +122,9 @@ module Ionian
|
|
115
122
|
end
|
116
123
|
end
|
117
124
|
|
125
|
+
# Notify on_match listeners.
|
126
|
+
@matches.each {|match| notify_listeners match} if notify
|
127
|
+
|
118
128
|
@matches
|
119
129
|
end
|
120
130
|
|
@@ -125,10 +135,8 @@ module Ionian
|
|
125
135
|
@match_listener ||= Thread.new do
|
126
136
|
begin
|
127
137
|
while not closed? do
|
128
|
-
|
129
|
-
|
130
|
-
@ionian_listeners.each {|listener| listener.call match, self}
|
131
|
-
} if matches
|
138
|
+
matches = read_match **kwargs
|
139
|
+
matches.each {|match| notify_listeners match } if matches
|
132
140
|
end
|
133
141
|
rescue EOFError
|
134
142
|
rescue IOError
|
@@ -165,6 +173,15 @@ module Ionian
|
|
165
173
|
@ionian_listeners.delete_if {|o| o == block}
|
166
174
|
block
|
167
175
|
end
|
176
|
+
|
177
|
+
|
178
|
+
private
|
179
|
+
|
180
|
+
# Send match to each of the registered observers. Includes self
|
181
|
+
# as the second block parameter.
|
182
|
+
def notify_listeners match
|
183
|
+
@ionian_listeners.each {|listener| listener.call match, self}
|
184
|
+
end
|
168
185
|
|
169
186
|
end
|
170
187
|
end
|
@@ -185,34 +185,41 @@ module Ionian
|
|
185
185
|
self.setsockopt ::Socket::IPPROTO_IP, ::Socket::IP_MULTICAST_LOOP, [param].pack('C')
|
186
186
|
end
|
187
187
|
|
188
|
+
# Not yet implemented.
|
188
189
|
def ipv6_add_membership
|
189
190
|
# TODO: Implement
|
190
191
|
false
|
191
192
|
end
|
192
193
|
|
194
|
+
# Not yet implemented.
|
193
195
|
def ipv6_drop_membership
|
194
196
|
# TODO: Implement
|
195
197
|
false
|
196
198
|
end
|
197
199
|
|
200
|
+
# Not yet implemented.
|
198
201
|
def ipv6_multicast_if
|
199
202
|
# TODO: Implement
|
200
203
|
false
|
201
204
|
end
|
202
205
|
|
206
|
+
# Not yet implemented.
|
203
207
|
def ipv6_multicast_if=(value)
|
204
208
|
# TODO: Implement
|
205
209
|
end
|
206
210
|
|
211
|
+
# Not yet implemented.
|
207
212
|
def ipv6_multicast_hops
|
208
213
|
# TODO: Implement
|
209
214
|
false
|
210
215
|
end
|
211
216
|
|
217
|
+
# Not yet implemented.
|
212
218
|
def ipv6_multicast_hops=(value)
|
213
219
|
# TODO: Implement
|
214
220
|
end
|
215
221
|
|
222
|
+
# Not yet implemented.
|
216
223
|
def ipv6_multicast_loop
|
217
224
|
# TODO: Implement
|
218
225
|
false
|
@@ -220,6 +227,7 @@ module Ionian
|
|
220
227
|
|
221
228
|
alias_method :ipv6_multicast_loop?, :ipv6_multicast_loop
|
222
229
|
|
230
|
+
# Not yet implemented.
|
223
231
|
def ipv6_multicast_loop=(value)
|
224
232
|
# TODO: Implement
|
225
233
|
end
|
data/lib/ionian/server.rb
CHANGED
@@ -6,6 +6,15 @@ module Ionian
|
|
6
6
|
# A convenient wrapper for TCP, UDP, and Unix server sockets.
|
7
7
|
class Server
|
8
8
|
|
9
|
+
# A convenient wrapper for TCP and Unix server sockets (UDP doesn't use
|
10
|
+
# a server).
|
11
|
+
#
|
12
|
+
# Accepts an optional block that is passed to #register_accept_listener.
|
13
|
+
#
|
14
|
+
# Args:
|
15
|
+
# interface: The address of the network interface to bind to.
|
16
|
+
# Defaults to all.
|
17
|
+
# protocol: :tcp, :unix. Default is :tcp.
|
9
18
|
def initialize **kwargs, &block
|
10
19
|
@accept_listeners = []
|
11
20
|
register_accept_listener &block if block_given?
|
@@ -28,7 +37,7 @@ module Ionian
|
|
28
37
|
@server = TCPServer.new @interface, @port
|
29
38
|
@server.setsockopt ::Socket::SOL_SOCKET, ::Socket::SO_REUSEADDR, [1].pack('i')
|
30
39
|
when :udp
|
31
|
-
|
40
|
+
raise ArgumentError, "UDP should be implemented with Ionian::Socket."
|
32
41
|
when :unix
|
33
42
|
@server = UNIXServer.new @interface
|
34
43
|
end
|
data/lib/ionian/socket.rb
CHANGED
@@ -4,6 +4,7 @@ module Ionian
|
|
4
4
|
|
5
5
|
# A convenient wrapper for TCP, UDP, and Unix client sockets.
|
6
6
|
class Socket
|
7
|
+
# Returns the regular expression used to match incoming data.
|
7
8
|
attr_accessor :expression
|
8
9
|
|
9
10
|
# Creates a new socket or wraps an existing socket.
|
@@ -73,6 +74,7 @@ module Ionian
|
|
73
74
|
|
74
75
|
@protocol = kwargs.fetch :protocol, default_protocol
|
75
76
|
@persistent = kwargs.fetch :persistent, true
|
77
|
+
@persistent = true if @protocol == :udp
|
76
78
|
|
77
79
|
@reuse_addr = kwargs.fetch :reuse_addr, false
|
78
80
|
@no_delay = kwargs.fetch :no_delay, false
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ionian
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex McLain
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|