示例#1
0
        public ClientHandShakeResponse DoHandShake()
        {
            // Do the handshake
            Uri[] servers = System.IO.File.ReadAllLines(SERVERS_LIST).ToList()
                            .ConvertAll <Uri>(server => new Uri(server))
                            .ToArray();

            IResponses responses = this.MessageServiceClient.RequestMulticast(
                new ClientHandShakeRequest(this.Id),
                servers,
                1,
                -1,
                true);
            ClientHandShakeResponse response = (ClientHandShakeResponse)responses.ToArray()[0];

            this.ViewNumber  = response.ViewNumber;
            this.ViewServers = response.ViewConfiguration;
            this.Leader      = response.Leader;

            return(response);
        }
示例#2
0
        static void Main(string[] args)
        {
            try {
                //TODO check arguments
                Client client = new Client(args[0], new Uri(args[1]), args[2]);

                ClientHandShakeResponse response = client.DoHandShake();

                switch (response.ProtocolUsed)
                {
                case Protocol.StateMachineReplication:
                    Log.Info("Handshake: Using State Machine Replication protocol.");
                    client.Script.Accept(new SMRExecuter(client.MessageServiceClient, client));
                    break;

                case Protocol.XuLiskov:
                    Log.Info("Handshake: Using Xu-Liskov protocol");
                    client.Script.Accept(v: new XLExecuter(client.MessageServiceClient, client));
                    break;

                default:
                    Log.Fatal("Unknown protocol.");
                    Environment.Exit(1);
                    break;
                }

                Console.ReadLine();
            } catch (Exception ex) {
                if (ex is IncorrectCommandException || ex is BlockEndMissingException)
                {
                    Console.WriteLine(ex.Message);
                }
                else
                {
                    throw;
                }
            }
        }