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); }
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; } } }