def __init__(self,
              send_data,
              notif_listener,
              motes=None,
              auto_commit=True,
              options=DEFAULT_OPTIONS):
     self.send_data = send_data
     self.notif_listener = notif_listener
     self.register()
     self.files = {}
     if motes:
         self.all_motes = motes
     else:
         self.all_motes = []
     self.auto_commit = auto_commit
     self.options = options
     self.transmit_list = BlockMetadata()
     # internal lists of motes
     self.handshake_motes = []
     self.incomplete_motes = []
     self.status_motes = []
     self.commit_motes = []
     self.complete_motes = []
     self.failure_motes = []
     # handle retries and failures
     self.orc = ReliableCommander.ReliableCommander(
         self.send_data,
         self.handle_failure,
         retry_delay=options.reliable_retry_delay,
         command_timeout=options.reliable_command_timeout,
         max_retries=options.reliable_max_retries)
     self.worker = NotifWorker()
     self.state = 'Init'
     # conditions
     self.data_event = Event()
     self.commit_event = Event()