minitcp 0.10.0

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