private void ProcessMessages(Vsync.Group vsyncGroup, List <Tuple <MessageType, List <string> > > msgs) { foreach (Tuple <MessageType, List <string> > msg in msgs) { MessageType type = msg.Item1; List <string> parameters = msg.Item2; string vsyncAddress, procName, path, exec, args, filename, content, configFilename; #if DEBUG WriteMessage(type, parameters); #endif switch (type) { case MessageType.NEW_NODE: if (parameters.Count != 1) { throw new Exception("CloudMakeLocal: NEW_NODE: Does not accept " + parameters.Count.ToString() + " parameters."); } vsyncAddress = parameters [0]; vsyncGroup.P2PSend(new Address(vsyncAddress), CloudManager.MEMBER_INFO, _vsyncAddress, _name); break; case MessageType.FAIL_NODE: break; case MessageType.MEMBER_JOIN: MemberJoin(vsyncGroup); break; case MessageType.LEADER_JOIN: if (parameters.Count != 1) { throw new Exception("CloudMakeLocal: LEADER_JOIN: Does not accept " + parameters.Count.ToString() + " parameters."); } vsyncAddress = parameters [0]; CloudManager.AddLeader(_leaders, _reserveLeaders, _nreplicas, vsyncAddress); break; case MessageType.NEW_CONFIG: if (parameters.Count != 1) { throw new Exception("CloudMakeLocal: NEW CONFIG: Should only have one configFilename."); } configFilename = parameters [0]; NewConfig(configFilename); break; case MessageType.RUN_PROCESS: procName = parameters [0]; path = parameters [1]; exec = parameters [2]; args = parameters [3]; RunProcess(procName, path, exec, args); break; case MessageType.KILL_PROCESS: procName = parameters [0]; KillProcess(procName); break; case MessageType.UPDATE_CONFIG: filename = parameters [0]; content = parameters [1]; UpdateConfig(filename, content); break; case MessageType.ASK_STATE: path = parameters [0]; filename = parameters [1]; AskState(vsyncGroup, path, filename); break; default: throw new Exception("CloudMakeLocal: I should not have received " + msg.ToString() + " message."); } } }