예제 #1
0
        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.");
                }
            }
        }