internal Guid AddPartitionLostListener(IPartitionLostListener partitionLostListener)
        {
            CheckNotNull(partitionLostListener, NullListenerIsNotAllowed);
            var request = ClientAddPartitionLostListenerCodec.EncodeRequest(_isSmart);

            void HandlePartitionLostEvent(int partitionId, int lostBackupCount, Guid source)
            {
                var member = _client.ClusterService.GetMember(source);

                partitionLostListener.PartitionLost(new PartitionLostEvent(partitionId, lostBackupCount, member.Address));
            }

            void EventHandler(ClientMessage eventMessage) =>
            ClientAddPartitionLostListenerCodec.EventHandler.HandleEvent(eventMessage, HandlePartitionLostEvent);

            Guid ResponseDecoder(ClientMessage response) => ClientAddPartitionLostListenerCodec.DecodeResponse(response).Response;

            ClientMessage EncodeDeregisterRequest(Guid registrationId) =>
            ClientRemovePartitionLostListenerCodec.EncodeRequest(registrationId);

            return(_client.ListenerService.RegisterListener(request, ResponseDecoder, EncodeDeregisterRequest, EventHandler));
        }
 Guid IPartitionService.AddPartitionLostListener(IPartitionLostListener partitionLostListener)
 {
     return(AddPartitionLostListener(partitionLostListener));
 }