femtows 1.6.0 → 2.0.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 +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
|