knjrbfw 0.0.3
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.
- data/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +32 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +49 -0
- data/VERSION +1 -0
- data/lib/knj/.gitignore +1 -0
- data/lib/knj/arrayext.rb +157 -0
- data/lib/knj/autoload/activesupport.rb +2 -0
- data/lib/knj/autoload/backups/facets_dictionary.rb +430 -0
- data/lib/knj/autoload/backups/parsedate.rb +53 -0
- data/lib/knj/autoload/backups/ping.rb +64 -0
- data/lib/knj/autoload/cinch.rb +2 -0
- data/lib/knj/autoload/erubis.rb +6 -0
- data/lib/knj/autoload/facebooker.rb +3 -0
- data/lib/knj/autoload/facets_dictionary.rb +7 -0
- data/lib/knj/autoload/gd2.rb +2 -0
- data/lib/knj/autoload/gettext.rb +9 -0
- data/lib/knj/autoload/gtk2.rb +5 -0
- data/lib/knj/autoload/json_autoload.rb +7 -0
- data/lib/knj/autoload/magick.rb +6 -0
- data/lib/knj/autoload/mysql.rb +6 -0
- data/lib/knj/autoload/parsedate.rb +1 -0
- data/lib/knj/autoload/ping.rb +64 -0
- data/lib/knj/autoload/rexml.rb +12 -0
- data/lib/knj/autoload/soap.rb +3 -0
- data/lib/knj/autoload/sqlite3.rb +6 -0
- data/lib/knj/autoload/tmail.rb +6 -0
- data/lib/knj/autoload/twitter.rb +2 -0
- data/lib/knj/autoload/xmlsimple.rb +6 -0
- data/lib/knj/autoload/zip.rb +6 -0
- data/lib/knj/autoload.rb +136 -0
- data/lib/knj/compiler.rb +53 -0
- data/lib/knj/cpufreq.rb +40 -0
- data/lib/knj/datarow.rb +256 -0
- data/lib/knj/datestamp.rb +91 -0
- data/lib/knj/datet.rb +448 -0
- data/lib/knj/degulesider.rb +46 -0
- data/lib/knj/erb/apache_knjerb.conf +8 -0
- data/lib/knj/erb/cache/README +1 -0
- data/lib/knj/erb/erb.rb +21 -0
- data/lib/knj/erb/erb_1.9.rb +13 -0
- data/lib/knj/erb/erb_cache_clean.rb +20 -0
- data/lib/knj/erb/erb_fcgi.rb +44 -0
- data/lib/knj/erb/erb_fcgi_1.9.rb +44 -0
- data/lib/knj/erb/erb_fcgi_jruby.rb +7 -0
- data/lib/knj/erb/erb_jruby.rb +22 -0
- data/lib/knj/erb/include.rb +248 -0
- data/lib/knj/errors.rb +19 -0
- data/lib/knj/eruby.rb +224 -0
- data/lib/knj/event_filemod.rb +53 -0
- data/lib/knj/event_handler.rb +69 -0
- data/lib/knj/exchangerates.rb +39 -0
- data/lib/knj/ext/webrick.rb +31 -0
- data/lib/knj/filesystem.rb +8 -0
- data/lib/knj/fs/drivers/filesystem.rb +14 -0
- data/lib/knj/fs/drivers/ftp.rb +33 -0
- data/lib/knj/fs/drivers/ssh.rb +28 -0
- data/lib/knj/fs/fs.rb +36 -0
- data/lib/knj/gettext_fallback.rb +17 -0
- data/lib/knj/gettext_threadded.rb +77 -0
- data/lib/knj/google_sitemap.rb +59 -0
- data/lib/knj/gtk2.rb +277 -0
- data/lib/knj/gtk2_cb.rb +85 -0
- data/lib/knj/gtk2_menu.rb +57 -0
- data/lib/knj/gtk2_statuswindow.rb +64 -0
- data/lib/knj/gtk2_tv.rb +63 -0
- data/lib/knj/hash_methods.rb +37 -0
- data/lib/knj/http.rb +190 -0
- data/lib/knj/includes/appserver_cli.rb +39 -0
- data/lib/knj/ip2location.rb +22 -0
- data/lib/knj/ironruby-gtk2/button.rb +19 -0
- data/lib/knj/ironruby-gtk2/dialog.rb +44 -0
- data/lib/knj/ironruby-gtk2/entry.rb +9 -0
- data/lib/knj/ironruby-gtk2/gdk_event.rb +3 -0
- data/lib/knj/ironruby-gtk2/gdk_eventbutton.rb +13 -0
- data/lib/knj/ironruby-gtk2/gdk_pixbuf.rb +11 -0
- data/lib/knj/ironruby-gtk2/gladexml.rb +104 -0
- data/lib/knj/ironruby-gtk2/glib.rb +15 -0
- data/lib/knj/ironruby-gtk2/gtk2.rb +148 -0
- data/lib/knj/ironruby-gtk2/gtk_builder.rb +31 -0
- data/lib/knj/ironruby-gtk2/gtk_cellrenderertext.rb +5 -0
- data/lib/knj/ironruby-gtk2/gtk_combobox.rb +19 -0
- data/lib/knj/ironruby-gtk2/gtk_filechooserbutton.rb +5 -0
- data/lib/knj/ironruby-gtk2/gtk_liststore.rb +18 -0
- data/lib/knj/ironruby-gtk2/gtk_menu.rb +5 -0
- data/lib/knj/ironruby-gtk2/gtk_menuitem.rb +7 -0
- data/lib/knj/ironruby-gtk2/gtk_statusicon.rb +8 -0
- data/lib/knj/ironruby-gtk2/gtk_treeiter.rb +24 -0
- data/lib/knj/ironruby-gtk2/gtk_treeselection.rb +16 -0
- data/lib/knj/ironruby-gtk2/gtk_treeview.rb +19 -0
- data/lib/knj/ironruby-gtk2/gtk_treeviewcolumn.rb +32 -0
- data/lib/knj/ironruby-gtk2/iconsize.rb +3 -0
- data/lib/knj/ironruby-gtk2/image.rb +15 -0
- data/lib/knj/ironruby-gtk2/label.rb +19 -0
- data/lib/knj/ironruby-gtk2/stock.rb +4 -0
- data/lib/knj/ironruby-gtk2/tests/test.glade +15 -0
- data/lib/knj/ironruby-gtk2/tests/test_2.rb +22 -0
- data/lib/knj/ironruby-gtk2/tests/test_ironruby_window.rb +47 -0
- data/lib/knj/ironruby-gtk2/vbox.rb +5 -0
- data/lib/knj/ironruby-gtk2/window.rb +23 -0
- data/lib/knj/jruby-gtk2/builder/test_builder.glade +43 -0
- data/lib/knj/jruby-gtk2/builder/test_builder.rb +19 -0
- data/lib/knj/jruby-gtk2/builder/test_builder.ui +43 -0
- data/lib/knj/jruby-gtk2/builder.rb +27 -0
- data/lib/knj/jruby-gtk2/cellrenderertext.rb +12 -0
- data/lib/knj/jruby-gtk2/checkbutton.rb +3 -0
- data/lib/knj/jruby-gtk2/combobox.rb +29 -0
- data/lib/knj/jruby-gtk2/dialog.rb +44 -0
- data/lib/knj/jruby-gtk2/eventbutton.rb +21 -0
- data/lib/knj/jruby-gtk2/gladexml.rb +99 -0
- data/lib/knj/jruby-gtk2/gtk-4.0.jar +0 -0
- data/lib/knj/jruby-gtk2/gtk2.rb +246 -0
- data/lib/knj/jruby-gtk2/hbox.rb +10 -0
- data/lib/knj/jruby-gtk2/iconsize.rb +5 -0
- data/lib/knj/jruby-gtk2/image.rb +10 -0
- data/lib/knj/jruby-gtk2/liststore.rb +56 -0
- data/lib/knj/jruby-gtk2/menu.rb +40 -0
- data/lib/knj/jruby-gtk2/progressbar.rb +12 -0
- data/lib/knj/jruby-gtk2/statusicon.rb +8 -0
- data/lib/knj/jruby-gtk2/stock.rb +8 -0
- data/lib/knj/jruby-gtk2/tests/test_glade_window.glade +163 -0
- data/lib/knj/jruby-gtk2/tests/test_glade_window.rb +47 -0
- data/lib/knj/jruby-gtk2/tests/test_normal_window.rb +17 -0
- data/lib/knj/jruby-gtk2/tests/test_trayicon.png +0 -0
- data/lib/knj/jruby-gtk2/tests/test_trayicon.rb +18 -0
- data/lib/knj/jruby-gtk2/treeview.rb +105 -0
- data/lib/knj/jruby-gtk2/vbox.rb +12 -0
- data/lib/knj/jruby-gtk2/window.rb +11 -0
- data/lib/knj/jruby_compiler.rb +14 -0
- data/lib/knj/knj.rb +19 -0
- data/lib/knj/knj_controller.rb +13 -0
- data/lib/knj/knjdb/dbtime.rb +30 -0
- data/lib/knj/knjdb/drivers/mysql/knjdb_mysql.rb +327 -0
- data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_columns.rb +130 -0
- data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_indexes.rb +30 -0
- data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb +255 -0
- data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3.rb +93 -0
- data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb +151 -0
- data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_indexes.rb +29 -0
- data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_tables.rb +300 -0
- data/lib/knj/knjdb/libknjdb.rb +438 -0
- data/lib/knj/knjdb/libknjdb_java_sqlite3.rb +83 -0
- data/lib/knj/knjdb/libknjdb_row.rb +149 -0
- data/lib/knj/knjdb/libknjdb_sqlite3_ironruby.rb +69 -0
- data/lib/knj/knjdb/mysql-connector-java-5.1.13-bin.jar +0 -0
- data/lib/knj/knjdb/sqlitejdbc-v056.jar +0 -0
- data/lib/knj/libqt.rb +75 -0
- data/lib/knj/libqt_window.rb +10 -0
- data/lib/knj/locale_strings.rb +3 -0
- data/lib/knj/locales.rb +54 -0
- data/lib/knj/maemo/fremantle-calendar/fremantle-calendar.rb +56 -0
- data/lib/knj/mail.rb +75 -0
- data/lib/knj/mailobj.rb +82 -0
- data/lib/knj/mount.rb +115 -0
- data/lib/knj/notify.rb +13 -0
- data/lib/knj/nvidia_settings.rb +45 -0
- data/lib/knj/objects.rb +731 -0
- data/lib/knj/opts.rb +38 -0
- data/lib/knj/os.rb +158 -0
- data/lib/knj/php.rb +717 -0
- data/lib/knj/php_parser/arguments.rb +5 -0
- data/lib/knj/php_parser/functions.rb +97 -0
- data/lib/knj/php_parser/php_parser.rb +99 -0
- data/lib/knj/php_parser/tests/test.rb +12 -0
- data/lib/knj/php_parser/tests/test_function.php +8 -0
- data/lib/knj/php_parser/tests/test_function_run.rb +19 -0
- data/lib/knj/power_manager.rb +31 -0
- data/lib/knj/rand.rb +10 -0
- data/lib/knj/retry.rb +71 -0
- data/lib/knj/rhodes/mutex.rb +11 -0
- data/lib/knj/rhodes/rhodes.js +3 -0
- data/lib/knj/rhodes/rhodes.rb +11 -0
- data/lib/knj/rsvgbin.rb +20 -0
- data/lib/knj/scripts/degulesider.rb +12 -0
- data/lib/knj/scripts/filesearch.rb +51 -0
- data/lib/knj/scripts/ip2location.rb +12 -0
- data/lib/knj/scripts/keepalive.rb +6 -0
- data/lib/knj/scripts/svn_merge.rb +29 -0
- data/lib/knj/scripts/upgrade_knjrbfw_checker.rb +41 -0
- data/lib/knj/sms.rb +54 -0
- data/lib/knj/sshrobot/sshrobot.rb +93 -0
- data/lib/knj/strings.rb +65 -0
- data/lib/knj/sysuser.rb +27 -0
- data/lib/knj/tests/compiler/compiler_test.rb +13 -0
- data/lib/knj/tests/compiler/compiler_test_file.rb +62 -0
- data/lib/knj/tests/test_degulesider.rb +11 -0
- data/lib/knj/tests/test_mount.rb +30 -0
- data/lib/knj/tests/test_retry.rb +30 -0
- data/lib/knj/thread.rb +32 -0
- data/lib/knj/thread2.rb +47 -0
- data/lib/knj/threadhandler.rb +130 -0
- data/lib/knj/threadpool.rb +177 -0
- data/lib/knj/translations.rb +139 -0
- data/lib/knj/unix_proc.rb +82 -0
- data/lib/knj/web.rb +932 -0
- data/lib/knj/webscripts/image.rhtml +82 -0
- data/lib/knj/win.rb +4 -0
- data/lib/knj/win_registry.rb +60 -0
- data/lib/knj/win_tightvnc.rb +127 -0
- data/lib/knj/x11vnc.rb +48 -0
- data/lib/knj/youtube.rb +38 -0
- data/lib/knjrbfw.rb +4 -0
- data/spec/knjrbfw_spec.rb +269 -0
- data/spec/spec_helper.rb +12 -0
- metadata +336 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
class Knj::SSHRobot
|
|
2
|
+
def initialize(args)
|
|
3
|
+
@forwards = []
|
|
4
|
+
@args = Knj::ArrayExt.hash_sym(args)
|
|
5
|
+
@args[:port] = 22 if !@args.has_key?(:port)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def session
|
|
9
|
+
@session = self.session_spawn if !@session
|
|
10
|
+
return @session
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def session_spawn
|
|
14
|
+
return Net::SSH.start(@args[:host], @args[:user], :password => @args[:passwd], :port => @args[:port].to_i)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def shell
|
|
18
|
+
return self.session.shell.sync
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def sftp
|
|
22
|
+
@sftp = Net::SFTP.start(@args[:host], @args[:user], @args[:passwd], :port => @args[:port].to_i)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def exec(command)
|
|
26
|
+
return self.session.exec!(command)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def fileExists(filepath)
|
|
30
|
+
result = self.exec("ls " + Strings.UnixSafe(filepath)).strip
|
|
31
|
+
|
|
32
|
+
if result == filepath
|
|
33
|
+
return true
|
|
34
|
+
else
|
|
35
|
+
return false
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def forward(args)
|
|
40
|
+
Knj::ArrayExt.hash_sym(args)
|
|
41
|
+
args[:type] = "local" if !args[:type]
|
|
42
|
+
args[:session] = self.session_spawn if !args[:session]
|
|
43
|
+
args[:host_local] = "0.0.0.0" if !args[:host_local]
|
|
44
|
+
|
|
45
|
+
return SSHRobot::Forward.new(args)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
alias getShell shell
|
|
49
|
+
alias getSFTP sftp
|
|
50
|
+
alias shellCMD exec
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
class Knj::SSHRobot::Forward
|
|
54
|
+
attr_reader :open
|
|
55
|
+
|
|
56
|
+
def initialize(args)
|
|
57
|
+
@open = true
|
|
58
|
+
@args = args
|
|
59
|
+
@thread = Knj::Thread.new do
|
|
60
|
+
begin
|
|
61
|
+
#args[:session].logger.sev_threshold = Logger::Severity::DEBUG
|
|
62
|
+
if args[:type] == "local"
|
|
63
|
+
@args[:session].forward.local(@args[:host_local], @args[:port_local].to_i, @args[:host], @args[:port_remote].to_i)
|
|
64
|
+
elsif args[:type] == "remote"
|
|
65
|
+
@args[:session].forward.remote_to(@args[:port_local], @args[:host], @args[:port_remote], @args[:host_local])
|
|
66
|
+
else
|
|
67
|
+
raise "No valid type given."
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
@args[:session].loop do
|
|
71
|
+
true
|
|
72
|
+
end
|
|
73
|
+
rescue Exception => e
|
|
74
|
+
puts e.inspect
|
|
75
|
+
puts e.backtrace
|
|
76
|
+
|
|
77
|
+
@open = false
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def close
|
|
83
|
+
if !@args
|
|
84
|
+
return nil
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
@args[:session].close
|
|
88
|
+
@open = false
|
|
89
|
+
@thread.exit
|
|
90
|
+
@args = nil
|
|
91
|
+
@thread = nil
|
|
92
|
+
end
|
|
93
|
+
end
|
data/lib/knj/strings.rb
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
module Knj::Strings
|
|
2
|
+
def self.UnixSafe(tha_string)
|
|
3
|
+
return tha_string.to_s.gsub(" ", "\\ ").gsub("&", "\&").gsub("(", "\\(").gsub(")", "\\)").gsub('"', '\"').gsub("\n", "\"\n\"")
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def self.unixsafe(string)
|
|
7
|
+
return Knj::Strings.UnixSafe(string)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def self.searchstring(string)
|
|
11
|
+
words = []
|
|
12
|
+
string = string.to_s
|
|
13
|
+
|
|
14
|
+
matches = string.scan /(\"(.+?)\")/
|
|
15
|
+
matches.each do |matcharr|
|
|
16
|
+
word = matcharr[1]
|
|
17
|
+
|
|
18
|
+
if word and word.length > 0
|
|
19
|
+
words << matcharr[1]
|
|
20
|
+
string = string.gsub(matcharr[0], "")
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
string.split(/\s/).each do |word|
|
|
25
|
+
words << word if word and word.length > 0
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
return words
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def self.is_email?(str)
|
|
32
|
+
return true if str.to_s.match(/^\S+@\S+\.\S+$/)
|
|
33
|
+
return false
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def self.is_phonenumber?(str)
|
|
37
|
+
return true if str.to_s.match(/^\+\d{2}\d+$/)
|
|
38
|
+
return false
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def self.js_safe(str)
|
|
42
|
+
return str.gsub("\r", "").gsub("\n", "\\n").gsub('"', '\"');
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def self.yn_str(value, str_yes, str_no)
|
|
46
|
+
value = value.to_i if Knj::Php.is_numeric(value)
|
|
47
|
+
|
|
48
|
+
if value.is_a?(Integer)
|
|
49
|
+
if value == 0
|
|
50
|
+
return str_no
|
|
51
|
+
else
|
|
52
|
+
return str_yes
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
return str_no if !value
|
|
57
|
+
return str_yes
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def self.shorten(str, maxlength)
|
|
61
|
+
str = str.to_s
|
|
62
|
+
str = str.slice(0..(maxlength - 1)).strip + "..." if str.length > maxlength
|
|
63
|
+
return str
|
|
64
|
+
end
|
|
65
|
+
end
|
data/lib/knj/sysuser.rb
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
class Knj::Sysuser
|
|
2
|
+
def initialize(data)
|
|
3
|
+
@data = data
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def self.list(paras = {})
|
|
7
|
+
cont = File.read("/etc/passwd")
|
|
8
|
+
|
|
9
|
+
list = []
|
|
10
|
+
cont.split("\n").each do |line|
|
|
11
|
+
linearr = line.split(":")
|
|
12
|
+
|
|
13
|
+
list << Knj::Sysuser.new(
|
|
14
|
+
"nick" => linearr[0],
|
|
15
|
+
"home" => linearr[5],
|
|
16
|
+
"shell" => linearr[6]
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
return list
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def [](key)
|
|
24
|
+
raise "No such key: " + key if !@data.has_key?(key)
|
|
25
|
+
return @data[key]
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require "knj/knj"
|
|
2
|
+
require "knj/compiler"
|
|
3
|
+
|
|
4
|
+
compiler = Knj::Compiler.new
|
|
5
|
+
|
|
6
|
+
time_start = Time.new.to_f
|
|
7
|
+
|
|
8
|
+
#0.upto(10000) do
|
|
9
|
+
compiler.eval_file("compiler_test_file.rb")
|
|
10
|
+
#end
|
|
11
|
+
|
|
12
|
+
time_spent = Time.new.to_f - time_start
|
|
13
|
+
print "#{time_spent}\n"
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# The Computer Language Benchmarks Game
|
|
2
|
+
# http://shootout.alioth.debian.org/
|
|
3
|
+
#
|
|
4
|
+
# contributed by Karl von Laudermann
|
|
5
|
+
# modified by Jeremy Echols
|
|
6
|
+
# modified by Detlef Reichl
|
|
7
|
+
# modified by Joseph LaFata
|
|
8
|
+
# modified by Peter Zotov
|
|
9
|
+
|
|
10
|
+
size = ARGV.shift.to_i
|
|
11
|
+
|
|
12
|
+
puts "P4\n#{size} #{size}"
|
|
13
|
+
|
|
14
|
+
byte_acc = 0
|
|
15
|
+
bit_num = 0
|
|
16
|
+
|
|
17
|
+
y = 0
|
|
18
|
+
while y < size
|
|
19
|
+
ci = (2.0*y/size)-1.0
|
|
20
|
+
|
|
21
|
+
x = 0
|
|
22
|
+
while x < size
|
|
23
|
+
zrzr = zr = 0.0
|
|
24
|
+
zizi = zi = 0.0
|
|
25
|
+
cr = (2.0*x/size)-1.5
|
|
26
|
+
escape = 0b1
|
|
27
|
+
|
|
28
|
+
z = 0
|
|
29
|
+
while z < 50
|
|
30
|
+
tr = zrzr - zizi + cr
|
|
31
|
+
ti = 2.0*zr*zi + ci
|
|
32
|
+
zr = tr
|
|
33
|
+
zi = ti
|
|
34
|
+
# preserve recalculation
|
|
35
|
+
zrzr = zr*zr
|
|
36
|
+
zizi = zi*zi
|
|
37
|
+
if zrzr+zizi > 4.0
|
|
38
|
+
escape = 0b0
|
|
39
|
+
break
|
|
40
|
+
end
|
|
41
|
+
z += 1
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
byte_acc = (byte_acc << 1) | escape
|
|
45
|
+
bit_num += 1
|
|
46
|
+
|
|
47
|
+
# Code is very similar for these cases, but using separate blocks
|
|
48
|
+
# ensures we skip the shifting when it's unnecessary, which is most cases.
|
|
49
|
+
if (bit_num == 8)
|
|
50
|
+
print byte_acc.chr
|
|
51
|
+
byte_acc = 0
|
|
52
|
+
bit_num = 0
|
|
53
|
+
elsif (x == size - 1)
|
|
54
|
+
byte_acc <<= (8 - bit_num)
|
|
55
|
+
print byte_acc.chr
|
|
56
|
+
byte_acc = 0
|
|
57
|
+
bit_num = 0
|
|
58
|
+
end
|
|
59
|
+
x += 1
|
|
60
|
+
end
|
|
61
|
+
y += 1
|
|
62
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
Dir.chdir(File.dirname(__FILE__))
|
|
4
|
+
require "../autoload"
|
|
5
|
+
|
|
6
|
+
print "Listing all mounts.\n"
|
|
7
|
+
mounts = Knj::Mount.list
|
|
8
|
+
mounts.each do |mount|
|
|
9
|
+
Knj::Php.print_r(mount.data)
|
|
10
|
+
print "Access: #{mount.access?}\n\n"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
mounts = Knj::Mount.list("from_search" => "test_dir")
|
|
14
|
+
mounts.each do |mount|
|
|
15
|
+
print "Unmounting test_dir.\n"
|
|
16
|
+
mount.umount
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
print "Mount binding test_dir to test_dir_to.\n"
|
|
20
|
+
Knj::Mount.mount(
|
|
21
|
+
"from" => "test_dir",
|
|
22
|
+
"to" => "test_dir_to",
|
|
23
|
+
"bind" => true
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
mounts = Knj::Mount.list("from_search" => "test_dir")
|
|
27
|
+
mounts.each do |mount|
|
|
28
|
+
print "Unmounting test_dir.\n"
|
|
29
|
+
mount.umount
|
|
30
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
Dir.chdir(File.dirname(__FILE__))
|
|
4
|
+
require "../autoload"
|
|
5
|
+
|
|
6
|
+
count = 0
|
|
7
|
+
result = Knj::Retry.try(
|
|
8
|
+
:exit => false,
|
|
9
|
+
:interrupt => true,
|
|
10
|
+
:errors => [Knj::Errors::NotFound, RuntimeError],
|
|
11
|
+
:timeout => 1,
|
|
12
|
+
:tries => 3,
|
|
13
|
+
:return_error => true
|
|
14
|
+
) do
|
|
15
|
+
count += 1
|
|
16
|
+
print "Count: #{count.to_s}\n"
|
|
17
|
+
|
|
18
|
+
if count <= 2
|
|
19
|
+
exit
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
if count <= 3
|
|
23
|
+
|
|
24
|
+
#raise "Test"
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
#print "Error 1 was a #{result[0][:error].class.to_s} with the message: #{result[0][:error].message.to_s}\n"
|
|
29
|
+
|
|
30
|
+
Knj::Php.print_r(result)
|
data/lib/knj/thread.rb
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#This class behaves like a normal thread - but it shows error-messages and tracebacks. Normal threads dont do that.
|
|
2
|
+
class Knj::Thread < Thread
|
|
3
|
+
attr_accessor :data
|
|
4
|
+
|
|
5
|
+
def initialize(*args, &block)
|
|
6
|
+
@data = {}
|
|
7
|
+
raise "No block was given." if !block_given?
|
|
8
|
+
|
|
9
|
+
abort_on_exception = true
|
|
10
|
+
super(*args) do
|
|
11
|
+
begin
|
|
12
|
+
block.call(*args)
|
|
13
|
+
rescue SystemExit
|
|
14
|
+
exit
|
|
15
|
+
rescue Exception => e
|
|
16
|
+
print "Error: "
|
|
17
|
+
puts e.inspect
|
|
18
|
+
print "\n"
|
|
19
|
+
puts e.backtrace
|
|
20
|
+
print "\n\n"
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def [](key)
|
|
26
|
+
return @data[key]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def []=(key, value)
|
|
30
|
+
return @data[key] = value
|
|
31
|
+
end
|
|
32
|
+
end
|
data/lib/knj/thread2.rb
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
class Knj::Thread2
|
|
2
|
+
def initialize(args = {}, &block)
|
|
3
|
+
@args = args
|
|
4
|
+
@block = block if block_given?
|
|
5
|
+
@callbacks = {}
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def connect(signal, &block)
|
|
9
|
+
@callbacks[signal] = [] if !@callbacks.has_key?(signal)
|
|
10
|
+
@callbacks[signal] << block
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def call(signal, *args)
|
|
14
|
+
return false if !@callbacks.has_key?(signal)
|
|
15
|
+
@callbacks[signal].each do |block|
|
|
16
|
+
block.call(*args)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
return {:count => count}
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def run
|
|
23
|
+
Thread.new do
|
|
24
|
+
abort_on_exception = true
|
|
25
|
+
call(:on_run)
|
|
26
|
+
|
|
27
|
+
begin
|
|
28
|
+
@block.call
|
|
29
|
+
rescue SystemExit
|
|
30
|
+
call(:on_exit)
|
|
31
|
+
exit
|
|
32
|
+
rescue Exception => e
|
|
33
|
+
call(:on_error, e)
|
|
34
|
+
|
|
35
|
+
if !@args.has_key?(:print_error) or @args[:print_error]
|
|
36
|
+
print "Error: "
|
|
37
|
+
puts e.inspect
|
|
38
|
+
print "\n"
|
|
39
|
+
puts e.backtrace
|
|
40
|
+
print "\n\n"
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
call(:on_done)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
class Knj::Threadhandler
|
|
2
|
+
attr_reader :inactive_blocks, :args, :activate_blocks, :mutex
|
|
3
|
+
|
|
4
|
+
def initialize(args = {})
|
|
5
|
+
@args = args
|
|
6
|
+
@objects = []
|
|
7
|
+
@args[:timeout] = 5 if !@args[:timeout]
|
|
8
|
+
@inactive_blocks = []
|
|
9
|
+
@activate_blocks = []
|
|
10
|
+
@mutex = Mutex.new
|
|
11
|
+
|
|
12
|
+
@thread_timeout = Knj::Thread.new do
|
|
13
|
+
loop do
|
|
14
|
+
sleep @args[:timeout]
|
|
15
|
+
break if !@mutex
|
|
16
|
+
check_inactive
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def on_spawn_new(&block)
|
|
22
|
+
raise "Destroyed Knj::Threadhandler." if !@mutex
|
|
23
|
+
@spawn_new_block = block
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def on_inactive(&block)
|
|
27
|
+
raise "Destroyed Knj::Threadhandler." if !@mutex
|
|
28
|
+
@inactive_blocks << block
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def on_activate(&block)
|
|
32
|
+
raise "Destroyed Knj::Threadhandler." if !@mutex
|
|
33
|
+
@activate_blocks << block
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def destroy
|
|
37
|
+
return false if !@mutex
|
|
38
|
+
|
|
39
|
+
@thread_timeout.kill if @thread_timeout and @thread_timeout.alive?
|
|
40
|
+
@thread_timeout = nil
|
|
41
|
+
|
|
42
|
+
@mutex.synchronize do
|
|
43
|
+
@objects.each do |data|
|
|
44
|
+
@inactive_blocks.each do |block|
|
|
45
|
+
data[:inactive] = true
|
|
46
|
+
block.call(:obj => data[:object])
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
@args = nil
|
|
52
|
+
@objects = nil
|
|
53
|
+
@inactive_blocks = nil
|
|
54
|
+
@activate_blocks = nil
|
|
55
|
+
@mutex = nil
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def check_inactive
|
|
59
|
+
raise "Destroyed Knj::Threadhandler." if !@mutex
|
|
60
|
+
@mutex.synchronize do
|
|
61
|
+
cur_time = Time.new.to_i - @args[:timeout]
|
|
62
|
+
@objects.each do |data|
|
|
63
|
+
if data[:free] and !data[:inactive] and data[:free] < cur_time
|
|
64
|
+
@inactive_blocks.each do |block|
|
|
65
|
+
data[:inactive] = true
|
|
66
|
+
block.call(:obj => data[:object])
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def get_and_lock
|
|
74
|
+
raise "Destroyed Knj::Threadhandler." if !@mutex
|
|
75
|
+
newobj = nil
|
|
76
|
+
|
|
77
|
+
@mutex.synchronize do
|
|
78
|
+
retdata = false
|
|
79
|
+
@objects.each do |data|
|
|
80
|
+
if data[:free]
|
|
81
|
+
retdata = data
|
|
82
|
+
break
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
if retdata
|
|
87
|
+
#Test if object is still free - if not, try again - knj.
|
|
88
|
+
return get_and_lock if !retdata[:free]
|
|
89
|
+
retdata[:free] = false
|
|
90
|
+
|
|
91
|
+
if retdata[:inactive]
|
|
92
|
+
@activate_blocks.each do |block|
|
|
93
|
+
block.call(:obj => retdata[:object])
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
retdata.delete(:inactive)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
return retdata[:object]
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
newobj = @spawn_new_block.call
|
|
103
|
+
@objects << {
|
|
104
|
+
:free => false,
|
|
105
|
+
:object => newobj
|
|
106
|
+
}
|
|
107
|
+
STDOUT.print "Spawned db and locked new.\n" if @args[:debug]
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
return newobj
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def free(obj)
|
|
114
|
+
raise "Destroyed Knj::Threadhandler." if !@mutex
|
|
115
|
+
|
|
116
|
+
@mutex.synchronize do
|
|
117
|
+
freedata = false
|
|
118
|
+
@objects.each do |data|
|
|
119
|
+
if data[:object] == obj
|
|
120
|
+
freedata = data
|
|
121
|
+
break
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
raise "Could not find that object in list." if !freedata
|
|
126
|
+
STDOUT.print "Freed one.\n" if @args[:debug]
|
|
127
|
+
freedata[:free] = Time.new.to_i
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|