protected override ClusterSubscription CreateSubscription() { return(new ClusterSubscription( ClientAddPartitionLostListenerCodec.EncodeRequest(_isSmart), (message, state) => ClientAddPartitionLostListenerCodec.DecodeResponse(message).Response, (id, state) => ClientRemovePartitionLostListenerCodec.EncodeRequest(id), (message, state) => ClientRemovePartitionLostListenerCodec.DecodeResponse(message).Response, (message, state) => ClientAddPartitionLostListenerCodec.HandleEventAsync(message, HandleInternal, LoggerFactory))); }
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)); }