rufus-lua-win 5.1.5
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 +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +69 -0
- data/Rakefile +1 -0
- data/lib/rufus/lua/win.rb +18 -0
- data/lib/rufus/lua/win/version.rb +7 -0
- data/rufus-lua-win.gemspec +23 -0
- data/vendor/lua/bin/liblua.dll +0 -0
- data/vendor/lua/lib/lua/LuaXml.lua +119 -0
- data/vendor/lua/lib/lua/alien.lua +250 -0
- data/vendor/lua/lib/lua/alien/core.dll +0 -0
- data/vendor/lua/lib/lua/alien/struct.dll +0 -0
- data/vendor/lua/lib/lua/base.lua +536 -0
- data/vendor/lua/lib/lua/bin.lua +20 -0
- data/vendor/lua/lib/lua/bit.dll +0 -0
- data/vendor/lua/lib/lua/cdlua.dll +0 -0
- data/vendor/lua/lib/lua/cdluacontextplus.dll +0 -0
- data/vendor/lua/lib/lua/cdluagl.dll +0 -0
- data/vendor/lua/lib/lua/cdluaim.dll +0 -0
- data/vendor/lua/lib/lua/cdluapdf.dll +0 -0
- data/vendor/lua/lib/lua/copas.lua +543 -0
- data/vendor/lua/lib/lua/coxpcall.lua +57 -0
- data/vendor/lua/lib/lua/date.lua +745 -0
- data/vendor/lua/lib/lua/debug_ext.lua +84 -0
- data/vendor/lua/lib/lua/debug_init.lua +2 -0
- data/vendor/lua/lib/lua/des56.dll +0 -0
- data/vendor/lua/lib/lua/dist/config.lua +109 -0
- data/vendor/lua/lib/lua/dist/constraints.lua +271 -0
- data/vendor/lua/lib/lua/dist/depends.lua +601 -0
- data/vendor/lua/lib/lua/dist/git.lua +307 -0
- data/vendor/lua/lib/lua/dist/init.lua +278 -0
- data/vendor/lua/lib/lua/dist/manifest.lua +225 -0
- data/vendor/lua/lib/lua/dist/package.lua +583 -0
- data/vendor/lua/lib/lua/dist/sys.lua +367 -0
- data/vendor/lua/lib/lua/dist/utils.lua +130 -0
- data/vendor/lua/lib/lua/ex.dll +0 -0
- data/vendor/lua/lib/lua/fstable.lua +116 -0
- data/vendor/lua/lib/lua/getopt.lua +273 -0
- data/vendor/lua/lib/lua/git.lua +5 -0
- data/vendor/lua/lib/lua/git/core.dll +0 -0
- data/vendor/lua/lib/lua/git/objects.lua +121 -0
- data/vendor/lua/lib/lua/git/pack.lua +316 -0
- data/vendor/lua/lib/lua/git/protocol.lua +188 -0
- data/vendor/lua/lib/lua/git/repo.lua +283 -0
- data/vendor/lua/lib/lua/git/util.lua +233 -0
- data/vendor/lua/lib/lua/gzio.dll +0 -0
- data/vendor/lua/lib/lua/gzip.lua +81 -0
- data/vendor/lua/lib/lua/iconv.dll +0 -0
- data/vendor/lua/lib/lua/imlua.dll +0 -0
- data/vendor/lua/lib/lua/imlua_fftw.dll +0 -0
- data/vendor/lua/lib/lua/imlua_jp2.dll +0 -0
- data/vendor/lua/lib/lua/imlua_process.dll +0 -0
- data/vendor/lua/lib/lua/imlua_process_omp.dll +0 -0
- data/vendor/lua/lib/lua/io_ext.lua +115 -0
- data/vendor/lua/lib/lua/iuplua.dll +0 -0
- data/vendor/lua/lib/lua/iuplua_mglplot.dll +0 -0
- data/vendor/lua/lib/lua/iuplua_pplot.dll +0 -0
- data/vendor/lua/lib/lua/iupluacd.dll +0 -0
- data/vendor/lua/lib/lua/iupluacontrols.dll +0 -0
- data/vendor/lua/lib/lua/iupluagl.dll +0 -0
- data/vendor/lua/lib/lua/iupluaim.dll +0 -0
- data/vendor/lua/lib/lua/iupluaimglib.dll +0 -0
- data/vendor/lua/lib/lua/iupluatuio.dll +0 -0
- data/vendor/lua/lib/lua/lanes-keeper.lua +302 -0
- data/vendor/lua/lib/lua/lanes.lua +591 -0
- data/vendor/lua/lib/lua/lanes/core.dll +0 -0
- data/vendor/lua/lib/lua/lcs.lua +55 -0
- data/vendor/lua/lib/lua/lemock.lua +659 -0
- data/vendor/lua/lib/lua/lfs.dll +0 -0
- data/vendor/lua/lib/lua/list.lua +375 -0
- data/vendor/lua/lib/lua/logging.lua +189 -0
- data/vendor/lua/lib/lua/logging/console.lua +22 -0
- data/vendor/lua/lib/lua/logging/email.lua +44 -0
- data/vendor/lua/lib/lua/logging/file.lua +55 -0
- data/vendor/lua/lib/lua/logging/rolling_file.lua +81 -0
- data/vendor/lua/lib/lua/logging/socket.lua +35 -0
- data/vendor/lua/lib/lua/logging/sql.lua +64 -0
- data/vendor/lua/lib/lua/loop/base.lua +68 -0
- data/vendor/lua/lib/lua/loop/cached.lua +312 -0
- data/vendor/lua/lib/lua/loop/collection/MapWithArrayOfKeys.lua +64 -0
- data/vendor/lua/lib/lua/loop/collection/ObjectCache.lua +39 -0
- data/vendor/lua/lib/lua/loop/collection/OrderedSet.lua +164 -0
- data/vendor/lua/lib/lua/loop/collection/PriorityQueue.lua +86 -0
- data/vendor/lua/lib/lua/loop/collection/UnorderedArray.lua +32 -0
- data/vendor/lua/lib/lua/loop/collection/UnorderedArraySet.lua +56 -0
- data/vendor/lua/lib/lua/loop/compiler/Arguments.lua +108 -0
- data/vendor/lua/lib/lua/loop/compiler/Conditional.lua +50 -0
- data/vendor/lua/lib/lua/loop/compiler/Expression.lua +215 -0
- data/vendor/lua/lib/lua/loop/component/base.lua +221 -0
- data/vendor/lua/lib/lua/loop/component/contained.lua +71 -0
- data/vendor/lua/lib/lua/loop/component/dynamic.lua +223 -0
- data/vendor/lua/lib/lua/loop/component/intercepted.lua +354 -0
- data/vendor/lua/lib/lua/loop/component/wrapped.lua +195 -0
- data/vendor/lua/lib/lua/loop/debug/Inspector.lua +521 -0
- data/vendor/lua/lib/lua/loop/debug/Matcher.lua +192 -0
- data/vendor/lua/lib/lua/loop/debug/Verbose.lua +266 -0
- data/vendor/lua/lib/lua/loop/debug/Viewer.lua +200 -0
- data/vendor/lua/lib/lua/loop/multiple.lua +105 -0
- data/vendor/lua/lib/lua/loop/object/Exception.lua +57 -0
- data/vendor/lua/lib/lua/loop/object/Publisher.lua +43 -0
- data/vendor/lua/lib/lua/loop/object/Wrapper.lua +39 -0
- data/vendor/lua/lib/lua/loop/scoped.lua +585 -0
- data/vendor/lua/lib/lua/loop/serial/FileStream.lua +48 -0
- data/vendor/lua/lib/lua/loop/serial/Serializer.lua +291 -0
- data/vendor/lua/lib/lua/loop/serial/SocketStream.lua +51 -0
- data/vendor/lua/lib/lua/loop/serial/StringStream.lua +47 -0
- data/vendor/lua/lib/lua/loop/simple.lua +75 -0
- data/vendor/lua/lib/lua/loop/table.lua +71 -0
- data/vendor/lua/lib/lua/loop/thread/CoSocket.lua +416 -0
- data/vendor/lua/lib/lua/loop/thread/IOScheduler.lua +170 -0
- data/vendor/lua/lib/lua/loop/thread/Scheduler.lua +327 -0
- data/vendor/lua/lib/lua/loop/thread/SocketScheduler.lua +88 -0
- data/vendor/lua/lib/lua/loop/thread/Timer.lua +54 -0
- data/vendor/lua/lib/lua/lpeg.dll +0 -0
- data/vendor/lua/lib/lua/ltn12.lua +292 -0
- data/vendor/lua/lib/lua/luaXML_lib.dll +0 -0
- data/vendor/lua/lib/lua/luacurl.dll +0 -0
- data/vendor/lua/lib/lua/luadoc/config.lua +34 -0
- data/vendor/lua/lib/lua/luadoc/doclet/debug.lua +46 -0
- data/vendor/lua/lib/lua/luadoc/doclet/formatter.lua +84 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html.lua +289 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/file.lp +113 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/function.lp +64 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/index.lp +70 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/luadoc.css +286 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/menu.lp +55 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/module.lp +109 -0
- data/vendor/lua/lib/lua/luadoc/doclet/html/table.lp +15 -0
- data/vendor/lua/lib/lua/luadoc/doclet/raw.lua +12 -0
- data/vendor/lua/lib/lua/luadoc/init.lua +58 -0
- data/vendor/lua/lib/lua/luadoc/lp.lua +130 -0
- data/vendor/lua/lib/lua/luadoc/taglet/standard.lua +495 -0
- data/vendor/lua/lib/lua/luadoc/taglet/standard/tags.lua +171 -0
- data/vendor/lua/lib/lua/luadoc/util.lua +233 -0
- data/vendor/lua/lib/lua/luagl.dll +0 -0
- data/vendor/lua/lib/lua/luaglu.dll +0 -0
- data/vendor/lua/lib/lua/luaidl.lua +113 -0
- data/vendor/lua/lib/lua/luaidl/lex.lua +793 -0
- data/vendor/lua/lib/lua/luaidl/pre.lua +149 -0
- data/vendor/lua/lib/lua/luaidl/sin.lua +3631 -0
- data/vendor/lua/lib/lua/luarocks/add.lua +108 -0
- data/vendor/lua/lib/lua/luarocks/admin_remove.lua +87 -0
- data/vendor/lua/lib/lua/luarocks/build.lua +330 -0
- data/vendor/lua/lib/lua/luarocks/build/builtin.lua +253 -0
- data/vendor/lua/lib/lua/luarocks/build/cmake.lua +54 -0
- data/vendor/lua/lib/lua/luarocks/build/command.lua +32 -0
- data/vendor/lua/lib/lua/luarocks/build/make.lua +92 -0
- data/vendor/lua/lib/lua/luarocks/cache.lua +85 -0
- data/vendor/lua/lib/lua/luarocks/cfg.lua +449 -0
- data/vendor/lua/lib/lua/luarocks/command_line.lua +163 -0
- data/vendor/lua/lib/lua/luarocks/deps.lua +654 -0
- data/vendor/lua/lib/lua/luarocks/dir.lua +69 -0
- data/vendor/lua/lib/lua/luarocks/download.lua +90 -0
- data/vendor/lua/lib/lua/luarocks/fetch.lua +321 -0
- data/vendor/lua/lib/lua/luarocks/fetch/cvs.lua +44 -0
- data/vendor/lua/lib/lua/luarocks/fetch/git.lua +81 -0
- data/vendor/lua/lib/lua/luarocks/fetch/git_file.lua +17 -0
- data/vendor/lua/lib/lua/luarocks/fetch/hg.lua +54 -0
- data/vendor/lua/lib/lua/luarocks/fetch/sscm.lua +42 -0
- data/vendor/lua/lib/lua/luarocks/fetch/svn.lua +53 -0
- data/vendor/lua/lib/lua/luarocks/fs.lua +40 -0
- data/vendor/lua/lib/lua/luarocks/fs/lua.lua +676 -0
- data/vendor/lua/lib/lua/luarocks/fs/unix.lua +88 -0
- data/vendor/lua/lib/lua/luarocks/fs/unix/tools.lua +325 -0
- data/vendor/lua/lib/lua/luarocks/fs/win32.lua +107 -0
- data/vendor/lua/lib/lua/luarocks/fs/win32/tools.lua +334 -0
- data/vendor/lua/lib/lua/luarocks/help.lua +101 -0
- data/vendor/lua/lib/lua/luarocks/index.lua +172 -0
- data/vendor/lua/lib/lua/luarocks/install.lua +151 -0
- data/vendor/lua/lib/lua/luarocks/list.lua +35 -0
- data/vendor/lua/lib/lua/luarocks/loader.lua +228 -0
- data/vendor/lua/lib/lua/luarocks/make.lua +71 -0
- data/vendor/lua/lib/lua/luarocks/make_manifest.lua +34 -0
- data/vendor/lua/lib/lua/luarocks/manif.lua +360 -0
- data/vendor/lua/lib/lua/luarocks/manif_core.lua +75 -0
- data/vendor/lua/lib/lua/luarocks/new_version.lua +141 -0
- data/vendor/lua/lib/lua/luarocks/pack.lua +205 -0
- data/vendor/lua/lib/lua/luarocks/path.lua +315 -0
- data/vendor/lua/lib/lua/luarocks/persist.lua +173 -0
- data/vendor/lua/lib/lua/luarocks/refresh_cache.lua +30 -0
- data/vendor/lua/lib/lua/luarocks/remove.lua +135 -0
- data/vendor/lua/lib/lua/luarocks/rep.lua +313 -0
- data/vendor/lua/lib/lua/luarocks/require.lua +6 -0
- data/vendor/lua/lib/lua/luarocks/search.lua +399 -0
- data/vendor/lua/lib/lua/luarocks/show.lua +138 -0
- data/vendor/lua/lib/lua/luarocks/site_config.lua +23 -0
- data/vendor/lua/lib/lua/luarocks/tools/patch.lua +712 -0
- data/vendor/lua/lib/lua/luarocks/tools/tar.lua +144 -0
- data/vendor/lua/lib/lua/luarocks/tools/zip.lua +245 -0
- data/vendor/lua/lib/lua/luarocks/type_check.lua +267 -0
- data/vendor/lua/lib/lua/luarocks/unpack.lua +151 -0
- data/vendor/lua/lib/lua/luarocks/util.lua +420 -0
- data/vendor/lua/lib/lua/luarocks/validate.lua +164 -0
- data/vendor/lua/lib/lua/luars232.dll +0 -0
- data/vendor/lua/lib/lua/luasql/mysql.dll +0 -0
- data/vendor/lua/lib/lua/luasql/postgres.dll +0 -0
- data/vendor/lua/lib/lua/luasql/sqlite3.dll +0 -0
- data/vendor/lua/lib/lua/luaunit.lua +601 -0
- data/vendor/lua/lib/lua/lxp.dll +0 -0
- data/vendor/lua/lib/lua/lxp/lom.lua +60 -0
- data/vendor/lua/lib/lua/math_ext.lua +27 -0
- data/vendor/lua/lib/lua/mbox.lua +53 -0
- data/vendor/lua/lib/lua/md5.lua +19 -0
- data/vendor/lua/lib/lua/md5/core.dll +0 -0
- data/vendor/lua/lib/lua/metalua.lua +0 -0
- data/vendor/lua/lib/lua/metalua/ast_to_string.mlua +553 -0
- data/vendor/lua/lib/lua/metalua/base.lua +104 -0
- data/vendor/lua/lib/lua/metalua/bytecode.lua +0 -0
- data/vendor/lua/lib/lua/metalua/clopts.mlua +204 -0
- data/vendor/lua/lib/lua/metalua/compiler.lua +3 -0
- data/vendor/lua/lib/lua/metalua/dollar.mlua +24 -0
- data/vendor/lua/lib/lua/metalua/extension/H-runtime.mlua +216 -0
- data/vendor/lua/lib/lua/metalua/extension/H.mlua +22 -0
- data/vendor/lua/lib/lua/metalua/extension/anaphoric.mlua +54 -0
- data/vendor/lua/lib/lua/metalua/extension/clist.mlua +149 -0
- data/vendor/lua/lib/lua/metalua/extension/continue.mlua +53 -0
- data/vendor/lua/lib/lua/metalua/extension/localin.mlua +2 -0
- data/vendor/lua/lib/lua/metalua/extension/log.mlua +39 -0
- data/vendor/lua/lib/lua/metalua/extension/match.mlua +374 -0
- data/vendor/lua/lib/lua/metalua/extension/ternary.mlua +10 -0
- data/vendor/lua/lib/lua/metalua/extension/trycatch.mlua +189 -0
- data/vendor/lua/lib/lua/metalua/extension/types-runtime.mlua +159 -0
- data/vendor/lua/lib/lua/metalua/extension/types.mlua +352 -0
- data/vendor/lua/lib/lua/metalua/extension/withdo.mlua +30 -0
- data/vendor/lua/lib/lua/metalua/extension/xglobal-runtime.lua +41 -0
- data/vendor/lua/lib/lua/metalua/extension/xglobal.mlua +20 -0
- data/vendor/lua/lib/lua/metalua/extension/xloop.mlua +100 -0
- data/vendor/lua/lib/lua/metalua/extension/xmatch.mlua +216 -0
- data/vendor/lua/lib/lua/metalua/metaloop.mlua +76 -0
- data/vendor/lua/lib/lua/metalua/mlc.lua +0 -0
- data/vendor/lua/lib/lua/metalua/mlc_xcall.lua +119 -0
- data/vendor/lua/lib/lua/metalua/mlp.lua +0 -0
- data/vendor/lua/lib/lua/metalua/package2.lua +101 -0
- data/vendor/lua/lib/lua/metalua/runtime.lua +3 -0
- data/vendor/lua/lib/lua/metalua/string2.lua +44 -0
- data/vendor/lua/lib/lua/metalua/table2.lua +372 -0
- data/vendor/lua/lib/lua/metalua/walk.mlua +304 -0
- data/vendor/lua/lib/lua/metalua/walk/bindings.mlua +41 -0
- data/vendor/lua/lib/lua/metalua/walk/id.mlua +186 -0
- data/vendor/lua/lib/lua/metalua/walk/scope.lua +54 -0
- data/vendor/lua/lib/lua/mime.lua +87 -0
- data/vendor/lua/lib/lua/mime/core.dll +0 -0
- data/vendor/lua/lib/lua/mobdebug.lua +1484 -0
- data/vendor/lua/lib/lua/modules.lua +16 -0
- data/vendor/lua/lib/lua/object.lua +56 -0
- data/vendor/lua/lib/lua/oil/Exception.lua +26 -0
- data/vendor/lua/lib/lua/oil/arch.lua +27 -0
- data/vendor/lua/lib/lua/oil/arch/basic/client.lua +29 -0
- data/vendor/lua/lib/lua/oil/arch/basic/common.lua +13 -0
- data/vendor/lua/lib/lua/oil/arch/basic/server.lua +27 -0
- data/vendor/lua/lib/lua/oil/arch/cooperative/common.lua +10 -0
- data/vendor/lua/lib/lua/oil/arch/cooperative/server.lua +16 -0
- data/vendor/lua/lib/lua/oil/arch/corba/client.lua +39 -0
- data/vendor/lua/lib/lua/oil/arch/corba/common.lua +58 -0
- data/vendor/lua/lib/lua/oil/arch/corba/intercepted/client.lua +9 -0
- data/vendor/lua/lib/lua/oil/arch/corba/intercepted/server.lua +9 -0
- data/vendor/lua/lib/lua/oil/arch/corba/server.lua +35 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/byref.lua +18 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/client.lua +19 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/common.lua +18 -0
- data/vendor/lua/lib/lua/oil/arch/ludo/server.lua +19 -0
- data/vendor/lua/lib/lua/oil/arch/typed/client.lua +27 -0
- data/vendor/lua/lib/lua/oil/arch/typed/common.lua +9 -0
- data/vendor/lua/lib/lua/oil/arch/typed/server.lua +18 -0
- data/vendor/lua/lib/lua/oil/assert.lua +87 -0
- data/vendor/lua/lib/lua/oil/builder.lua +45 -0
- data/vendor/lua/lib/lua/oil/builder/basic/client.lua +31 -0
- data/vendor/lua/lib/lua/oil/builder/basic/common.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/basic/server.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/cooperative/common.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/cooperative/server.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/corba/client.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/corba/common.lua +24 -0
- data/vendor/lua/lib/lua/oil/builder/corba/gencode.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/corba/intercepted/client.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/corba/intercepted/server.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/corba/server.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/lua/client.lua +11 -0
- data/vendor/lua/lib/lua/oil/builder/lua/server.lua +12 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/byref.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/client.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/common.lua +14 -0
- data/vendor/lua/lib/lua/oil/builder/ludo/server.lua +13 -0
- data/vendor/lua/lib/lua/oil/builder/typed/client.lua +16 -0
- data/vendor/lua/lib/lua/oil/builder/typed/server.lua +12 -0
- data/vendor/lua/lib/lua/oil/compat.lua +846 -0
- data/vendor/lua/lib/lua/oil/component.lua +1 -0
- data/vendor/lua/lib/lua/oil/corba/giop.lua +301 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Codec.lua +1568 -0
- data/vendor/lua/lib/lua/oil/corba/giop/CodecGen.lua +589 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Exception.lua +25 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Indexer.lua +63 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Listener.lua +343 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Messenger.lua +228 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Referrer.lua +180 -0
- data/vendor/lua/lib/lua/oil/corba/giop/Requester.lua +462 -0
- data/vendor/lua/lib/lua/oil/corba/idl.lua +597 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Compiler.lua +133 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Importer.lua +235 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Indexer.lua +95 -0
- data/vendor/lua/lib/lua/oil/corba/idl/Registry.lua +1821 -0
- data/vendor/lua/lib/lua/oil/corba/idl/ir.lua +847 -0
- data/vendor/lua/lib/lua/oil/corba/idl/sysex.lua +21 -0
- data/vendor/lua/lib/lua/oil/corba/iiop/Profiler.lua +200 -0
- data/vendor/lua/lib/lua/oil/corba/intercepted/Listener.lua +158 -0
- data/vendor/lua/lib/lua/oil/corba/intercepted/Requester.lua +181 -0
- data/vendor/lua/lib/lua/oil/corba/services/event.lua +126 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/ConsumerAdmin.lua +50 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/EventFactory.lua +15 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/EventQueue.lua +37 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushConsumer.lua +75 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushSupplier.lua +62 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/SingleDeferredDispatcher.lua +60 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/SingleSynchronousDispatcher.lua +39 -0
- data/vendor/lua/lib/lua/oil/corba/services/event/SupplierAdmin.lua +50 -0
- data/vendor/lua/lib/lua/oil/corba/services/naming.lua +436 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Acceptor.lua +268 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Channels.lua +121 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Connector.lua +147 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Dispatcher.lua +99 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies.lua +86 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/asynchronous.lua +56 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/protected.lua +17 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/synchronous.lua +17 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Proxies/utils.lua +29 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Receiver.lua +110 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Servants.lua +207 -0
- data/vendor/lua/lib/lua/oil/kernel/base/Sockets.lua +44 -0
- data/vendor/lua/lib/lua/oil/kernel/cooperative/Receiver.lua +139 -0
- data/vendor/lua/lib/lua/oil/kernel/intercepted/Listener.lua +47 -0
- data/vendor/lua/lib/lua/oil/kernel/intercepted/Requester.lua +58 -0
- data/vendor/lua/lib/lua/oil/kernel/lua/Dispatcher.lua +76 -0
- data/vendor/lua/lib/lua/oil/kernel/lua/Proxies.lua +69 -0
- data/vendor/lua/lib/lua/oil/kernel/typed/Dispatcher.lua +91 -0
- data/vendor/lua/lib/lua/oil/kernel/typed/Proxies.lua +153 -0
- data/vendor/lua/lib/lua/oil/kernel/typed/Servants.lua +137 -0
- data/vendor/lua/lib/lua/oil/ludo/Codec.lua +66 -0
- data/vendor/lua/lib/lua/oil/ludo/CodecByRef.lua +103 -0
- data/vendor/lua/lib/lua/oil/ludo/Listener.lua +151 -0
- data/vendor/lua/lib/lua/oil/ludo/Referrer.lua +72 -0
- data/vendor/lua/lib/lua/oil/ludo/Requester.lua +107 -0
- data/vendor/lua/lib/lua/oil/oo.lua +1 -0
- data/vendor/lua/lib/lua/oil/port.lua +1 -0
- data/vendor/lua/lib/lua/oil/properties.lua +57 -0
- data/vendor/lua/lib/lua/oil/verbose.lua +133 -0
- data/vendor/lua/lib/lua/package_ext.lua +15 -0
- data/vendor/lua/lib/lua/parser.lua +268 -0
- data/vendor/lua/lib/lua/pl/Date.lua +555 -0
- data/vendor/lua/lib/lua/pl/List.lua +613 -0
- data/vendor/lua/lib/lua/pl/Map.lua +113 -0
- data/vendor/lua/lib/lua/pl/MultiMap.lua +62 -0
- data/vendor/lua/lib/lua/pl/OrderedMap.lua +151 -0
- data/vendor/lua/lib/lua/pl/Set.lua +153 -0
- data/vendor/lua/lib/lua/pl/app.lua +165 -0
- data/vendor/lua/lib/lua/pl/array2d.lua +501 -0
- data/vendor/lua/lib/lua/pl/class.lua +180 -0
- data/vendor/lua/lib/lua/pl/comprehension.lua +286 -0
- data/vendor/lua/lib/lua/pl/config.lua +176 -0
- data/vendor/lua/lib/lua/pl/data.lua +606 -0
- data/vendor/lua/lib/lua/pl/dir.lua +475 -0
- data/vendor/lua/lib/lua/pl/file.lua +70 -0
- data/vendor/lua/lib/lua/pl/func.lua +376 -0
- data/vendor/lua/lib/lua/pl/init.lua +68 -0
- data/vendor/lua/lib/lua/pl/input.lua +173 -0
- data/vendor/lua/lib/lua/pl/lapp.lua +407 -0
- data/vendor/lua/lib/lua/pl/lexer.lua +456 -0
- data/vendor/lua/lib/lua/pl/luabalanced.lua +264 -0
- data/vendor/lua/lib/lua/pl/operator.lua +201 -0
- data/vendor/lua/lib/lua/pl/path.lua +398 -0
- data/vendor/lua/lib/lua/pl/permute.lua +63 -0
- data/vendor/lua/lib/lua/pl/platf/luajava.lua +101 -0
- data/vendor/lua/lib/lua/pl/pretty.lua +285 -0
- data/vendor/lua/lib/lua/pl/seq.lua +551 -0
- data/vendor/lua/lib/lua/pl/sip.lua +344 -0
- data/vendor/lua/lib/lua/pl/strict.lua +70 -0
- data/vendor/lua/lib/lua/pl/stringio.lua +158 -0
- data/vendor/lua/lib/lua/pl/stringx.lua +440 -0
- data/vendor/lua/lib/lua/pl/tablex.lua +817 -0
- data/vendor/lua/lib/lua/pl/template.lua +103 -0
- data/vendor/lua/lib/lua/pl/test.lua +135 -0
- data/vendor/lua/lib/lua/pl/text.lua +243 -0
- data/vendor/lua/lib/lua/pl/utils.lua +550 -0
- data/vendor/lua/lib/lua/pl/xml.lua +689 -0
- data/vendor/lua/lib/lua/profiler.dll +0 -0
- data/vendor/lua/lib/lua/re.lua +248 -0
- data/vendor/lua/lib/lua/rex_onig.dll +0 -0
- data/vendor/lua/lib/lua/rex_pcre.dll +0 -0
- data/vendor/lua/lib/lua/rex_posix.dll +0 -0
- data/vendor/lua/lib/lua/rings.dll +0 -0
- data/vendor/lua/lib/lua/serialize.lua +193 -0
- data/vendor/lua/lib/lua/set.lua +149 -0
- data/vendor/lua/lib/lua/socket.lua +133 -0
- data/vendor/lua/lib/lua/socket/core.dll +0 -0
- data/vendor/lua/lib/lua/socket/ftp.lua +281 -0
- data/vendor/lua/lib/lua/socket/http.lua +350 -0
- data/vendor/lua/lib/lua/socket/smtp.lua +251 -0
- data/vendor/lua/lib/lua/socket/tp.lua +123 -0
- data/vendor/lua/lib/lua/socket/url.lua +297 -0
- data/vendor/lua/lib/lua/ssl.dll +0 -0
- data/vendor/lua/lib/lua/ssl.lua +93 -0
- data/vendor/lua/lib/lua/ssl/https.lua +138 -0
- data/vendor/lua/lib/lua/stable.lua +28 -0
- data/vendor/lua/lib/lua/std.lua +16 -0
- data/vendor/lua/lib/lua/strbuf.lua +32 -0
- data/vendor/lua/lib/lua/strict.lua +45 -0
- data/vendor/lua/lib/lua/string_ext.lua +274 -0
- data/vendor/lua/lib/lua/table_ext.lua +117 -0
- data/vendor/lua/lib/lua/tar.lua +262 -0
- data/vendor/lua/lib/lua/task.dll +0 -0
- data/vendor/lua/lib/lua/tree.lua +81 -0
- data/vendor/lua/lib/lua/unicode.dll +0 -0
- data/vendor/lua/lib/lua/verbose_require.lua +11 -0
- data/vendor/lua/lib/lua/vstruct.lua +86 -0
- data/vendor/lua/lib/lua/vstruct/ast.lua +192 -0
- data/vendor/lua/lib/lua/vstruct/ast/Bitpack.lua +33 -0
- data/vendor/lua/lib/lua/vstruct/ast/Generator.lua +174 -0
- data/vendor/lua/lib/lua/vstruct/ast/IO.lua +45 -0
- data/vendor/lua/lib/lua/vstruct/ast/List.lua +56 -0
- data/vendor/lua/lib/lua/vstruct/ast/Name.lua +20 -0
- data/vendor/lua/lib/lua/vstruct/ast/Repeat.lua +23 -0
- data/vendor/lua/lib/lua/vstruct/ast/Root.lua +19 -0
- data/vendor/lua/lib/lua/vstruct/ast/Table.lua +65 -0
- data/vendor/lua/lib/lua/vstruct/cursor.lua +81 -0
- data/vendor/lua/lib/lua/vstruct/io.lua +45 -0
- data/vendor/lua/lib/lua/vstruct/io/a.lua +24 -0
- data/vendor/lua/lib/lua/vstruct/io/b.lua +28 -0
- data/vendor/lua/lib/lua/vstruct/io/bigendian.lua +21 -0
- data/vendor/lua/lib/lua/vstruct/io/c.lua +25 -0
- data/vendor/lua/lib/lua/vstruct/io/defaults.lua +24 -0
- data/vendor/lua/lib/lua/vstruct/io/endianness.lua +41 -0
- data/vendor/lua/lib/lua/vstruct/io/f.lua +129 -0
- data/vendor/lua/lib/lua/vstruct/io/hostendian.lua +21 -0
- data/vendor/lua/lib/lua/vstruct/io/i.lua +42 -0
- data/vendor/lua/lib/lua/vstruct/io/littleendian.lua +21 -0
- data/vendor/lua/lib/lua/vstruct/io/m.lua +62 -0
- data/vendor/lua/lib/lua/vstruct/io/p.lua +23 -0
- data/vendor/lua/lib/lua/vstruct/io/s.lua +27 -0
- data/vendor/lua/lib/lua/vstruct/io/seekb.lua +18 -0
- data/vendor/lua/lib/lua/vstruct/io/seekf.lua +18 -0
- data/vendor/lua/lib/lua/vstruct/io/seekto.lua +18 -0
- data/vendor/lua/lib/lua/vstruct/io/u.lua +54 -0
- data/vendor/lua/lib/lua/vstruct/io/x.lua +34 -0
- data/vendor/lua/lib/lua/vstruct/io/z.lua +63 -0
- data/vendor/lua/lib/lua/vstruct/lexer.lua +100 -0
- data/vendor/lua/lib/lua/vstruct/pack.lua +142 -0
- data/vendor/lua/lib/lua/vstruct/test.lua +47 -0
- data/vendor/lua/lib/lua/vstruct/test/basic.lua +73 -0
- data/vendor/lua/lib/lua/vstruct/test/common.lua +100 -0
- data/vendor/lua/lib/lua/vstruct/test/fp-bigendian.lua +56 -0
- data/vendor/lua/lib/lua/vstruct/test/fp-littleendian.lua +56 -0
- data/vendor/lua/lib/lua/vstruct/test/struct-test-gen.lua +1230 -0
- data/vendor/lua/lib/lua/vstruct/unpack.lua +126 -0
- data/vendor/lua/lib/lua/wx.dll +0 -0
- data/vendor/lua/lib/lua/xml.lua +75 -0
- data/vendor/lua/lib/lua/zip.dll +0 -0
- data/vendor/lua/lib/lua/zlib.dll +0 -0
- metadata +529 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
--------------------------------------------------------------------------------
|
|
2
|
+
---------------------- ## ##### ##### ###### -----------------------
|
|
3
|
+
---------------------- ## ## ## ## ## ## ## -----------------------
|
|
4
|
+
---------------------- ## ## ## ## ## ###### -----------------------
|
|
5
|
+
---------------------- ## ## ## ## ## ## -----------------------
|
|
6
|
+
---------------------- ###### ##### ##### ## -----------------------
|
|
7
|
+
---------------------- -----------------------
|
|
8
|
+
----------------------- Lua Object-Oriented Programming ------------------------
|
|
9
|
+
--------------------------------------------------------------------------------
|
|
10
|
+
-- Project: LOOP - Lua Object-Oriented Programming --
|
|
11
|
+
-- Release: 2.3 beta --
|
|
12
|
+
-- Title : General utilities functions for table manipulation --
|
|
13
|
+
-- Author : Renato Maia <maia@inf.puc-rio.br> --
|
|
14
|
+
--------------------------------------------------------------------------------
|
|
15
|
+
-- These functions are used in many package implementations and may also be --
|
|
16
|
+
-- usefull in applications. --
|
|
17
|
+
--------------------------------------------------------------------------------
|
|
18
|
+
|
|
19
|
+
local next = next
|
|
20
|
+
local pairs = pairs
|
|
21
|
+
local rawset = rawset
|
|
22
|
+
local setmetatable = setmetatable
|
|
23
|
+
|
|
24
|
+
local table = require "table"
|
|
25
|
+
|
|
26
|
+
module "loop.table"
|
|
27
|
+
|
|
28
|
+
setmetatable(_M, { __index = table })
|
|
29
|
+
|
|
30
|
+
--------------------------------------------------------------------------------
|
|
31
|
+
-- Copies all elements stored in a table into another.
|
|
32
|
+
|
|
33
|
+
-- Each pair of key and value stored in table 'source' will be set into table
|
|
34
|
+
-- 'destiny'.
|
|
35
|
+
-- If no 'destiny' table is defined, a new empty table is used.
|
|
36
|
+
|
|
37
|
+
-- @param source Table containing elements to be copied.
|
|
38
|
+
-- @param destiny [optional] Table which elements must be copied into.
|
|
39
|
+
|
|
40
|
+
-- @return Table containing copied elements.
|
|
41
|
+
|
|
42
|
+
-- @usage copied = loop.table.copy(results)
|
|
43
|
+
-- @usage loop.table.copy(results, newcopy)
|
|
44
|
+
|
|
45
|
+
function copy(source, destiny)
|
|
46
|
+
if source then
|
|
47
|
+
if not destiny then destiny = {} end
|
|
48
|
+
for field, value in pairs(source) do
|
|
49
|
+
rawset(destiny, field, value)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
return destiny
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
--------------------------------------------------------------------------------
|
|
56
|
+
-- Clears all contens of a table.
|
|
57
|
+
|
|
58
|
+
-- All pairs of key and value stored in table 'source' will be removed by
|
|
59
|
+
-- setting nil to each key used to store values in table 'source'.
|
|
60
|
+
|
|
61
|
+
-- @param tab Table which must be cleared.
|
|
62
|
+
-- @usage return loop.table.clear(results)
|
|
63
|
+
|
|
64
|
+
function clear(tab)
|
|
65
|
+
local elem = next(tab)
|
|
66
|
+
while elem ~= nil do
|
|
67
|
+
tab[elem] = nil
|
|
68
|
+
elem = next(tab)
|
|
69
|
+
end
|
|
70
|
+
return tab
|
|
71
|
+
end
|
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
--------------------------------------------------------------------------------
|
|
2
|
+
---------------------- ## ##### ##### ###### -----------------------
|
|
3
|
+
---------------------- ## ## ## ## ## ## ## -----------------------
|
|
4
|
+
---------------------- ## ## ## ## ## ###### -----------------------
|
|
5
|
+
---------------------- ## ## ## ## ## ## -----------------------
|
|
6
|
+
---------------------- ###### ##### ##### ## -----------------------
|
|
7
|
+
---------------------- -----------------------
|
|
8
|
+
----------------------- Lua Object-Oriented Programming ------------------------
|
|
9
|
+
--------------------------------------------------------------------------------
|
|
10
|
+
-- Project: LOOP Class Library --
|
|
11
|
+
-- Release: 2.3 beta --
|
|
12
|
+
-- Title : Lua Socket Wrapper for Cooperative Scheduling --
|
|
13
|
+
-- Author : Renato Maia <maia@inf.puc-rio.br> --
|
|
14
|
+
--------------------------------------------------------------------------------
|
|
15
|
+
|
|
16
|
+
--[[VERBOSE]] local verbose = require("loop.thread.Scheduler").verbose
|
|
17
|
+
--[[VERBOSE]] verbose.groups.concurrency[#verbose.groups.concurrency+1] = "cosocket"
|
|
18
|
+
--[[VERBOSE]] verbose:newlevel{"cosocket"}
|
|
19
|
+
|
|
20
|
+
local ipairs = ipairs
|
|
21
|
+
local assert = assert
|
|
22
|
+
local setmetatable = setmetatable
|
|
23
|
+
local type = type
|
|
24
|
+
local next = next
|
|
25
|
+
local coroutine = require "coroutine"
|
|
26
|
+
local oo = require "loop.base"
|
|
27
|
+
local Wrapper = require "loop.object.Wrapper"
|
|
28
|
+
|
|
29
|
+
module("loop.thread.CoSocket", oo.class)
|
|
30
|
+
|
|
31
|
+
--------------------------------------------------------------------------------
|
|
32
|
+
-- Initialization Code ---------------------------------------------------------
|
|
33
|
+
--------------------------------------------------------------------------------
|
|
34
|
+
|
|
35
|
+
function __init(class, self, scheduler)
|
|
36
|
+
self = oo.rawnew(class, self)
|
|
37
|
+
self.readlocks = {}
|
|
38
|
+
self.writelocks = {}
|
|
39
|
+
if not self.scheduler then
|
|
40
|
+
self.scheduler = scheduler
|
|
41
|
+
end
|
|
42
|
+
return self
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
function __index(self, field)
|
|
46
|
+
return _M[field] or self.socketapi[field]
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
--------------------------------------------------------------------------------
|
|
50
|
+
-- Wrapping functions ----------------------------------------------------------
|
|
51
|
+
--------------------------------------------------------------------------------
|
|
52
|
+
|
|
53
|
+
local function wrappedsettimeout(self, timeout)
|
|
54
|
+
self.timeout = timeout or false
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
--------------------------------------------------------------------------------
|
|
58
|
+
|
|
59
|
+
local function wrappedconnect(self, host, port) --[[VERBOSE]] local verbose = self.cosocket.scheduler.verbose
|
|
60
|
+
local socket = self.__object --[[VERBOSE]] verbose:cosocket(true, "performing blocking connect")
|
|
61
|
+
socket:settimeout(-1)
|
|
62
|
+
local result, errmsg = socket:connect(host, port)
|
|
63
|
+
socket:settimeout(0) --[[VERBOSE]] verbose:cosocket(false, "blocking connect done")
|
|
64
|
+
return result, errmsg
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
--------------------------------------------------------------------------------
|
|
68
|
+
|
|
69
|
+
local function wrappedaccept(self)
|
|
70
|
+
local socket = self.__object
|
|
71
|
+
local timeout = self.timeout
|
|
72
|
+
local cosocket = self.cosocket
|
|
73
|
+
local readlocks = cosocket.readlocks
|
|
74
|
+
local scheduler = cosocket.scheduler --[[VERBOSE]] local verbose = scheduler.verbose
|
|
75
|
+
local current = scheduler:checkcurrent() --[[VERBOSE]] verbose:cosocket(true, "performing wrapped accept")
|
|
76
|
+
|
|
77
|
+
assert(socket, "bad argument #1 to `accept' (wrapped socket expected)")
|
|
78
|
+
assert(readlocks[socket] == nil, "attempt to read a socket in use")
|
|
79
|
+
|
|
80
|
+
local conn, errmsg = socket:accept()
|
|
81
|
+
if conn then --[[VERBOSE]] verbose:cosocket(false, "connection accepted without waiting")
|
|
82
|
+
return cosocket:wrap(conn)
|
|
83
|
+
elseif timeout == 0 or errmsg ~= "timeout" then --[[VERBOSE]] verbose:cosocket(false, "returning error ",errmsg," without waiting")
|
|
84
|
+
return nil, errmsg
|
|
85
|
+
end --[[VERBOSE]] verbose:cosocket(true, "waiting for results")
|
|
86
|
+
|
|
87
|
+
local sleeping = scheduler.sleeping
|
|
88
|
+
local reading = scheduler.reading
|
|
89
|
+
|
|
90
|
+
-- subscribing current thread for reading signal
|
|
91
|
+
reading:add(socket, current) --[[VERBOSE]] verbose:threads(current," subscribed for read signal")
|
|
92
|
+
|
|
93
|
+
-- lock socket for reading and wait for signal until timeout
|
|
94
|
+
readlocks[socket] = current
|
|
95
|
+
scheduler:suspend(timeout) --[[VERBOSE]] verbose:cosocket(false, "wrapped accept resumed")
|
|
96
|
+
readlocks[socket] = nil
|
|
97
|
+
|
|
98
|
+
-- if thread is still blocked for reading then waiting timed out
|
|
99
|
+
if reading[socket] == current then
|
|
100
|
+
reading:remove(socket) --[[VERBOSE]] verbose:threads(current," unsubscribed for read signal")
|
|
101
|
+
return nil, "timeout" --[[VERBOSE]] , verbose:cosocket(false, "waiting timed out")
|
|
102
|
+
elseif timeout then
|
|
103
|
+
sleeping:remove(current) --[[VERBOSE]] verbose:threads(current," removed from sleeping queue")
|
|
104
|
+
end --[[VERBOSE]] verbose:cosocket(false, "returing results after waiting")
|
|
105
|
+
|
|
106
|
+
return cosocket:wrap(socket:accept())
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
--------------------------------------------------------------------------------
|
|
110
|
+
|
|
111
|
+
local function wrappedreceive(self, pattern)
|
|
112
|
+
local socket = self.__object
|
|
113
|
+
local timeout = self.timeout
|
|
114
|
+
local readlocks = self.cosocket.readlocks
|
|
115
|
+
local scheduler = self.cosocket.scheduler --[[VERBOSE]] local verbose = scheduler.verbose
|
|
116
|
+
local current = scheduler:checkcurrent() --[[VERBOSE]] verbose:cosocket(true, "performing wrapped receive")
|
|
117
|
+
|
|
118
|
+
assert(socket, "bad argument #1 to `receive' (wrapped socket expected)")
|
|
119
|
+
assert(readlocks[socket] == nil, "attempt to read a socket in use")
|
|
120
|
+
|
|
121
|
+
-- get data already avaliable
|
|
122
|
+
local result, errmsg, partial = socket:receive(pattern)
|
|
123
|
+
|
|
124
|
+
-- check if job has completed
|
|
125
|
+
if not result and errmsg == "timeout" and timeout ~= 0 then --[[VERBOSE]] verbose:cosocket(true, "waiting for remaining of results")
|
|
126
|
+
local running = scheduler.running
|
|
127
|
+
local sleeping = scheduler.sleeping
|
|
128
|
+
local reading = scheduler.reading
|
|
129
|
+
|
|
130
|
+
-- set to be waken at timeout, if specified
|
|
131
|
+
if timeout and timeout > 0 then
|
|
132
|
+
sleeping:enqueue(current, scheduler:time() + timeout) --[[VERBOSE]] verbose:threads(current," registered for signal in ",timeout," seconds")
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
-- lock socket to avoid use by other coroutines
|
|
136
|
+
readlocks[socket] = true
|
|
137
|
+
|
|
138
|
+
-- block current thread on the socket
|
|
139
|
+
reading:add(socket, current) --[[VERBOSE]] verbose:threads(current," subscribed for read signal")
|
|
140
|
+
|
|
141
|
+
-- reduce the number of required bytes
|
|
142
|
+
if type(pattern) == "number" then
|
|
143
|
+
pattern = pattern - #partial --[[VERBOSE]] verbose:cosocket("amount of required bytes reduced to ",pattern)
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
repeat
|
|
147
|
+
-- stop current thread
|
|
148
|
+
running:remove(current, self.currentkey) --[[VERBOSE]] verbose:threads(current," suspended")
|
|
149
|
+
coroutine.yield() --[[VERBOSE]] verbose:cosocket(false, "wrapped receive resumed")
|
|
150
|
+
|
|
151
|
+
-- check if the socket is ready
|
|
152
|
+
if reading[socket] == current then
|
|
153
|
+
reading:remove(socket) --[[VERBOSE]] verbose:threads(current," unsubscribed for read signal")
|
|
154
|
+
errmsg = "timeout" --[[VERBOSE]] verbose:cosocket(false, "wrapped send timed out")
|
|
155
|
+
else --[[VERBOSE]] verbose:cosocket "reading more data from socket"
|
|
156
|
+
local newdata
|
|
157
|
+
result, errmsg, newdata = socket:receive(pattern)
|
|
158
|
+
if result then --[[VERBOSE]] verbose:cosocket "received all requested data"
|
|
159
|
+
result, errmsg, partial = partial..result, nil, nil --[[VERBOSE]] verbose:cosocket(false, "returning results after waiting")
|
|
160
|
+
else --[[VERBOSE]] verbose:cosocket "received only partial data"
|
|
161
|
+
partial = partial..newdata
|
|
162
|
+
|
|
163
|
+
if errmsg == "timeout" then
|
|
164
|
+
-- block current thread on the socket for more data
|
|
165
|
+
reading:add(socket, current) --[[VERBOSE]] verbose:threads(current," subscribed for another read signal")
|
|
166
|
+
|
|
167
|
+
-- reduce the number of required bytes
|
|
168
|
+
if type(pattern) == "number" then
|
|
169
|
+
pattern = pattern - #newdata --[[VERBOSE]] verbose:cosocket("amount of required bytes reduced to ",pattern)
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
-- cancel error message
|
|
173
|
+
errmsg = nil --[[VERBOSE]] else verbose:cosocket(false, "returning error ",errmsg," after waiting")
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
until result or errmsg
|
|
178
|
+
|
|
179
|
+
-- remove from sleeping queue if it was waken because of data on socket.
|
|
180
|
+
if timeout and timeout > 0 and errmsg ~= "timeout" then
|
|
181
|
+
sleeping:remove(current) --[[VERBOSE]] verbose:threads(current," removed from sleeping queue")
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
-- unlock socket to allow use by other coroutines
|
|
185
|
+
readlocks[socket] = nil --[[VERBOSE]] else verbose:cosocket(false, "returning results without waiting")
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
return result, errmsg, partial
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
--------------------------------------------------------------------------------
|
|
192
|
+
|
|
193
|
+
local function wrappedsend(self, data, i, j) --[[VERBOSE]] local verbose = self.cosocket.scheduler.verbose
|
|
194
|
+
local socket = self.__object --[[VERBOSE]] verbose:cosocket(true, "performing wrapped send")
|
|
195
|
+
local timeout = self.timeout
|
|
196
|
+
local writelocks = self.cosocket.writelocks
|
|
197
|
+
local scheduler = self.cosocket.scheduler
|
|
198
|
+
local current = scheduler:checkcurrent()
|
|
199
|
+
|
|
200
|
+
assert(socket, "bad argument #1 to `send' (wrapped socket expected)")
|
|
201
|
+
assert(writelocks[socket] == nil, "attempt to write a socket in use")
|
|
202
|
+
|
|
203
|
+
-- fill buffer space already avaliable
|
|
204
|
+
local sent, errmsg, lastbyte = socket:send(data, i, j)
|
|
205
|
+
|
|
206
|
+
-- check if job has completed
|
|
207
|
+
if not sent and errmsg == "timeout" and timeout ~= 0 then --[[VERBOSE]] verbose:cosocket(true, "waiting to send remaining data")
|
|
208
|
+
local running = scheduler.running
|
|
209
|
+
local sleeping = scheduler.sleeping
|
|
210
|
+
local writing = scheduler.writing
|
|
211
|
+
|
|
212
|
+
-- set to be waken at timeout, if specified
|
|
213
|
+
if timeout and timeout > 0 then
|
|
214
|
+
sleeping:enqueue(current, scheduler:time() + timeout) --[[VERBOSE]] verbose:threads(current," registered for signal in ",timeout," seconds")
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
-- lock socket to avoid use by other coroutines
|
|
218
|
+
writelocks[socket] = true
|
|
219
|
+
|
|
220
|
+
-- block current thread on the socket
|
|
221
|
+
writing:add(socket, current) --[[VERBOSE]] verbose:threads(current," subscribed for write signal")
|
|
222
|
+
|
|
223
|
+
repeat
|
|
224
|
+
-- stop current thread
|
|
225
|
+
running:remove(current, self.currentkey) --[[VERBOSE]] verbose:threads(current," suspended")
|
|
226
|
+
coroutine.yield() --[[VERBOSE]] verbose:cosocket "wrapped send resumed"
|
|
227
|
+
|
|
228
|
+
-- check if the socket is ready
|
|
229
|
+
if writing[socket] == current then
|
|
230
|
+
writing:remove(socket) --[[VERBOSE]] verbose:threads(current," unsubscribed for write signal")
|
|
231
|
+
errmsg = "timeout" --[[VERBOSE]] verbose:cosocket "wrapped send timed out"
|
|
232
|
+
else --[[VERBOSE]] verbose:cosocket "writing remaining data into socket"
|
|
233
|
+
sent, errmsg, lastbyte = socket:send(data, lastbyte+1, j)
|
|
234
|
+
if not sent and errmsg == "timeout" then
|
|
235
|
+
-- block current thread on the socket to write data
|
|
236
|
+
writing:add(socket, current) --[[VERBOSE]] verbose:threads(current," subscribed for another write signal")
|
|
237
|
+
-- cancel error message
|
|
238
|
+
errmsg = nil --[[VERBOSE]] elseif sent then verbose:cosocket "sent all supplied data" else verbose:cosocket("returning error ",errmsg," after waiting")
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
until sent or errmsg
|
|
242
|
+
|
|
243
|
+
-- remove from sleeping queue, if it was waken because of data on socket.
|
|
244
|
+
if timeout and timeout > 0 and errmsg ~= "timeout" then
|
|
245
|
+
sleeping:remove(current) --[[VERBOSE]] verbose:threads(current," removed from sleeping queue")
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
-- unlock socket to allow use by other coroutines
|
|
249
|
+
writelocks[socket] = nil --[[VERBOSE]] verbose:cosocket "send done after waiting" else verbose:cosocket(false, "send done without waiting")
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
return sent, errmsg, lastbyte
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
--------------------------------------------------------------------------------
|
|
256
|
+
-- Wrapped Socket API ----------------------------------------------------------
|
|
257
|
+
--------------------------------------------------------------------------------
|
|
258
|
+
|
|
259
|
+
function select(self, recvt, sendt, timeout)
|
|
260
|
+
local scheduler = self.scheduler --[[VERBOSE]] local verbose = scheduler.verbose
|
|
261
|
+
local current = scheduler:checkcurrent() --[[VERBOSE]] verbose:cosocket(true, "performing wrapped select")
|
|
262
|
+
|
|
263
|
+
if (recvt and #recvt > 0) or (sendt and #sendt > 0) then
|
|
264
|
+
local readlocks = self.readlocks
|
|
265
|
+
local writelocks = self.writelocks
|
|
266
|
+
|
|
267
|
+
-- assert that no thread is already blocked on these sockets
|
|
268
|
+
if recvt then
|
|
269
|
+
local new = {}
|
|
270
|
+
for index, wrapper in ipairs(recvt) do
|
|
271
|
+
local socket = wrapper.__object
|
|
272
|
+
assert(readlocks[socket] == nil, "attempt to read a socket in use")
|
|
273
|
+
new[index] = socket
|
|
274
|
+
new[socket] = wrapper
|
|
275
|
+
end
|
|
276
|
+
recvt = new
|
|
277
|
+
end
|
|
278
|
+
if sendt then
|
|
279
|
+
local new = {}
|
|
280
|
+
for index, wrapper in ipairs(sendt) do
|
|
281
|
+
local socket = wrapper.__object
|
|
282
|
+
assert(writelocks[socket] == nil, "attempt to write a socket in use")
|
|
283
|
+
new[index] = socket
|
|
284
|
+
new[socket] = wrapper
|
|
285
|
+
end
|
|
286
|
+
sendt = new
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
local readok, writeok, errmsg = scheduler.select(recvt, sendt, 0)
|
|
290
|
+
|
|
291
|
+
if
|
|
292
|
+
timeout ~= 0 and
|
|
293
|
+
errmsg == "timeout" and
|
|
294
|
+
next(readok) == nil and
|
|
295
|
+
next(writeok) == nil
|
|
296
|
+
then --[[VERBOSE]] verbose:cosocket(true, "waiting for ready socket selection")
|
|
297
|
+
local running = scheduler.running
|
|
298
|
+
local sleeping = scheduler.sleeping
|
|
299
|
+
local reading = scheduler.reading
|
|
300
|
+
local writing = scheduler.writing
|
|
301
|
+
|
|
302
|
+
-- block current thread on the sockets and lock them
|
|
303
|
+
if recvt then
|
|
304
|
+
for _, socket in ipairs(recvt) do
|
|
305
|
+
readlocks[socket] = current
|
|
306
|
+
reading:add(socket, current) --[[VERBOSE]] verbose:threads(current," subscribed for read signal")
|
|
307
|
+
end
|
|
308
|
+
end
|
|
309
|
+
if sendt then
|
|
310
|
+
for _, socket in ipairs(sendt) do
|
|
311
|
+
writelocks[socket] = current
|
|
312
|
+
writing:add(socket, current) --[[VERBOSE]] verbose:threads(current," subscribed for write signal")
|
|
313
|
+
end
|
|
314
|
+
end
|
|
315
|
+
|
|
316
|
+
-- set to be waken at timeout, if specified
|
|
317
|
+
if timeout and timeout > 0 then
|
|
318
|
+
sleeping:enqueue(current, scheduler:time() + timeout) --[[VERBOSE]] verbose:threads(current," registered for signal in ",timeout," seconds")
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
-- stop current thread
|
|
322
|
+
running:remove(current, self.currentkey) --[[VERBOSE]] verbose:threads(current," suspended")
|
|
323
|
+
coroutine.yield() --[[VERBOSE]] verbose:cosocket(false, "wrapped select resumed")
|
|
324
|
+
|
|
325
|
+
-- remove from sleeping queue, if it was waken because of data on socket.
|
|
326
|
+
if timeout and timeout > 0 then
|
|
327
|
+
if sleeping:remove(current)
|
|
328
|
+
then errmsg = nil --[[VERBOSE]] verbose:threads(current," removed from sleeping queue")
|
|
329
|
+
else errmsg = "timeout" --[[VERBOSE]] verbose:cosocket "wrapped select timed out"
|
|
330
|
+
end
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
-- check which sockets are ready and remove block for other sockets
|
|
334
|
+
if recvt then
|
|
335
|
+
for _, socket in ipairs(recvt) do
|
|
336
|
+
readlocks[socket] = nil
|
|
337
|
+
if reading[socket] == current then
|
|
338
|
+
reading:remove(socket) --[[VERBOSE]] verbose:threads(current," unsubscribed for read signal")
|
|
339
|
+
else
|
|
340
|
+
local wrapper = recvt[socket]
|
|
341
|
+
readok[#readok+1] = wrapper
|
|
342
|
+
readok[wrapper] = true
|
|
343
|
+
end
|
|
344
|
+
end
|
|
345
|
+
end
|
|
346
|
+
if sendt then
|
|
347
|
+
for _, socket in ipairs(sendt) do
|
|
348
|
+
writelocks[socket] = nil
|
|
349
|
+
if writing[socket] == current then
|
|
350
|
+
writing:remove(socket) --[[VERBOSE]] verbose:threads(current," unsubscribed for write signal")
|
|
351
|
+
else
|
|
352
|
+
local wrapper = sendt[socket]
|
|
353
|
+
writeok[#writeok+1] = wrapper
|
|
354
|
+
writeok[wrapper] = true
|
|
355
|
+
end
|
|
356
|
+
end
|
|
357
|
+
end
|
|
358
|
+
else
|
|
359
|
+
for index, socket in ipairs(readok) do
|
|
360
|
+
local wrapper = recvt[socket]
|
|
361
|
+
readok[index] = wrapper
|
|
362
|
+
readok[socket] = nil
|
|
363
|
+
readok[wrapper] = true
|
|
364
|
+
end
|
|
365
|
+
for index, socket in ipairs(writeok) do
|
|
366
|
+
local wrapper = sendt[socket]
|
|
367
|
+
writeok[index] = wrapper
|
|
368
|
+
writeok[socket] = nil
|
|
369
|
+
writeok[wrapper] = true
|
|
370
|
+
end
|
|
371
|
+
end --[[VERBOSE]] verbose:cosocket(false, "returning selected sockets after waiting")
|
|
372
|
+
|
|
373
|
+
return readok, writeok, errmsg
|
|
374
|
+
else --[[VERBOSE]] verbose:cosocket(false, "no sockets for selection")
|
|
375
|
+
return {}, {}
|
|
376
|
+
end
|
|
377
|
+
end
|
|
378
|
+
|
|
379
|
+
function sleep(self, timeout)
|
|
380
|
+
assert(timeout, "bad argument #1 to `sleep' (number expected)")
|
|
381
|
+
return self.scheduler:suspend(timeout)
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
function tcp(self)
|
|
385
|
+
return self:wrap(self.socketapi.tcp())
|
|
386
|
+
end
|
|
387
|
+
|
|
388
|
+
function udp(self)
|
|
389
|
+
return self:wrap(self.socketapi.udp())
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
function connect(self, address, port)
|
|
393
|
+
return self:wrap(self.socketapi.connect(address, port))
|
|
394
|
+
end
|
|
395
|
+
|
|
396
|
+
function bind(self, address, port)
|
|
397
|
+
return self:wrap(self.socketapi.bind(address, port))
|
|
398
|
+
end
|
|
399
|
+
|
|
400
|
+
function wrap(self, socket, ...) --[[VERBOSE]] self.scheduler.verbose:cosocket "new wrapped socket"
|
|
401
|
+
if socket then
|
|
402
|
+
socket:settimeout(0)
|
|
403
|
+
socket = Wrapper {
|
|
404
|
+
__object = socket,
|
|
405
|
+
cosocket = self,
|
|
406
|
+
timeout = false,
|
|
407
|
+
|
|
408
|
+
settimeout = wrappedsettimeout,
|
|
409
|
+
connect = wrappedconnect,
|
|
410
|
+
accept = wrappedaccept,
|
|
411
|
+
send = wrappedsend,
|
|
412
|
+
receive = wrappedreceive,
|
|
413
|
+
}
|
|
414
|
+
end
|
|
415
|
+
return socket, ...
|
|
416
|
+
end
|