femtows 1.6.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/demo2.rb +13 -0
- data/lib/femtows.rb +60 -47
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7e446685cf3d269110e6758dfed9ed0ef1512c7a
|
4
|
+
data.tar.gz: 17d06da5c51fabc47474e0bc26441fbbd649377c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f67a10a904e8f73d9b75adf196d6b398a8445f0498f9e0fb906d84fa9d75e26d13e1439d97bc71b1598007c258013d991b95f85d913fb21264045651ef49031
|
7
|
+
data.tar.gz: feeff779208483049174bf9d8fcadeb71563a94dd1fa2ca513664dc1d25c932e2fd2eace167fa178b1fe21cdcfb37bbd8e486701767a9424d5e62509f09ff7c4
|
data/demo2.rb
ADDED
@@ -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
|
data/lib/femtows.rb
CHANGED
@@ -38,23 +38,22 @@ class WebserverAbstract
|
|
38
38
|
end ; end
|
39
39
|
end
|
40
40
|
def initialize(port,root,name,cadence,timeout,options)
|
41
|
-
|
42
|
-
|
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
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
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
|
-
|
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
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
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:
|
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-
|
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] \
|
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
|