femtows 1.6.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/demo2.rb +13 -0
  3. data/lib/femtows.rb +60 -47
  4. metadata +5 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cb91e5bf92627376e1417d32a8c897ac196510f6
4
- data.tar.gz: 5c1667b4230b70efbb72e565078765b1ccf6d0cd
3
+ metadata.gz: 7e446685cf3d269110e6758dfed9ed0ef1512c7a
4
+ data.tar.gz: 17d06da5c51fabc47474e0bc26441fbbd649377c
5
5
  SHA512:
6
- metadata.gz: f4ff73c70c9654078d76304b054662e06be080d230b64cec0c1fffdab2a425ba8c3beda4f6db170cc1c3608dd8d21ce23262c0665880154c201a96523c3e1764
7
- data.tar.gz: 77732c765e07894cfa92f266d9a8109b126dce1fbf41b9b39a8cafbf0cb59263c3e2f3cbbfa352e94061a88c630c2cb24e0fd47745551ce03d90f840916508b0
6
+ metadata.gz: 6f67a10a904e8f73d9b75adf196d6b398a8445f0498f9e0fb906d84fa9d75e26d13e1439d97bc71b1598007c258013d991b95f85d913fb21264045651ef49031
7
+ data.tar.gz: feeff779208483049174bf9d8fcadeb71563a94dd1fa2ca513664dc1d25c932e2fd2eace167fa178b1fe21cdcfb37bbd8e486701767a9424d5e62509f09ff7c4
@@ -0,0 +1,13 @@
1
+ require_relative "lib/femtows.rb"
2
+
3
+ class App < Fem
4
+ def get_app_html(p)
5
+ "<html><body><h2><center>Hello</center></h2><hr><p>#{content}</p><hr><center>[femtows]</center></body>"
6
+ end
7
+ def content
8
+ to_tableb(Dir.glob("*.rb")) {|f| [f,File.size(f),File.mtime(f)]}
9
+ end
10
+ end
11
+
12
+ App.new(ARGV[0].to_i)
13
+ sleep
@@ -38,23 +38,22 @@ class WebserverAbstract
38
38
  end ; end
39
39
  end
40
40
  def initialize(port,root,name,cadence,timeout,options)
41
- raise("tcp port illegal #{port}") unless port.to_i>=80
42
- raise("root not exist #{root}") unless File.exists?(root)
41
+ raise("tcp port illegal #{port}") unless port.to_i>=80
42
+ raise("root not exist #{root}") unless File.exists?(root)
43
43
  @cb_log= options["logg"]
44
44
  @last_mtime=File.mtime(__FILE__)
45
- @port=port.to_i
46
- @root=root
47
- @name=name
48
- @rootd=root[-1,1]=="/" ? root : root+"/"
49
- @timeout=timeout
50
- @th={}
51
- @cb={}
52
- @redirect={}
53
- info(" serveur http #{port} on #{@rootd} ready!")
54
- observe(cadence,timeout*2)
55
- pool_create
56
- @thm=Thread.new {
57
- loop {
45
+ @port=port.to_i
46
+ @root=root
47
+ @name=name
48
+ @rootd=root[-1,1]=="/" ? root : root+"/"
49
+ @timeout=timeout
50
+ @th={}
51
+ @cb={}
52
+ @redirect={}
53
+ info(" serveur http #{port} on #{@rootd} ready!")
54
+ observe(cadence,timeout*2)
55
+ pool_create
56
+ @thm=Thread.new { sleep(0.1); loop {
58
57
  nbError=0
59
58
  begin
60
59
  session=nil
@@ -71,8 +70,7 @@ class WebserverAbstract
71
70
  @server.close rescue nil
72
71
  end
73
72
  sleep(3); info("restart accept")
74
- }
75
- }
73
+ } }
76
74
  end
77
75
  def pool_create
78
76
  @queue=Queue.new
@@ -93,7 +91,8 @@ class WebserverAbstract
93
91
  end
94
92
  end
95
93
  def serve(uri,&blk)
96
- @cb[uri] = blk
94
+ @cb[uri] = blk
95
+ puts(" registered #{uri}")
97
96
  end
98
97
  def request(session)
99
98
  request = session.gets
@@ -138,34 +137,34 @@ class WebserverAbstract
138
137
  @redirect[o]=d
139
138
  end
140
139
  def do_service(session,request,service,user_passwd,params)
141
- redir=@redirect["/"+service]
142
- service=redir.gsub(/^\//,"") if @redirect[redir]
143
- aservice=to_absolute(service)
144
- if redir && ! @redirect[redir]
145
- do_service(session,request,redir.gsub(/^\//,""),user_passwd,params)
146
- elsif @cb["/"+service]
147
- begin
148
- code,type,data= @cb["/"+service].call(params)
149
- if code==0 && data != '/'+service
150
- do_service(session,request,data[1..-1],user_passwd,params)
151
- else
152
- code==200 ? sendData(session,type,data) : sendError(session,code,data)
153
- end
154
- rescue
155
- logg session.peeraddr.last,"Error in get /#{service} : #{$!}"
156
- sendError(session,501,$!.to_s)
157
- end
158
- elsif service =~ /^stop/
159
- sendData(session,".html","Stopping...");
160
- Thread.new() { sleep(0.1); stop_browser() }
161
- elsif File.directory?(aservice)
162
- sendData(session,".html",makeIndex(aservice))
163
- elsif File.exists?(aservice)
164
- sendFile(session,aservice)
165
- else
166
- info("unknown request serv=#{service} params=#{params.inspect} #{File.exists?(service)}")
167
- sendError(session,500,"unknown request serv=#{aservice} params=#{params.inspect} #{File.exists?(service)}");
168
- end
140
+ redir=@redirect["/"+service]
141
+ service=redir.gsub(/^\//,"") if @redirect[redir]
142
+ aservice=to_absolute(service)
143
+ if redir && ! @redirect[redir]
144
+ do_service(session,request,redir.gsub(/^\//,""),user_passwd,params)
145
+ elsif @cb["/"+service]
146
+ begin
147
+ code,type,data= @cb["/"+service].call(params)
148
+ if code==0 && data != '/'+service
149
+ do_service(session,request,data[1..-1],user_passwd,params)
150
+ else
151
+ code==200 ? sendData(session,type,data) : sendError(session,code,data)
152
+ end
153
+ rescue
154
+ logg session.peeraddr.last,"Error in get /#{service} : #{$!}"
155
+ sendError(session,501,"#{$!} : at #{$!.backtrace.first}")
156
+ end
157
+ elsif service =~ /^stop/
158
+ sendData(session,".html","Stopping...");
159
+ Thread.new() { sleep(0.1); stop_browser() }
160
+ elsif File.directory?(aservice)
161
+ sendData(session,".html",makeIndex(aservice))
162
+ elsif File.exists?(aservice)
163
+ sendFile(session,aservice)
164
+ else
165
+ info("unknown request serv=#{service} params=#{params.inspect} #{File.exists?(service)}")
166
+ sendError(session,500,"unknown request serv=#{aservice} params=#{params.inspect} #{File.exists?(service)}");
167
+ end
169
168
  end
170
169
  def stop_browser
171
170
  info "exit on web demand !"
@@ -226,7 +225,7 @@ class WebserverAbstract
226
225
  end
227
226
  }
228
227
  end
229
- def httpdate( aTime ); (aTime||Time.now).gmtime.strftime( "%a, %d %b %Y %H:%M:%S GMT" ); end
228
+ def httpdate( aTime=nil ); (aTime||Time.now).gmtime.strftime( "%a, %d %b %Y %H:%M:%S GMT" ); end
230
229
  def mime(string)
231
230
  MIME[string.split(/\./).last] || "application/octet-stream"
232
231
  end
@@ -261,3 +260,17 @@ def cliweb(root=Dir.getwd,port=59999)
261
260
  puts "Server root path #{root} with port #{port}"
262
261
  sleep
263
262
  end
263
+ ###################### another api
264
+ class Fem < WebserverAbstract
265
+ def initialize(port=7080,root=".",name="wwww",cadence=10,timeout=120)
266
+ super(port,root,name,cadence,timeout,{})
267
+ introspect
268
+ end
269
+ def introspect()
270
+ exp=/^(get|post)_(\w[\w\d]*)_(\w+)$/
271
+ methods.grep(exp).each { |name|
272
+ all,method,key,mime= exp.match(name).to_a
273
+ serve("/#{key}") { |par| [200,".#{mime}",self.send(all,par)] }
274
+ }
275
+ end
276
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: femtows
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Glurp man
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-18 00:00:00.000000000 Z
11
+ date: 2015-07-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: "a tiny web server, for local file transfert, \nembedded, http experimentations\n"
14
14
  email: regis.aubarede@gmail.com
@@ -21,6 +21,7 @@ files:
21
21
  - bin/femtows.bat
22
22
  - bin/femtows.sh
23
23
  - demo.rb
24
+ - demo2.rb
24
25
  - gitc.bat
25
26
  - guidemo.rb
26
27
  - lib/femtows.rb
@@ -28,7 +29,8 @@ homepage: http://github.com/glurp/femtows
28
29
  licenses: []
29
30
  metadata: {}
30
31
  post_install_message: "-------------------------------------------------------------------------------\nHello,
31
- welcome to Femto Web Server....\n\n$ femtows [port,[root-directory] \n\n-------------------------------------------------------------------------------\n"
32
+ welcome to Femto Web Server....\n\n$ femtows.sh [port,[root-directory] \nor\n$ femtows.bat
33
+ [port,[root-directory] \n\n-------------------------------------------------------------------------------\n"
32
34
  rdoc_options: []
33
35
  require_paths:
34
36
  - lib