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,75 @@
1
+ class NameServiceApp<Service
2
+ provides :nameService
3
+ requires :directoryService
4
+ requires :localFileStore
5
+
6
+ def initialize(cluster,ops)
7
+ super(cluster,ops,:nameService)
8
+ @cache={}
9
+ tryLoad
10
+ @cache.each{|k,v|export(k,v)}
11
+ end
12
+
13
+ def run
14
+ wait4DS
15
+ super
16
+
17
+ end
18
+
19
+ def get(url)
20
+ wait4DS
21
+ result=getApp(:directoryService).get([:nameService,url])
22
+ @cache[url]=result
23
+ end
24
+
25
+
26
+ def export(url,instance)
27
+ @cache[url]=instance
28
+ getApp(:directoryService).set([:nameService,url],instance)
29
+ trySave
30
+ end
31
+
32
+ def clear
33
+ @cache={}
34
+ end
35
+
36
+ def stop
37
+ # FIXME: export anything to others
38
+ trySave
39
+ super
40
+ end
41
+
42
+ def content
43
+ @cache
44
+ end
45
+
46
+ #private
47
+ def wait4DS
48
+ wait=2
49
+ x=0.1
50
+ while wait>0
51
+ break if getApp(:directoryService)
52
+ sleep x
53
+ wait-=x
54
+ end
55
+ end
56
+ private
57
+
58
+ def trySave
59
+ begin
60
+ retrieveConfig["cache"]=@cache
61
+ rescue Object=>e
62
+ pp e,e.backtrace
63
+ end
64
+ end
65
+
66
+ def tryLoad
67
+ begin
68
+ @cache=retrieveConfig["cache"].content
69
+ rescue Object=>e
70
+ pp e,e.backtrace
71
+ end
72
+ @cache||={}
73
+ end
74
+
75
+ end
@@ -0,0 +1,51 @@
1
+ require 'tools/tracing.rb'
2
+
3
+ #Tracer.enable
4
+
5
+ describe "Name Service" do
6
+ it_should_behave_like "AppSwarm Test"
7
+ it "can export names and all connected nodes can look it up" do
8
+ b=NetworkTestBed.new(10)
9
+ b.run("NetworkDiscoveryUdp","UdpNetwork","NameService")
10
+ b.eachApp(:nameService){|app|app.clear}
11
+ n=b.first(:nameService)
12
+ sleepDebug 7
13
+ n.export("myName","myHost")
14
+ b.eachApp(:nameService){|app|app.get("myName").should == "myHost"}
15
+ b.stop
16
+ end
17
+ it "can retrieve names at will" do
18
+ b=NetworkTestBed.new(10)
19
+ b.run("NetworkDiscoveryUdp","UdpNetwork","NameService")
20
+ b.eachApp(:nameService){|app|app.clear}
21
+
22
+ sleepDebug 5
23
+ map={1=>2,3=>4,5=>6,7=>8}
24
+ 1.upto(map.length){|i|
25
+ key=map.keys[i-1]
26
+ b.app(:nameService,i-1).export(key,map[key])
27
+ }
28
+
29
+ b.eachApp(:nameService){|app|
30
+ map.keys.each{|key|
31
+ app.get(key).should == map[key]
32
+ }
33
+ }
34
+
35
+ b.stop
36
+ end
37
+ it "should store and load dictionary" do
38
+ b=TestBed.new
39
+ n=b.run("NameService")
40
+ sleepDebug 0.2
41
+ n.clear
42
+ n.export("MyUrl","MyHost")
43
+ b.stop
44
+ b=TestBed.new(:testbedId=>b.testbedId)
45
+ n=b.run("NameService")
46
+ sleepDebug 0.1
47
+ pp n.content
48
+ n.get("MyUrl").should == "MyHost"
49
+ b.stop
50
+ end
51
+ end
@@ -0,0 +1,45 @@
1
+ class NetworkDiscoveryApp<Service
2
+ DISCOVERY=[:networkDiscoveryLocalstore,:networkDiscoveryUdp]
3
+
4
+ requires *DISCOVERY
5
+ provides :networkDiscovery
6
+
7
+
8
+ def initialize(cluster,options)
9
+ super(cluster,options,:networkDiscovery)
10
+
11
+
12
+ @discovery=options[:discovery]
13
+ @discovery||=DISCOVERY
14
+
15
+ end
16
+
17
+ def add(node)
18
+ @discovery.each{|d|
19
+ a=getApp(d)
20
+ if a
21
+ a.add(node)
22
+ end
23
+ }
24
+ end
25
+
26
+ def remove(node)
27
+ @discovery.each{|d|
28
+ a=getApp(d)
29
+ if a
30
+ a.remove(node)
31
+ end
32
+ }
33
+ end
34
+
35
+ def get
36
+ @discovery.map{|d|
37
+ a=getApp(d)
38
+ if a
39
+ a.get
40
+ else
41
+ []
42
+ end
43
+ }.flatten.uniq
44
+ end
45
+ end
@@ -0,0 +1,20 @@
1
+ class NetworkDiscoveryLocalstoreApp<Service
2
+ provides :networkDiscoveryLocalstore
3
+
4
+ def initialize(cluster,options)
5
+ super(cluster,options,:networkDiscoveryLocalstore)
6
+
7
+ @nodes=[]
8
+ end
9
+
10
+ def add(node)
11
+ @nodes<<node
12
+ end
13
+ def remove(node)
14
+ @nodes.delete(node)
15
+ end
16
+
17
+ def get
18
+ @nodes.uniq
19
+ end
20
+ end
@@ -0,0 +1,51 @@
1
+ class NetworkDiscoveryUdpApp<Service
2
+ requires :udpBroadcast
3
+ provides :networkDiscoveryUdp
4
+
5
+ def initialize(cluster,options)
6
+ super(cluster,options,:networkDiscoveryUdp)
7
+ @nodes=[]
8
+ @myNodes=[]
9
+ @mutex=Mutex.new
10
+ @quit=false
11
+ end
12
+
13
+ def add(node)
14
+ @myNodes << node
15
+ end
16
+
17
+ def remove(node)
18
+ @myNodes.delete(node)
19
+ end
20
+
21
+ def get
22
+ (@nodes+@myNodes).uniq
23
+ end
24
+
25
+ def run
26
+ begin
27
+ @broadcast=getApp(:udpBroadcast)
28
+ sleep 2
29
+ end while @broadcast.nil?
30
+ @connection=@broadcast.connect("networkDiscovery"){|result|
31
+ @mutex.synchronize {
32
+ @nodes << result
33
+ @nodes.uniq!
34
+ }
35
+ }
36
+
37
+ loop do
38
+ @myNodes.uniq.each{|node|
39
+ @connection.send(node)
40
+ }
41
+ sleep 2
42
+ break if @quit
43
+ end
44
+
45
+ end
46
+
47
+ def stop
48
+ super
49
+ @quit=true
50
+ end
51
+ end
@@ -0,0 +1,61 @@
1
+ #if false
2
+ require 'service.rb'
3
+ require 'crypt.rb'
4
+ require 'drb'
5
+
6
+ DRb.start_service
7
+
8
+ class NetworkLookupApp<Service
9
+ attr_reader :mid
10
+ def initialize(cluster,options)
11
+ super(cluster,options,:networkLookup)
12
+ provides(:networkLookup)
13
+ @mid=rand
14
+ @registered=[]
15
+ end
16
+
17
+ def register(info)
18
+ begin
19
+ getMaster.register(info)
20
+ @registered<<info
21
+ rescue Errno::ECONNREFUSED
22
+ log("Cannot register, because cannot connect to master")
23
+ end
24
+ end
25
+
26
+ def unregister(info)
27
+ @registered.delete(info)
28
+ getMaster.unregister(info) if @registered.member?(info)
29
+ end
30
+
31
+ def stop
32
+ #Thread.new{
33
+ # @registered.each{|info|getMaster.unregister(info)}
34
+ #}
35
+ end
36
+
37
+ def getServers
38
+ getAllServers-@registered
39
+ end
40
+
41
+ def getAllServers
42
+ begin
43
+ getMaster.clients
44
+ rescue
45
+ []
46
+ end
47
+ end
48
+
49
+ private
50
+ def getMaster
51
+ puts "req"
52
+
53
+ # TODO: use list of master-servers
54
+
55
+ server_uri="druby://127.0.0.1:#{MasterApp::MASTER_SERVICE_PORT}"
56
+ drb=DRbObject.new_with_uri(server_uri)
57
+ drb
58
+ end
59
+ end
60
+
61
+ #end
@@ -0,0 +1,104 @@
1
+ require 'thread'
2
+
3
+ NodeInformation=Struct.new(:address,:port,:protocol,:nodeHash)
4
+
5
+ class NodeInformation
6
+ def to_s
7
+ "[#{protocol}://#{address}:#{port} #{nodeHash.inspect}]"
8
+ end
9
+
10
+ def <=>(i)
11
+ r=(self.nodeHash<=>i.nodeHash)
12
+ return r if r!=0
13
+ r=(self.address<=>i.address)
14
+ return r if r!=0
15
+ r=(self.port<=>i.port)
16
+ return r if r!=0
17
+ r=(self.protocol<=>i.protocol)
18
+ return r if r!=0
19
+ 0
20
+ end
21
+ end
22
+
23
+ class AbstractSendConnection
24
+ def initialize(baseSocket)
25
+ @baseSocket=baseSocket
26
+ end
27
+ def method_missing(*m)
28
+
29
+ end
30
+
31
+
32
+ private
33
+ def send(message)
34
+ @baseSocket.send(message)
35
+ end
36
+ end
37
+
38
+ #class AbstractReceiveConnection
39
+ # def run
40
+ # @thread=Thread.new{
41
+ #
42
+ # }
43
+ # end
44
+ #end
45
+
46
+ class AbstractNetNode
47
+ include DRbUndumped
48
+ attr_reader :id
49
+ attr_accessor :hook
50
+
51
+ def initialize(port,app,protocol,hash)
52
+ @id=NodeInformation.new(address,port,protocol,hash)
53
+ @app=app
54
+ @hook=nil
55
+ end
56
+
57
+ def log(*s)
58
+ if @app
59
+ @app.log(*s)
60
+ else
61
+ puts s.map{|x|x.to_s}.join(" ")
62
+ end
63
+ end
64
+
65
+ def port
66
+ @id.port
67
+ end
68
+ def protocol
69
+ @id.protocol
70
+ end
71
+ def address
72
+ # TODO
73
+ "127.0.0.1"
74
+ end
75
+
76
+ def setHook(&b)
77
+ @hook=b
78
+ end
79
+
80
+ def method_missing(*s)
81
+ return @hook.call(*s) if @hook
82
+ super
83
+ end
84
+
85
+ def node
86
+ @id
87
+ end
88
+
89
+ def sendTo(nodeId,*s)
90
+ end
91
+ def sendToAll(*s)
92
+ end
93
+
94
+ def connect(nodeId)
95
+ end
96
+
97
+ def close(nodeId)
98
+ end
99
+
100
+ def nodes
101
+ []
102
+ end
103
+ end
104
+
@@ -0,0 +1,90 @@
1
+ require File.expand_path('../abstract_node.rb',__FILE__)
2
+
3
+ class DrbNetNode<AbstractNetNode
4
+ include DRbUndumped
5
+
6
+ def initialize(port,app)
7
+ begin
8
+ super(port,app,:drb)
9
+ taint
10
+
11
+ @uri="druby://#{address}:#{port}"
12
+ log @uri
13
+ @service=DRb.start_service(@uri,self)
14
+ log "listening on #{@uri}"
15
+ rescue Exception=>e
16
+ log e.to_s
17
+ log e.backtrace.join("\n")
18
+ end
19
+ @companions={}
20
+ end
21
+
22
+ def stop
23
+ @service.stop_service
24
+ end
25
+
26
+ def connect(nodeId)
27
+ log "#{id} connecting #{nodeId}..."
28
+ return @companions[nodeId] if @companions[nodeId]
29
+ begin
30
+ server_uri="druby://#{nodeId.address}:#{nodeId.port}"
31
+ c=DRbObject.new_with_uri(server_uri)
32
+ @companions[nodeId]=c
33
+ log "#{id} ready connected #{nodeId}!"
34
+ log "NODES:",self.nodes
35
+ c.connected(self)
36
+ return c
37
+ rescue Exception=>e
38
+ log e.to_s
39
+ log e.backtrace.join("\n")
40
+ end
41
+ nil
42
+ end
43
+
44
+ def close(nodeId)
45
+ rnode=@companions[nodeId]
46
+ return if rnode.nil?
47
+ eventDisconnected(nodeId)
48
+ @companions.delete(nodeId)
49
+ rnode.close(node)
50
+ end
51
+
52
+ def eventDisconnected(pid)
53
+ log "#{id} disconnected from #{pid}"
54
+ end
55
+
56
+ def sendTo(nodeId,*msg)
57
+ node=@companions[nodeId]
58
+ if node
59
+ node.send(*msg)
60
+ end
61
+ end
62
+
63
+ def sendAll(*msg)
64
+ @companions.values.map{|node|
65
+ log "send to node #{node.node}"
66
+ log msg
67
+ result=node.send(*msg)
68
+ log "sent to node #{node.node}."
69
+ result
70
+ }
71
+ end
72
+
73
+ def info
74
+ {node.to_s=>@companions.keys}
75
+ end
76
+
77
+ def connected(from)
78
+ i=from.node
79
+ log "#{id} connected from #{i}"
80
+ @companions[i]=from
81
+ log "NODES:",self.nodes
82
+ eventConnected(i)
83
+ end
84
+
85
+ def nodes
86
+ @companions.keys
87
+ end
88
+
89
+
90
+ end