コード例 #1
0
    static void Main(string[] args)
    {
        ClientObject co = new ClientObject();
        string myIpAddress = co.GetClientIpAdress();

        HttpChannel chnl = new HttpChannel(null, new XmlRpcClientFormatterSinkProvider(), null);
        ChannelServices.RegisterChannel(chnl, false);

        _localProxy = XmlRpcHelper.Connect("localhost");

        _currentMasterUrl = _localProxy.getIpMaster(myIpAddress);
        _masterProxy = XmlRpcHelper.Connect(_currentMasterUrl);

        try
        {
            // ====== Begin client input ======
            string input;
            ClientUI clientUi = new ClientUI();

            do
            {
                clientUi.DisplayMainMenu(myIpAddress);
                input = Console.ReadLine();
                switch (input)
                {
                    case "1":
                        // Menu 1: Show master hashmap.
                        // localProxy.checkMasterStatus();

                        XmlRpcStruct masterMap = _masterProxy.getMachines(myIpAddress);

                        Dictionary<int, string> networkHashMap = Helper.ConvertObjToDict(masterMap);

                        Console.WriteLine("The Masternode hashmap");
                        foreach (KeyValuePair<int, string> networkNode in networkHashMap)
                        {
                            Console.WriteLine("Priority {0} : {1}", networkNode.Key, networkNode.Value);
                        }

                        Console.ReadKey();
                        break;

                    case "2":
                        // Menu 2: Show local hashmap.
                        // localProxy.checkMasterStatus();

                        XmlRpcStruct localMap = _localProxy.getMachines(myIpAddress);

                        Dictionary<int, string> localhostHashMap = Helper.ConvertObjToDict(localMap);

                        Console.WriteLine("The localnode hashmap");
                        foreach (KeyValuePair<int, string> localNode in localhostHashMap)
                        {
                            Console.WriteLine("Priority {0} : {1}", localNode.Key, localNode.Value);
                        }
                        Console.ReadKey();
                        break;

                    case "3":
                        // Menu 3: Get Master Ip.
                        //localProxy.checkMasterStatus();

                        string result = _localProxy.getIpMaster(myIpAddress);
                        Console.WriteLine("the masterNode is {0}", result);
                        Console.ReadKey();
                        break;

                    case "4":
                        //Menu 4: do election.
                        // masterProxy.checkMasterStatus();

                        Console.WriteLine("Election held!!!");

                        string newMaster = _localProxy.leaderElection(myIpAddress);
                        //string newMasterIp = localProxy.getIpMaster(ipAddress);

                        Console.WriteLine("The new masternode is {0}", newMaster);
                        Console.ReadKey();
                        break;

                    case "5":
                        // Menu 5: Ricart Agrawala Exlusion.
                        StartMutualExclusion(false);
                        Console.ReadKey();
                        break;

                    case "6":
                        // Menu 6: Test Mutual Exclusion.
                        StartMutualExclusion(true);
                        Console.ReadKey();
                        break;

                    case "0":
                        // exit
                        break;

                    default:
                        Console.WriteLine("Invalid command. Please re-enter the command.");
                        Console.ReadKey();
                        break;
                }
            }
            while (input != "0");

            Console.WriteLine("Ending the client session.");
            Console.ReadKey();
        }
        catch (XmlRpcFaultException fex)
        {
            Console.WriteLine("Fault response {0} {1} {2}",
                fex.FaultCode, fex.FaultString, fex.Message);
            Console.ReadLine();
        }
        // ===========End of Client Input================
    }
コード例 #2
0
    public static Object SendToOneMachine(String ipAddress, String command, Object[] parameter)
    {
        try
        {
            //don't send to self
            String myIpAddress = NetworkHelper.GetMyIpAddress();

            if (ipAddress != myIpAddress)
            {
                newProxy = XmlRpcProxyGen.Create<ICSharpRpcClient>();
                newProxy.Url = ServerUrlStart + ipAddress + ServerUrlEnd;
                object response;
                switch (command)
                {
                    case GlobalMethodName.getMachines:
                        response = newProxy.getMachines(parameter[0].ToString());
                        break;

                    case GlobalMethodName.serverShutDownFromClient:
                        newProxy.serverShutDownFromClient();
                        response = "success";
                        break;

                    case GlobalMethodName.leaderElection:
                        response = newProxy.leaderElection(parameter[0].ToString());
                        break;

                    case GlobalMethodName.getIpMaster:
                        response = newProxy.getIpMaster(parameter[0].ToString());
                        break;

                    case GlobalMethodName.removeMachineIp:
                        response = newProxy.removeMachineIp(parameter[0].ToString());
                        break;

                    case GlobalMethodName.newMachineJoin:
                        response = newProxy.newMachineJoin(parameter[0].ToString());
                        break;

                    case GlobalMethodName.newMachineJoinNotification:
                        response = newProxy.newMachineJoinNotification(parameter[0].ToString(), parameter[1].ToString());
                        break;

                    case GlobalMethodName.addNewMachine:
                        response = newProxy.addNewMachine(parameter[0].ToString(), parameter[1].ToString());
                        break;

                    case GlobalMethodName.getKeyMaster:
                        response = newProxy.getKeyMaster(parameter[0].ToString());
                        break;

                    case GlobalMethodName.checkLeaderValidity:
                        response = newProxy.checkLeaderValidity(parameter[0].ToString());
                        break;

                    case GlobalMethodName.setNewLeader:
                        response = newProxy.setNewLeader((int)parameter[0]);
                        break;

                    #region Request Handler
                    case GlobalMethodName.requestHandlerStartMessage:
                        response = newProxy.requestStartMessage(Convert.ToBoolean(parameter[0]), Convert.ToBoolean(parameter[1]));
                        break;

                    case GlobalMethodName.requestHandlerReceivePermission:
                        response = newProxy.requestReceivePermission((int)parameter[0], (int)parameter[1], parameter[2].ToString());
                        break;

                    case GlobalMethodName.requestHandlerRequestPermission:
                        response = newProxy.requestRequestPermission((int)parameter[0], (int)parameter[1], parameter[2].ToString(), parameter[3].ToString());
                        break;
                    #endregion

                    #region RequestCentral Handler
                    case GlobalMethodName.requestCentralStartMessage:
                        response = newProxy.requestCentralStartMessage((bool)parameter[0], (bool)parameter[1]);
                        break;

                    case GlobalMethodName.requestCentralGetPermission:
                        newProxy.requestCentralGetPermission(parameter[0].ToString(), parameter[1].ToString());
                        response = "success";
                        break;
                    #endregion

                    #region Resource Handler                                            
                    case GlobalMethodName.resourceGetString:
                        response = newProxy.resourceGetString(parameter[0].ToString());
                        break;

                    case GlobalMethodName.resourceSetString:
                        response = newProxy.resourceSetString(parameter[0].ToString(), parameter[1].ToString());
                        break;
                    #endregion

                    default:
                        response = "No such command";
                        break;
                }

                Console.WriteLine(classNameLog + "Message: " + response);
                return response;
            }
            else
            {
                return "Sending to self is not permitable";
            }
        }
        catch (XmlRpcException e)
        {
            return "Connection refused";
        }
        catch (Exception e)
        {
            Console.WriteLine("{0}", e.Message);
            return e.Message;
        }
    }