appswarm 0.0.1

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.
Files changed (305) hide show
  1. data/.autotest +124 -0
  2. data/History.txt +7 -0
  3. data/Manifest.txt +304 -0
  4. data/README.txt +373 -0
  5. data/Rakefile +153 -0
  6. data/TODO +7 -0
  7. data/apps/README.txt +17 -0
  8. data/apps/admin/admin.rb +79 -0
  9. data/apps/admin/controllers/admin.rb +81 -0
  10. data/apps/admin/controllers/settings.rb +63 -0
  11. data/apps/admin/controllers/users.rb +3 -0
  12. data/apps/admin/features/access.feature +21 -0
  13. data/apps/admin/features/mountLocal.feature +12 -0
  14. data/apps/admin/features/settings.feature +68 -0
  15. data/apps/admin/features/startApps.feature +27 -0
  16. data/apps/admin/layouts/main.rhtml +10 -0
  17. data/apps/admin/lib/settings.rb +52 -0
  18. data/apps/admin/static/admin.css +23 -0
  19. data/apps/admin/views/_log.rhtml +21 -0
  20. data/apps/admin/views/index.rhtml +43 -0
  21. data/apps/admin/views/info.rhtml +7 -0
  22. data/apps/admin/views/settings.rhtml +9 -0
  23. data/apps/admin/views/settings/_http_app.rhtml +15 -0
  24. data/apps/admin/views/settings/_web_server.rhtml +32 -0
  25. data/apps/admin/views/settings/index.rhtml +3 -0
  26. data/apps/admin/views/users/index.rhtml +6 -0
  27. data/apps/application_provider/application_provider.rb +11 -0
  28. data/apps/blog/blog.rb +27 -0
  29. data/apps/blog/controllers/blog.rb +29 -0
  30. data/apps/blog/views/index.rhtml +27 -0
  31. data/apps/browser_starter/browser_starter.rb +32 -0
  32. data/apps/crypto/crypto.rb +47 -0
  33. data/apps/crypto/crypto_rsa.rb +102 -0
  34. data/apps/crypto/spec/crypto_spec.rb +10 -0
  35. data/apps/directory_service/directory_service.rb +107 -0
  36. data/apps/directory_service/net_application.rb +92 -0
  37. data/apps/directory_service/spec/directory_service_spec.rb +36 -0
  38. data/apps/directory_service/spec/net_application_spec.rb +3 -0
  39. data/apps/global_application_interface/global_application.rb +52 -0
  40. data/apps/global_application_interface/global_application_interface.rb +84 -0
  41. data/apps/global_application_interface/spec/app_api_spec.rb +5 -0
  42. data/apps/global_tuple_space/global_tuple_space.rb +27 -0
  43. data/apps/global_web_proxy/features/session_handling.feature +7 -0
  44. data/apps/global_web_proxy/global_web_proxy.rb +221 -0
  45. data/apps/global_web_proxy/proxy/HTTPProxyServer-Dateien/rdoc-style.css +208 -0
  46. data/apps/global_web_proxy/proxy/HTTPProxyServer.html +566 -0
  47. data/apps/global_web_proxy/proxy/dnstest.rb +30 -0
  48. data/apps/global_web_proxy/proxy/proxy.rb +86 -0
  49. data/apps/global_web_proxy/proxy/wiki.html +267 -0
  50. data/apps/global_web_proxy/proxy/wiki.rb +115 -0
  51. data/apps/global_web_proxy/spec/res1 +112 -0
  52. data/apps/global_web_proxy/spec/res2 +125 -0
  53. data/apps/global_web_proxy/spec/web_proxy_spec.rb +88 -0
  54. data/apps/global_web_server/global_web_server.rb +120 -0
  55. data/apps/global_web_server/global_web_servlet.rb +6 -0
  56. data/apps/hello_world/controllers/hello_world.rb +11 -0
  57. data/apps/hello_world/features/show_on_local_web_server.feature +44 -0
  58. data/apps/hello_world/features/starting_apps.feature +6 -0
  59. data/apps/hello_world/features/through_global.feature +12 -0
  60. data/apps/hello_world/hello_world.rb +3 -0
  61. data/apps/hello_world/views/get.rhtml +10 -0
  62. data/apps/hello_world/views/index.rhtml +9 -0
  63. data/apps/hello_world/views/post.rhtml +10 -0
  64. data/apps/home/controllers/home.rb +11 -0
  65. data/apps/home/home.rb +12 -0
  66. data/apps/home/layouts/main.rhtml +16 -0
  67. data/apps/home/static/Zeichnung.svg +240 -0
  68. data/apps/home/static/home.css +134 -0
  69. data/apps/home/static/menu.css +99 -0
  70. data/apps/home/views/_appInfo.rhtml +22 -0
  71. data/apps/home/views/_dummy_fill.rhtml +3 -0
  72. data/apps/home/views/_info.rhtml +6 -0
  73. data/apps/home/views/_menu.rhtml +17 -0
  74. data/apps/home/views/index.rhtml +4 -0
  75. data/apps/home/views/overview.rhtml +2 -0
  76. data/apps/local_chunk_store/chunk_store.rb +15 -0
  77. data/apps/local_chunk_store/local_chunk_store.rb +123 -0
  78. data/apps/local_chunk_store/spec/local_chunk_store_spec.rb +30 -0
  79. data/apps/local_file_store/app_configuration.rb +78 -0
  80. data/apps/local_file_store/app_file_store.rb +32 -0
  81. data/apps/local_file_store/cached_file_store.rb +94 -0
  82. data/apps/local_file_store/features/testbed_handling_of_directories.feature +20 -0
  83. data/apps/local_file_store/local_file_store.rb +47 -0
  84. data/apps/local_file_store/spec/app_configuration_spec.rb +30 -0
  85. data/apps/local_file_store/spec/local_file_store_spec.rb +54 -0
  86. data/apps/local_object_storage/lib/cell.rb +29 -0
  87. data/apps/local_object_storage/lib/cellmgr.rb +57 -0
  88. data/apps/local_object_storage/lib/index.rb +43 -0
  89. data/apps/local_object_storage/lib/marshal.rb +96 -0
  90. data/apps/local_object_storage/lib/pagefile.rb +6 -0
  91. data/apps/local_object_storage/lib/persistent_object.rb +126 -0
  92. data/apps/local_object_storage/local_object_storage.rb +148 -0
  93. data/apps/local_object_storage/spec/local_object_storage_spec.rb +123 -0
  94. data/apps/local_secure_file_store/local_secure_file_store.rb +64 -0
  95. data/apps/local_secure_file_store/spec/local_secure_file_store_spec.rb +23 -0
  96. data/apps/local_tuple_space/local_tuple_space.rb +92 -0
  97. data/apps/local_tuple_space/spec/tuple_space_spec.rb +25 -0
  98. data/apps/local_web_server/features/parsing_args.feature +18 -0
  99. data/apps/local_web_server/local_web_server.rb +166 -0
  100. data/apps/logger/logger.rb +27 -0
  101. data/apps/master/master.rb +46 -0
  102. data/apps/master/spec/master_spec.rb +31 -0
  103. data/apps/my_spec_spec.rb +15 -0
  104. data/apps/name_service/name_service.rb +75 -0
  105. data/apps/name_service/spec/name_service_spec.rb +51 -0
  106. data/apps/network_discovery/network_discovery.rb +45 -0
  107. data/apps/network_discovery_localstore/network_discovery_localstore.rb +20 -0
  108. data/apps/network_discovery_udp/network_discovery_udp.rb +51 -0
  109. data/apps/network_lookup/network_lookup.rb +61 -0
  110. data/apps/network_node/abstract_node.rb +104 -0
  111. data/apps/network_node/drb_node.rb +90 -0
  112. data/apps/network_node/network_app.rb +9 -0
  113. data/apps/network_node/network_node.rb +471 -0
  114. data/apps/network_node/remote_service.rb +45 -0
  115. data/apps/network_node/secure_node.rb +125 -0
  116. data/apps/network_node/spec/drb_spec.rb +41 -0
  117. data/apps/network_node/spec/network_node_spec_not.rb +264 -0
  118. data/apps/new_network_node/new_network_node.rb +427 -0
  119. data/apps/new_network_node/spec/new_network_node_spec.rb +186 -0
  120. data/apps/node_broadcast/node_broadcast.rb +167 -0
  121. data/apps/node_broadcast/spec/node_broadcast_spec.rb +59 -0
  122. data/apps/permaspace/permaspace.rb +47 -0
  123. data/apps/plaindb/lib/btree.rb +38 -0
  124. data/apps/plaindb/plaindb.rb +199 -0
  125. data/apps/plaindb/spec/table_write_spec.rb +36 -0
  126. data/apps/routed_network/routed_network.rb +23 -0
  127. data/apps/routed_network/spec/routed_network_spec.rb +17 -0
  128. data/apps/session_manager/session_manager.rb +18 -0
  129. data/apps/spec_output.html +222 -0
  130. data/apps/todo/controllers/todo.rb +87 -0
  131. data/apps/todo/model/comment.rb +10 -0
  132. data/apps/todo/model/project.rb +20 -0
  133. data/apps/todo/model/todo.rb +16 -0
  134. data/apps/todo/model/user.rb +5 -0
  135. data/apps/todo/todo.rb +21 -0
  136. data/apps/todo/views/_commentList.rhtml +7 -0
  137. data/apps/todo/views/_createProject.rhtml +5 -0
  138. data/apps/todo/views/_partList.rhtml +12 -0
  139. data/apps/todo/views/_projectList.rhtml +16 -0
  140. data/apps/todo/views/edit.rhtml +11 -0
  141. data/apps/todo/views/editPart.rhtml +10 -0
  142. data/apps/todo/views/index.rhtml +2 -0
  143. data/apps/todo/views/question.rhtml +4 -0
  144. data/apps/transparent_network/transparent_network.rb +7 -0
  145. data/apps/udp_network/big_transfer.rb +97 -0
  146. data/apps/udp_network/features/information.feature +7 -0
  147. data/apps/udp_network/message_queue.rb +84 -0
  148. data/apps/udp_network/network_interface_api.rb +39 -0
  149. data/apps/udp_network/qos_queue.rb +186 -0
  150. data/apps/udp_network/simple_api.rb +180 -0
  151. data/apps/udp_network/spec/big_transfer_spec.rb +0 -0
  152. data/apps/udp_network/spec/qos_queue_spec.rb +99 -0
  153. data/apps/udp_network/spec/simple_api_spec.rb +35 -0
  154. data/apps/udp_network/spec/udp_network_spec.rb +115 -0
  155. data/apps/udp_network/spec/udp_transceiver_spec.rb +90 -0
  156. data/apps/udp_network/udp_network.rb +196 -0
  157. data/apps/udp_network/udp_transceiver.rb +329 -0
  158. data/apps/wiki/controllers/wiki.rb +56 -0
  159. data/apps/wiki/features/editing.feature +21 -0
  160. data/apps/wiki/layouts/main.rhtml +18 -0
  161. data/apps/wiki/lib/media_wiki_html.rb +35 -0
  162. data/apps/wiki/lib/wikicreole.rb +2147 -0
  163. data/apps/wiki/lib/wikicreole.tt +135 -0
  164. data/apps/wiki/lib/wikitest.rb +158 -0
  165. data/apps/wiki/lib/wikitest.tt +17 -0
  166. data/apps/wiki/model/menu.rb +15 -0
  167. data/apps/wiki/model/page.rb +31 -0
  168. data/apps/wiki/spec/wiki_creole_spec.rb +20 -0
  169. data/apps/wiki/spec/wiki_spec.rb +19 -0
  170. data/apps/wiki/static/Zeichnung.svg +240 -0
  171. data/apps/wiki/static/home.css +134 -0
  172. data/apps/wiki/static/mainMenu.css +32 -0
  173. data/apps/wiki/static/menu.css +99 -0
  174. data/apps/wiki/views/_mainMenu.rhtml +3 -0
  175. data/apps/wiki/views/_menu.rhtml +13 -0
  176. data/apps/wiki/views/edit.rhtml +13 -0
  177. data/apps/wiki/views/index.rhtml +2 -0
  178. data/apps/wiki/views/save.rhtml +1 -0
  179. data/apps/wiki/wiki.rb +17 -0
  180. data/bin/appswarm +47 -0
  181. data/cucumber.yml +2 -0
  182. data/data/PermaspaceApp/AFS_WikiApp_wiki_config +6 -0
  183. data/data/draft.txt +63 -0
  184. data/docs/appswarm_motivation.graffle +0 -0
  185. data/docs/appswarm_pics.graffle/QuickLook/Preview.pdf +0 -0
  186. data/docs/appswarm_pics.graffle/QuickLook/Thumbnail.tiff +0 -0
  187. data/docs/appswarm_pics.graffle/data.plist +63494 -0
  188. data/docs/appswarm_pics.graffle/image1.tiff +0 -0
  189. data/docs/appswarm_pics.graffle/image2.tif +0 -0
  190. data/docs/appswarm_pics.graffle/image3.tif +0 -0
  191. data/docs/appswarm_pics.graffle/image4.tif +0 -0
  192. data/docs/appswarm_pics.graffle/image5.tiff +0 -0
  193. data/docs/routing.graffle +0 -0
  194. data/features/step_definitions/appstart_steps.rb +28 -0
  195. data/features/step_definitions/cluster_steps.rb +18 -0
  196. data/features/step_definitions/testbed_steps.rb +64 -0
  197. data/features/step_definitions/webapp_steps.rb +257 -0
  198. data/features/support/env.rb +7 -0
  199. data/lib/appswarm.rb +127 -0
  200. data/lib/appswarm/README.txt +67 -0
  201. data/lib/appswarm/app_config.rb +19 -0
  202. data/lib/appswarm/application.rb +267 -0
  203. data/lib/appswarm/breaking_mutex.rb +41 -0
  204. data/lib/appswarm/cluster_funcs.rb +157 -0
  205. data/lib/appswarm/cross_spectool.rb +153 -0
  206. data/lib/appswarm/crypt.rb +10 -0
  207. data/lib/appswarm/crypt/crypto.rb +90 -0
  208. data/lib/appswarm/crypt/rsa_key +15 -0
  209. data/lib/appswarm/crypt/rsa_key.pub +5 -0
  210. data/lib/appswarm/crypt/test.rb +27 -0
  211. data/lib/appswarm/dir_tool.rb +41 -0
  212. data/lib/appswarm/event_api.rb +7 -0
  213. data/lib/appswarm/features_helper.rb +44 -0
  214. data/lib/appswarm/global_service.rb +38 -0
  215. data/lib/appswarm/http.rb +1 -0
  216. data/lib/appswarm/http/http_app.rb +257 -0
  217. data/lib/appswarm/http/http_controller.rb +267 -0
  218. data/lib/appswarm/http/http_provider.rb +80 -0
  219. data/lib/appswarm/http/static/favicon.ico +0 -0
  220. data/lib/appswarm/http/static/javascript/._prototype.js +0 -0
  221. data/lib/appswarm/http/static/javascript/prototype.js +2515 -0
  222. data/lib/appswarm/http/webrick_logger.rb +12 -0
  223. data/lib/appswarm/net_service.rb +69 -0
  224. data/lib/appswarm/package.rb +88 -0
  225. data/lib/appswarm/parallel_each.rb +46 -0
  226. data/lib/appswarm/protocols/protocol_dice.rb +25 -0
  227. data/lib/appswarm/proxy_testing.rb +48 -0
  228. data/lib/appswarm/public_api.rb +35 -0
  229. data/lib/appswarm/routing/matrix_math.rb +57 -0
  230. data/lib/appswarm/routing/pca.rb +211 -0
  231. data/lib/appswarm/routing/routetest.rb +85 -0
  232. data/lib/appswarm/routing/routing.rb +326 -0
  233. data/lib/appswarm/routing/spec/nods_spec.rb +23 -0
  234. data/lib/appswarm/routing/spec/pca_spec.rb +27 -0
  235. data/lib/appswarm/routing/spec/routing_spec.rb +91 -0
  236. data/lib/appswarm/secure_con.rb +437 -0
  237. data/lib/appswarm/secure_connection.rb +79 -0
  238. data/lib/appswarm/secure_marshal.rb +137 -0
  239. data/lib/appswarm/service.rb +76 -0
  240. data/lib/appswarm/simple_marshal.rb +96 -0
  241. data/lib/appswarm/simple_marshal_parser.rb +1243 -0
  242. data/lib/appswarm/simple_marshal_parser.tt +158 -0
  243. data/lib/appswarm/spec/application_spec.rb +50 -0
  244. data/lib/appswarm/spec/cluster_spec.rb +2 -0
  245. data/lib/appswarm/spec/hexdist_spec.rb +13 -0
  246. data/lib/appswarm/spec/http_controller_spec.rb +18 -0
  247. data/lib/appswarm/spec/main_spec.rb +6 -0
  248. data/lib/appswarm/spec/parallel_each_spec.rb +30 -0
  249. data/lib/appswarm/spec/secure_connection_spec.rb +108 -0
  250. data/lib/appswarm/spec/secure_marshal_spec.rb +93 -0
  251. data/lib/appswarm/spec/simple_marshal_spec.rb +87 -0
  252. data/lib/appswarm/spec/tools_spec.rb +13 -0
  253. data/lib/appswarm/spec/whiteboard_spec.rb +20 -0
  254. data/lib/appswarm/spec_helper.rb +18 -0
  255. data/lib/appswarm/test_bed.rb +207 -0
  256. data/lib/appswarm/tools.rb +284 -0
  257. data/lib/appswarm/tools/http_tunnel_client.rb +139 -0
  258. data/lib/appswarm/tools/http_tunnel_common.rb +8 -0
  259. data/lib/appswarm/tools/http_tunnel_server.rb +78 -0
  260. data/lib/appswarm/tools/parser/example_data.simple +102 -0
  261. data/lib/appswarm/tools/parser/match_test.rb +14 -0
  262. data/lib/appswarm/tools/parser/parser_lib.rb +165 -0
  263. data/lib/appswarm/tools/parser/parser_test.rb +104 -0
  264. data/lib/appswarm/tools/parser/spec/parser_spec.rb +44 -0
  265. data/lib/appswarm/tools/pipes.rb +95 -0
  266. data/lib/appswarm/tools/spec/tracing_spec.rb +16 -0
  267. data/lib/appswarm/tools/spec/waiting_queue_spec.rb +15 -0
  268. data/lib/appswarm/tools/thread_tool.rb +61 -0
  269. data/lib/appswarm/tools/tracing.rb +84 -0
  270. data/lib/appswarm/tools/treetop_test.rb +20 -0
  271. data/lib/appswarm/tools/treetop_test_grammar.rb +114 -0
  272. data/lib/appswarm/tools/treetop_test_grammar.tt +7 -0
  273. data/lib/appswarm/tools/waiting_prio_queue.rb +47 -0
  274. data/lib/appswarm/tools/waiting_queue.rb +34 -0
  275. data/lib/appswarm/whiteboard.rb +73 -0
  276. data/nettest.rb +50 -0
  277. data/packages/README.txt +1 -0
  278. data/packages/msandbox/data/packages/store/my.txt +1 -0
  279. data/packages/msandbox/interfaces.rb +172 -0
  280. data/packages/msandbox/old/defa.rb +3 -0
  281. data/packages/msandbox/old/test.rb +14 -0
  282. data/packages/msandbox/old/test2.rb +56 -0
  283. data/packages/msandbox/package.rb +67 -0
  284. data/packages/msandbox/packages/store/config.yml +1 -0
  285. data/packages/msandbox/packages/store/main.rb +27 -0
  286. data/packages/msandbox/packages/store/myinclude.rb +7 -0
  287. data/packages/msandbox/packages/store_test/config.yml +1 -0
  288. data/packages/msandbox/packages/store_test/main.rb +9 -0
  289. data/packages/msandbox/server.rb +146 -0
  290. data/packages/msandbox/test.rb +13 -0
  291. data/packages/msandbox/test2.rb +29 -0
  292. data/templates/web/appswarm/controllers/appswarm.rb +41 -0
  293. data/templates/web/appswarm/layouts/main.rhtml +20 -0
  294. data/templates/web/appswarm/models/asmenu.rb +14 -0
  295. data/templates/web/appswarm/models/asuser.rb +30 -0
  296. data/templates/web/appswarm/static/custom.css +15 -0
  297. data/templates/web/appswarm/static/home.css +134 -0
  298. data/templates/web/appswarm/static/mainMenu.css +32 -0
  299. data/templates/web/appswarm/static/menu.css +99 -0
  300. data/templates/web/appswarm/views/_mainMenu.rhtml +5 -0
  301. data/templates/web/appswarm/views/_menu.rhtml +13 -0
  302. data/templates/web/appswarm/views/_userInfo.rhtml +7 -0
  303. data/templates/web/appswarm/views/login.rhtml +9 -0
  304. data/tools/checkPort.rb +11 -0
  305. metadata +379 -0
@@ -0,0 +1,114 @@
1
+ module TreetopTestGrammar
2
+ include Treetop::Runtime
3
+
4
+ def root
5
+ @root || :BasicString
6
+ end
7
+
8
+ module BasicString0
9
+ end
10
+
11
+ module BasicString1
12
+ end
13
+
14
+ def _nt_BasicString
15
+ start_index = index
16
+ if node_cache[:BasicString].has_key?(index)
17
+ cached = node_cache[:BasicString][index]
18
+ @index = cached.interval.end if cached
19
+ return cached
20
+ end
21
+
22
+ i0, s0 = index, []
23
+ if input.index('"', index) == index
24
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
25
+ @index += 1
26
+ else
27
+ terminal_parse_failure('"')
28
+ r1 = nil
29
+ end
30
+ s0 << r1
31
+ if r1
32
+ s2, i2 = [], index
33
+ loop do
34
+ i3 = index
35
+ i4, s4 = index, []
36
+ if input.index('\\', index) == index
37
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
38
+ @index += 1
39
+ else
40
+ terminal_parse_failure('\\')
41
+ r5 = nil
42
+ end
43
+ s4 << r5
44
+ if r5
45
+ if index < input_length
46
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
47
+ @index += 1
48
+ else
49
+ terminal_parse_failure("any character")
50
+ r6 = nil
51
+ end
52
+ s4 << r6
53
+ end
54
+ if s4.last
55
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
56
+ r4.extend(BasicString0)
57
+ else
58
+ self.index = i4
59
+ r4 = nil
60
+ end
61
+ if r4
62
+ r3 = r4
63
+ else
64
+ if input.index(Regexp.new('[^"\\\\]'), index) == index
65
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
66
+ @index += 1
67
+ else
68
+ r7 = nil
69
+ end
70
+ if r7
71
+ r3 = r7
72
+ else
73
+ self.index = i3
74
+ r3 = nil
75
+ end
76
+ end
77
+ if r3
78
+ s2 << r3
79
+ else
80
+ break
81
+ end
82
+ end
83
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
84
+ s0 << r2
85
+ if r2
86
+ if input.index('"', index) == index
87
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
88
+ @index += 1
89
+ else
90
+ terminal_parse_failure('"')
91
+ r8 = nil
92
+ end
93
+ s0 << r8
94
+ end
95
+ end
96
+ if s0.last
97
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
98
+ r0.extend(BasicString1)
99
+ else
100
+ self.index = i0
101
+ r0 = nil
102
+ end
103
+
104
+ node_cache[:BasicString][start_index] = r0
105
+
106
+ return r0
107
+ end
108
+
109
+ end
110
+
111
+ class TreetopTestGrammarParser < Treetop::Runtime::CompiledParser
112
+ include TreetopTestGrammar
113
+ end
114
+
@@ -0,0 +1,7 @@
1
+ grammar TreetopTestGrammar
2
+ #
3
+
4
+ rule BasicString
5
+ '"' ('\\' . / [^"\\])* '"'
6
+ end
7
+ end
@@ -0,0 +1,47 @@
1
+ class WaitingPrioQueue
2
+ def initialize(&block)
3
+ @mutex=Mutex.new
4
+ if block
5
+ @block=block
6
+ else
7
+ @block=lambda {|a,b|a<=>b}
8
+ end
9
+ @buf=[]
10
+ end
11
+
12
+ def push(value)
13
+ @mutex.synchronize {
14
+ @buf<<value
15
+ }
16
+ @waitThreads.each{|th|th.wakeup}
17
+ @waitThreads.uniq!
18
+ pp "PUSH",@waitThreads
19
+ end
20
+ def <<(value)
21
+ push(value)
22
+ end
23
+
24
+ def pop
25
+ @waitThreads<<Thread.current
26
+ loop do
27
+ Thread.stop if empty?
28
+ @mutex.synchronize {
29
+ unless empty?
30
+ value=getBest
31
+ @waitThreads.delete(self)
32
+ pp "POP",@waitThreads
33
+ @waitThreads.uniq!
34
+ return value
35
+ end
36
+
37
+ }
38
+ end
39
+ end
40
+
41
+ private
42
+ def getBest
43
+ best=@buf.min(&block)
44
+ @buf.delete(best)
45
+ best
46
+ end
47
+ end
@@ -0,0 +1,34 @@
1
+ class WaitingQueue<Queue
2
+ def initialize(*args)
3
+ super
4
+ @mutex=Mutex.new
5
+ @waitThreads=[]
6
+ end
7
+
8
+ def push(value)
9
+ @mutex.synchronize {
10
+ super
11
+ }
12
+ @waitThreads.each{|th|th.wakeup}
13
+ @waitThreads.uniq!
14
+ end
15
+ def <<(value)
16
+ push(value)
17
+ end
18
+
19
+ def pop
20
+ @waitThreads<<Thread.current
21
+ loop do
22
+ Thread.stop if empty?
23
+ @mutex.synchronize {
24
+ unless empty?
25
+ value=super
26
+ @waitThreads.delete(self)
27
+ @waitThreads.uniq!
28
+ return value
29
+ end
30
+
31
+ }
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,73 @@
1
+ # whiteboard.rb contains Whiteboard class
2
+ require 'thread'
3
+ require 'pp'
4
+
5
+
6
+ # Whiteboard is a pretty simple messaging class, that can be used for
7
+ # different (local) threads. It's meant for use in storing incoming messages
8
+ # for later processing.
9
+ #
10
+ # The normal usage looks like this:
11
+ # w=Whiteboard.new
12
+ # <spawn thread1 and thread2>
13
+ # thread1: a=w.get(:myKey)
14
+ # <thread1 is suspended, because myKey is not there>
15
+ # thread2: w.put(:myKey,:myValue)
16
+ # <thread1 is woken up and has a==:myValue>
17
+ #
18
+ # This is NOT Possible:
19
+ # Whiteboard.new.put(:myKey,:myValue)
20
+ # because nobody's listening for myKey
21
+ #
22
+ # This is NOT possible either:
23
+ # w=Whiteboard.new
24
+ # thread1: w.get(:myValue)
25
+ # thread2: w.get(:myValue)
26
+ # because thread1 is already waiting for this value
27
+ #
28
+ # in practise this is not a problem, because the values are transaction-ids within node communication should not be duplicated.
29
+
30
+ class Whiteboard
31
+ def initialize()
32
+ @cvs={}
33
+ @values={}
34
+ @mutex=Mutex.new
35
+ end
36
+
37
+ # sends +value+ directly to the listening thread waiting for +name+
38
+ # if there's no waiting thread an exception is raised
39
+ def put(name,value)
40
+ @mutex.synchronize {
41
+ raise "Conflict in put" if @values[name]
42
+ @values[name]=value
43
+ raise "No one listening" if @cvs[name].nil?
44
+ @cvs[name].wakeup
45
+ @cvs.delete(name)
46
+ }
47
+ end
48
+
49
+ # waits for name to be put into the local store then returns the value
50
+ def get(name,timeout=nil)
51
+ value=nil
52
+ measureTime(7) {
53
+ @mutex.synchronize {
54
+ raise "Already value there" if @values[name]
55
+ raise "Already listening" if @cvs[name]
56
+ @cvs[name]=Thread.current
57
+ }
58
+ if timeout.nil?
59
+ Thread.stop
60
+ else
61
+ # FIXME:wait until timeout
62
+ Thread.stop
63
+ end
64
+
65
+ @mutex.synchronize {
66
+ value=@values[name]
67
+ @values.delete(name)
68
+ }
69
+ }
70
+ value
71
+ end
72
+ end
73
+
data/nettest.rb ADDED
@@ -0,0 +1,50 @@
1
+ require 'pp'
2
+ require 'rbconfig'
3
+ require 'optparse'
4
+
5
+
6
+ # run a new ruby-interpreter in a separate process and return it's pid
7
+ def ruby(*x)
8
+ rb="ruby"
9
+ $pcount||=0
10
+ $pcount+=1
11
+ pcount=$pcount
12
+ Process.fork {
13
+ fn="log#{pcount}.txt"
14
+ puts fn
15
+ puts `#{rb} #{x.join(" ")} >#{fn}`
16
+ }
17
+ end
18
+
19
+ # default number of process is 4
20
+ options={:count=>4}
21
+ opts=OptionParser.new do |opts|
22
+ opts.banner = "Usage: nettest [options]"
23
+
24
+ opts.separator ""
25
+ opts.separator "Specific options:"
26
+
27
+ opts.on("-d", "--enable-debug",
28
+ "enable debugging") do
29
+ options[:debug]=true
30
+ end
31
+ opts.on("--count PROESS_COUNT") do |count|
32
+ options[:count]=count.to_i
33
+ end
34
+ if block_given?
35
+ yield opts
36
+ end
37
+
38
+ end
39
+
40
+ opts.parse!
41
+ pp options
42
+
43
+ options[:count].times{|c|
44
+ puts "starting Process #{c}"
45
+ ruby("main.rb","--http-port",2000+c)
46
+ }
47
+
48
+ puts "Waiting for processes to finish..."
49
+
50
+ Process.wait
@@ -0,0 +1 @@
1
+ This directory will include packages with sandboxed applications.
@@ -0,0 +1 @@
1
+ huhuhuhuhuhu
@@ -0,0 +1,172 @@
1
+ #class InterfaceBase
2
+ def exposeInterface(klass,box,definition,*args)
3
+ klassName=klass.to_s
4
+ #args=args.map{|a|"'"+a.to_s+"'"}.join(",")
5
+ name=definition.name
6
+ iname=klassName+name
7
+ api=klass.interfaceApi.map{|f|
8
+ "def self.#{f}(*s)
9
+ begin
10
+ @@i.#{f}(*s)
11
+ rescue Object=>e
12
+ BasicInterface::puts e
13
+ end
14
+ end"
15
+ }.join("\n")
16
+ $myargs = args
17
+ s="
18
+ module #{iname}
19
+ @@i=#{klassName}.new(*$myargs)
20
+ #{api}
21
+ end"
22
+ #pp s
23
+ eval(s,binding)
24
+
25
+ klass.class_eval("@@interface=#{iname}
26
+ def interface
27
+ @@interface
28
+ end
29
+ ")
30
+
31
+
32
+ $myargs = nil
33
+
34
+ #pp iname
35
+ #exit
36
+ s="box.ref(#{iname})"
37
+ pp s
38
+ eval(s)
39
+ s="box.eval('#{klassName}=#{iname}')"
40
+ eval(s)
41
+
42
+ end
43
+
44
+
45
+ class Class
46
+ def interfaceApi(*s)
47
+ @@interfaces||=[]
48
+ @@interfaces << self
49
+ @@api||=[]
50
+ s.each{|f|
51
+ @@api << f
52
+ }
53
+ @@api
54
+ end
55
+ def self.interfaceClasses
56
+ @@interfaces.uniq
57
+ end
58
+ end
59
+
60
+
61
+ class BasicInterface
62
+ interfaceApi :test, :puts, :pp
63
+ def test
64
+ puts "TEST"
65
+ end
66
+ def puts(*s)
67
+ Kernel::puts(*s)
68
+ end
69
+ def pp(*s)
70
+ self.puts s.inspect
71
+ end
72
+ end
73
+
74
+ class FSInterface
75
+ def initialize(dir)
76
+ @dir=dir
77
+ end
78
+
79
+ interfaceApi :save, :load
80
+
81
+ def save(filename,content)
82
+ raise AccessViolation unless filename=~/^[a-zA-Z_\.0-9]*$/
83
+ p=File.join(@dir,filename)
84
+ puts "saving ",p
85
+ File.open(p,"w") do |f|
86
+ f.puts content
87
+ end
88
+ end
89
+
90
+ def load(filename)
91
+ raise AccessViolation unless filename=~/^[a-zA-Z_\.0-9]*$/
92
+ p=File.join(@dir,filename)
93
+ #puts "loading ",p
94
+ File.open(p) do |f|
95
+ f.read
96
+ end
97
+ end
98
+
99
+
100
+ def self.create(box,definition,server)
101
+ exposeInterface(self,box,definition,"data/packages/#{definition.name}")
102
+ end
103
+ end
104
+
105
+ class RequireInterface
106
+ interfaceApi :loadPrg
107
+
108
+ def initialize(path)
109
+ @path=path
110
+ end
111
+
112
+ def loadPrg(filename)
113
+ raise AccessViolation unless filename=~/^[a-zA-Z_\.0-9]*$/
114
+ p=File.join(@path,filename)
115
+ File.open(p) do |f|
116
+ f.read
117
+ end
118
+ end
119
+
120
+ def self.create(box,definition,server)
121
+ exposeInterface(self,box,definition,"packages/#{definition.name}")
122
+ end
123
+
124
+ end
125
+
126
+ class OtherPackage
127
+ def initialize(pkgname)
128
+ @pkgname=pkgname
129
+ end
130
+ def method_missing(*s)
131
+ #pp s
132
+ PackageInterface::run(@pkgname,*s)
133
+ end
134
+ end
135
+
136
+
137
+ class PackageInterface
138
+ interfaceApi :package, :run
139
+
140
+ def initialize(server)
141
+ @server=server
142
+ end
143
+
144
+ def run(*x)
145
+
146
+ pp x
147
+ @server.interface(x[0]).send(*x[1..-1])
148
+ end
149
+
150
+ def package(name)
151
+ pp "PACKAGE:",name,interface
152
+ OtherPackage.new(name)
153
+ #nil
154
+ end
155
+
156
+ def self.create(box,definition,server)
157
+ box.eval("class OtherPackage
158
+ def initialize(interface,pkgname)
159
+ @interface=interface
160
+ @pkgname=pkgname
161
+ end
162
+ def method_missing(*s)
163
+ PackageInterface::run(@pkgname,*s)
164
+ end
165
+ end
166
+ ")
167
+
168
+ exposeInterface(self,box,definition,server)
169
+ end
170
+ end
171
+
172
+ #INTERFACES=[BasicInterface,FSInterface]