--- /dev/null
+package psgsim;
+
+import org.simgrid.msg.Host;
+import org.simgrid.msg.MsgException;
+
+import peersim.core.Node;
+import peersim.edsim.EDProtocol;
+
+/**
+ * This class extends {@link org.simgrid.msg.Process} which creates a process
+ * for each host (corresponding to node in peersim) in the system.
+ * <p>
+ * The main method of this class is to handle events received, by calling the
+ * processEvent method on the corresponding node and pid.
+ * <p>
+ * See {@link peersim.edsim.EDProtocol#processEvent}
+ *
+ * @author Khaled Baati 28/10/2014
+ * @version version 1.1
+ */
+public class PSGProcessEvent extends org.simgrid.msg.Process {
+ /** The delivered event **/
+ private PSGTask task;
+ /** The current protocol **/
+ private EDProtocol prot;
+ /** The identifier of the current protocol **/
+ private int pid;
+
+ /**
+ * Constructs a new process from the name of a host.
+ *
+ * @param host
+ * the local host to create according to the active node in
+ * peersim
+ * @param name
+ * the host's name
+ * @param args
+ * The arguments of main method of the process.
+ */
+ public PSGProcessEvent(Host host, String name, String[] args) {
+ super(host, name, args);
+ }
+
+ @Override
+ public void main(String[] args) throws MsgException {
+ Node node = NodeHost.getNode(getHost());
+ Host.setAsyncMailbox(getHost().getName());
+ while (PSGPlatform.getTime() < PSGPlatform.getDuration()) {
+ task = null;
+ task = (PSGTask) PSGTask.receive(Host.currentHost().getName(),
+ PSGPlatform.psToSgTime(PSGPlatform.getDuration() - PSGPlatform.getTime()-1));
+ if (task != null && PSGPlatform.getTime() < PSGPlatform.getDuration()) {
+ pid = task.getPid();
+ prot = (EDProtocol) node.getProtocol(pid);
+ prot.processEvent(node, pid, task.getEvent());
+ PSGTransport.flush();
+ } else
+ break;
+ }
+ }
+
+}