minitcp 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/test.rb ADDED
@@ -0,0 +1,192 @@
1
+ # LGPL
2
+ require_relative 'lib/minitcp.rb'
3
+
4
+ BasicSocket.do_not_reverse_lookup = true
5
+ Thread.abort_on_exception = true
6
+
7
+
8
+ if ARGV.size==0 || ARGV[0]=="1"
9
+ puts "**********************************************************"
10
+ puts "** Test basic, one client, multi client, any receive"
11
+ puts "**********************************************************"
12
+ srv=MServer.service(2200,"0.0.0.0",22) do |socket|
13
+ socket.after(100) { socket.puts "Hello client" }
14
+ socket.on_any_receive { |data| puts " Server recieved: #{data.inspect}" }
15
+ socket.on_timer(2000) { socket.puts "CouCou say server @ #{Time.now}" rescue nil }
16
+ puts " srv waiting..."
17
+ socket.wait_end
18
+ puts " end server connection!"
19
+ end
20
+ MClient.run_one_shot("localhost",2200) do |socket|
21
+ socket.on_any_receive { |data| p "client recieved #{data.inspect}"}
22
+ p "connected in client"
23
+ 3.times { |j| socket.puts "Hello #{j}..." ; sleep(1) }
24
+ p "end client"
25
+ end.join
26
+ puts "server connection should be stoped !!!"
27
+ sleep(1)
28
+ puts "\n"*5
29
+ sleep(1)
30
+ srv.stop rescue nil
31
+ sleep(3)
32
+ puts "Tread list : #{Thread.list} / current= #{Thread.current.inspect}"
33
+ end
34
+
35
+ if ARGV.size==0 || ARGV[0]=="2"
36
+ puts "**********************************************************"
37
+ puts "** Test serial protocole-like : header/body => ack/timeout"
38
+ puts "**********************************************************"
39
+ srv=MServer.service(2200,"0.0.0.0",22) do |socket|
40
+ socket.on_n_receive(11) do |data|
41
+ s,data=data[0,1],data[1..-1]
42
+ (socket.close; next) if s!="e"
43
+ size=data.to_i
44
+ puts " Server waiting for #{size} Bytes of data"
45
+ socket.received_timeout(size,100_000) do |data|
46
+ puts " Server recieved buffer : #{data.size} Bytes"
47
+ puts " emit ack..."
48
+ socket.send("o",0)
49
+ end
50
+ end
51
+ #socket.on_timer(120*1000) { puts " serv close after 40 seconds"; socket.close }
52
+ socket.wait_end
53
+ end
54
+ MClient.run_one_shot("localhost",2200) do |socket|
55
+ 30.times { |j|
56
+ size=rand((j+1)*100..(j+1)*100000)
57
+ puts "Sending #{size} data..."
58
+ data='%'*size
59
+ socket.print "e%010d" % size
60
+ while data && data.size>0
61
+ s,data=data[0..(1024-1)],data[1024..-1]
62
+ socket.send s,0
63
+ end
64
+ p socket.received_timeout(1,[size/1000,1000].max) ? "ack ok" : "!!! timeout ack"
65
+ #puts "\n"*7
66
+ }
67
+ p "end client"
68
+ end.join
69
+ sleep 1
70
+ puts "\n"*3
71
+ sleep 3
72
+ puts "srv stop..."
73
+ srv.stop rescue nil
74
+ sleep 1
75
+ puts "Tread list : #{Thread.list} / current= #{Thread.current.inspect}"
76
+ end
77
+
78
+ if ARGV.size==0 || ARGV[0]=="3"
79
+ puts "**********************************************************"
80
+ puts "** Test tcp proxy : one echo server, one proxy, on client"
81
+ puts "**********************************************************"
82
+
83
+ srv1=MServer.service(2201,"0.0.0.0",22) do |socket|
84
+ socket.on_any_receive { |data| socket.puts "ECHO:#{data}" }
85
+ socket.on_timer(2000) { socket.puts "Hello say server @ #{Time.now}" rescue nil }
86
+ socket.on_timer(4000) { socket.puts "byebye" rescue nil; socket.close rescue nil }
87
+ socket.wait_end
88
+ end
89
+
90
+ srv2=MServer.service(2200,"0.0.0.0",22) do |s_cli|
91
+ puts "> ======== client Connected ========"
92
+ srv=MClient.run_one_shot("127.0.0.1",2201) do |s_srv|
93
+ puts "< ======== server Concected ========"
94
+ s_srv.on_any_receive { |data| puts "< "+data; s_cli.print data }
95
+ s_cli.on_any_receive { |data| puts "> "+data; s_srv.print data}
96
+ s_srv.wait_end
97
+ s_cli.close rescue nil
98
+ end
99
+ s_cli.wait_end
100
+ p "end cli, stop proxy"
101
+ srv.kill
102
+ end
103
+ sleep 1
104
+ MClient.run_one_shot("localhost",2200) do |socket|
105
+ socket.on_any_receive { |data| p "client recieved #{data}"}
106
+ p "connected in client"
107
+ 10.times { |j| socket.print "C#{j} #{"+"*j*3}" ; sleep(0.1) }
108
+ p "end client"
109
+ end.join
110
+
111
+ sleep 1
112
+ puts "\n"*3
113
+ sleep 3
114
+ puts "srv stop..."
115
+ srv1.stop rescue nil
116
+ srv2.stop rescue nil
117
+ sleep 1
118
+ puts "Tread list : #{Thread.list} / current= #{Thread.current.inspect}"
119
+ end
120
+
121
+ if ARGV.size==0 || ARGV[0]=="4"
122
+ puts "**********************************************************"
123
+ puts "** Test sending with separator"
124
+ puts "**********************************************************"
125
+ $tm=Time.now
126
+ srv=MServer.service(2200,"0.0.0.0",22) do |socket|
127
+ l,ll=[],[]
128
+ socket.on_receive_sep(/([\.;$!])/) { |(data,sep)|
129
+ case sep
130
+ when ";" then l << data
131
+ when "."
132
+ ll << l ; l=[]
133
+ when "$"
134
+ p ll ; ll=[]
135
+ puts "Latency: #{(Time.now.to_f - $tm.to_f)*1000} ms"
136
+ socket.receive_n_bytes(10) { |data| p data }
137
+ when "!"
138
+ socket.close
139
+ end
140
+ }
141
+ socket.wait_end
142
+ end
143
+ MClient.run_one_shot("localhost",2200) do |socket|
144
+ p "connected in client"
145
+ $tm=Time.now
146
+ p 1; 4.times { |j| 3.times { |p| socket.print "#{j}/#{p};" } ; socket.print(".") }
147
+ socket.print '$1234567890'
148
+ $tm=Time.now
149
+ p 2; 4.times { |j| 3.times { |p| socket.print "#{j}/#{p};" } ; socket.print(".") }
150
+ socket.print '$1234567890!'
151
+ p "end client"
152
+ end.join
153
+
154
+ sleep 1
155
+ puts "\n"*3
156
+ sleep 3
157
+ puts "srv stop..."
158
+ srv.stop rescue p $!
159
+ sleep 1
160
+ puts "Tread list : #{Thread.list} / current= #{Thread.current.inspect}"
161
+ end
162
+
163
+
164
+ if ARGV.size==0 || ARGV[0]=="5"
165
+ SRV_PORT=2234
166
+ ## ############################# Client UDP : send datagram to anybody, serv response from them
167
+
168
+ UDPAgent.on_timer(1000,
169
+ port: 2232,
170
+ on_timer: proc do
171
+ data=Time.now.to_i.to_s
172
+ puts "\n\n\non timer send <#{data}>"
173
+ {mess: data,host: "127.0.0.2",port: SRV_PORT}
174
+ end,
175
+ on_receive: proc { |data,from,sock|
176
+ puts "Client: received #{data} from #{from}"
177
+ UDPAgent.send_datagram_on_socket(sock,from.last,from[1],'ack')
178
+ }
179
+ )
180
+
181
+ ## ############################# Server UDP : receive datagrram from anybody, response to sender
182
+
183
+ UDPAgent.on_datagramme("127.0.0.2",SRV_PORT ) { |data,from,p|
184
+ puts "Agent: received #{data} from #{from}:#{p}"
185
+ data && data.size>3 ? "OK-#{data}." : nil
186
+ }
187
+ sleep 1
188
+ UDPAgent.send_datagram("127.0.0.2",SRV_PORT,"Hello")
189
+ sleep 10
190
+ end
191
+
192
+ puts "Test End !"
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: minitcp
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.10.0
5
+ platform: ruby
6
+ authors:
7
+ - Regis d'Aubarede
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-24 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: |
14
+ A DSL for programming little Tcp client and server
15
+ email: regis.aubarede@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - CHANGELOG.txt
21
+ - lib/minitcp.rb
22
+ - LICENSE
23
+ - minitcp.gemspec
24
+ - Rakefile.rb
25
+ - README.md
26
+ - samples/name_server.rb
27
+ - samples/pingpongplot.rb
28
+ - samples/plot.rb
29
+ - samples/proxy.rb
30
+ - samples/README.md
31
+ - samples/relay/c.rb
32
+ - samples/relay/README.md
33
+ - samples/relay/relaiproxy.rb
34
+ - samples/relay/relai_config.data
35
+ - samples/relay.rb
36
+ - samples/spdy.rb
37
+ - samples/statcpu.rb
38
+ - test.rb
39
+ - VERSION
40
+ homepage: https://github.com/glurp/minitcp
41
+ licenses:
42
+ - LGPL
43
+ metadata: {}
44
+ post_install_message:
45
+ rdoc_options: []
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - '>='
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ requirements: []
59
+ rubyforge_project:
60
+ rubygems_version: 2.1.7
61
+ signing_key:
62
+ specification_version: 3
63
+ summary: A DSL for programming little Tcp client and server
64
+ test_files:
65
+ - samples/name_server.rb
66
+ - samples/pingpongplot.rb
67
+ - samples/plot.rb
68
+ - samples/proxy.rb
69
+ - samples/README.md
70
+ - samples/relay.rb
71
+ - samples/spdy.rb
72
+ - samples/statcpu.rb