Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
lua layer that reimplements SPLAY methodsfor rpc, job and events modules, with a...
[simgrid.git] / examples / lua / SimSplay / sim_splay.lua
diff --git a/examples/lua/SimSplay/sim_splay.lua b/examples/lua/SimSplay/sim_splay.lua
new file mode 100644 (file)
index 0000000..401c17d
--- /dev/null
@@ -0,0 +1,91 @@
+require "simgrid"
+-- Splay global modules
+rpc = {}
+log = {}
+job = {}
+event = {}
+os = {}
+start = {}
+-- Splay global variables
+job.me ={}
+job.nodes = {}
+job.list_type = "random"
+
+--Init nodes tables
+function init_nodes()
+       for i= 1,simgrid.Host.number() do               
+               job.nodes[i] = simgrid.Host.getPropValue(simgrid.Host.at(i),"ip")..":"..simgrid.Host.getPropValue(simgrid.Host.at(i),"port");
+       end     
+end
+
+function init_jobs()
+   init_nodes()
+end
+
+-- Job methods
+function job.me.ip()
+     return simgrid.Host.getPropValue(simgrid.Host.self(),"ip");
+end
+
+function job.me.port()
+ return simgrid.Host.getPropValue(simgrid.Host.self(),"port");
+end
+
+function job.position()
+  return simgrid.Host.getPropValue(simgrid.Host.self(),"position");
+end
+
+-- log Methods
+function log:print(msg)
+  simgrid.info(msg);
+end
+
+-- rpc Methods
+function rpc.call(node,call)
+ --init_nodes();
+ func = "empty"
+ arg = "empty"
+ mailbox = node
+
+ if type(call) == "table" then
+       func = call[1]
+       arg = call[2]
+ end
+ task_call = simgrid.Task.new("splay_task",10000,10000);
+ task_call['func_call_name'] = func;
+ task_call['func_call_arg'] = arg;
+ --log:print("Sending Task to mailbox "..mailbox.." to call "..func.." with arg "..arg);
+ simgrid.Task.iSend(task_call,mailbox);
+ call_function(func,arg)
+end 
+
+-- event Methods
+function event.sleep(time)
+  my_mailbox = job.me.ip()..":"..job.me.port()
+  task = simgrid.Task.splay_recv(my_mailbox, time)
+end
+
+-- main func for each process, this is equivalent to the Deploiment file 
+function event.thread(main_func)
+  dofile("platform_script.lua");
+ init_jobs()
+end
+
+-- OS methods
+function os.exit()
+ simgrid.Host.destroy(simgrid.Host.self());
+end
+
+-- Start Methods
+function start.loop()
+ simgrid.run()
+ simgrid.clean()
+end
+-- useful functions
+function call_function(fct,arg)
+    _G[fct](arg)
+end
+
+function SPLAYschool()
+ simgrid.info("Calling me...")
+end