minitcp 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|