示例#1
0
        protected override bool EntryRequestReply(Client client, EntryRequestReply reply)
        {
            var entry = _server.PersistedStore.GetEntry(index);

            if (entry.HasValue && !reply.Entry.HasValue)
            {
                //we have more logs
                Console.WriteLine("{0}: Verify failed at index {1} - we have more logs", _server.Name, index);
                Console.WriteLine("{0}: Expected {1}", _server.Name, _server.PersistedStore.GetEntry(index));
                Console.WriteLine("{0}: Got      {1}", _server.Name, reply.Entry);
            }
            else if (!entry.HasValue && reply.Entry.HasValue)
            {
                //they have more logs
                Console.WriteLine("{0}: Verify failed at index {1} - they have more logs", _server.Name, index);
                Console.WriteLine("{0}: Expected {1}", _server.Name, _server.PersistedStore.GetEntry(index));
                Console.WriteLine("{0}: Got      {1}", _server.Name, reply.Entry);
            }
            else if (!entry.HasValue && !entry.HasValue)
            {
                //logs matched
                Console.WriteLine("{0}: logs matched, finished at {1}", _server.Name, index - 2);
                IsVerified = true;
            }
            else
            {
                //both have a log, lets compare
                var left = entry.Value;
                var right = reply.Entry.Value;

                if (LogEntry.AreEqual(left, right))
                {
                    //Console.WriteLine("{0}: Verified index {1}", _server.Name, index);
                    client.SendEntryRequest(++index);
                    return true;
                }
                else
                {
                    Console.WriteLine("{0}: Verify failed at index {1}", _server.Name, index);
                    Console.WriteLine("{0}: Expected {1}", _server.Name, _server.PersistedStore.GetEntry(index));
                    Console.WriteLine("{0}: Got      {1}", _server.Name, reply.Entry);
                }
            }
            _server.ChangeState(new StoppedState(_server));
            return base.EntryRequestReply(client, reply);
        }
示例#2
0
 protected virtual bool EntryRequestReply(Client client, EntryRequestReply reply) { return true; }
示例#3
0
 public bool EntryRequestReply(EntryRequestReply reply)
 {
     var client = _server.GetClient(reply.From);
     return EntryRequestReply(client, reply);
 }
示例#4
0
        public void SendEntryRequestReply(uint index)
        {
            var _persistedState = _server.PersistedStore;
            var entry = _persistedState.GetEntry(index);

            var message = new EntryRequestReply()
            {
                From = _server.ID,
                Entry = entry
            };

            _lastMessage = message;
            _server.Transport.SendMessage(this, message);
        }