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.
- checksums.yaml +7 -0
- data/CHANGELOG.txt +42 -0
- data/LICENSE +2 -0
- data/README.md +200 -0
- data/Rakefile.rb +217 -0
- data/VERSION +1 -0
- data/lib/minitcp.rb +341 -0
- data/minitcp.gemspec +37 -0
- data/samples/README.md +19 -0
- data/samples/name_server.rb +131 -0
- data/samples/pingpongplot.rb +26 -0
- data/samples/plot.rb +190 -0
- data/samples/proxy.rb +46 -0
- data/samples/relay/README.md +41 -0
- data/samples/relay/c.rb +21 -0
- data/samples/relay/relai_config.data +4 -0
- data/samples/relay/relaiproxy.rb +180 -0
- data/samples/relay.rb +102 -0
- data/samples/spdy.rb +43 -0
- data/samples/statcpu.rb +37 -0
- data/test.rb +192 -0
- metadata +72 -0
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
|