def stage(self): return pipeline_stages_base.SerializeConnectOpsStage()
def __init__(self, auth_provider): """ Constructor for instantiating a pipeline adapter object :param auth_provider: The authentication provider """ self.feature_enabled = { constant.C2D_MSG: False, constant.INPUT_MSG: False, constant.METHODS: False, constant.TWIN: False, constant.TWIN_PATCHES: False, } # Event Handlers - Will be set by Client after instantiation of this object self.on_connected = None self.on_disconnected = None self.on_c2d_message_received = None self.on_input_message_received = None self.on_method_request_received = None self.on_twin_patch_received = None self._pipeline = ( pipeline_stages_base.PipelineRootStage() .append_stage(pipeline_stages_iothub.UseAuthProviderStage()) .append_stage(pipeline_stages_iothub.HandleTwinOperationsStage()) .append_stage(pipeline_stages_base.CoordinateRequestAndResponseStage()) .append_stage(pipeline_stages_iothub_mqtt.IoTHubMQTTConverterStage()) .append_stage(pipeline_stages_base.EnsureConnectionStage()) .append_stage(pipeline_stages_base.SerializeConnectOpsStage()) .append_stage(pipeline_stages_mqtt.MQTTTransportStage()) ) def _on_pipeline_event(event): if isinstance(event, pipeline_events_iothub.C2DMessageEvent): if self.on_c2d_message_received: self.on_c2d_message_received(event.message) else: logger.warning("C2D message event received with no handler. dropping.") elif isinstance(event, pipeline_events_iothub.InputMessageEvent): if self.on_input_message_received: self.on_input_message_received(event.input_name, event.message) else: logger.warning("input message event received with no handler. dropping.") elif isinstance(event, pipeline_events_iothub.MethodRequestEvent): if self.on_method_request_received: self.on_method_request_received(event.method_request) else: logger.warning("Method request event received with no handler. Dropping.") elif isinstance(event, pipeline_events_iothub.TwinDesiredPropertiesPatchEvent): if self.on_twin_patch_received: self.on_twin_patch_received(event.patch) else: logger.warning("Twin patch event received with no handler. Dropping.") else: logger.warning("Dropping unknown pipeline event {}".format(event.name)) def _on_connected(): if self.on_connected: self.on_connected() def _on_disconnected(): if self.on_disconnected: self.on_disconnected() self._pipeline.on_pipeline_event_handler = _on_pipeline_event self._pipeline.on_connected_handler = _on_connected self._pipeline.on_disconnected_handler = _on_disconnected def remove_this_code(call): if call.error: raise call.error if isinstance(auth_provider, X509AuthenticationProvider): op = pipeline_ops_iothub.SetX509AuthProviderOperation( auth_provider=auth_provider, callback=remove_this_code ) else: # Currently everything else goes via this block. op = pipeline_ops_iothub.SetAuthProviderOperation( auth_provider=auth_provider, callback=remove_this_code ) self._pipeline.run_op(op)
def __init__(self, security_client): """ Constructor for instantiating a pipeline :param security_client: The security client which stores credentials """ # Event Handlers - Will be set by Client after instantiation of pipeline self.on_connected = None self.on_disconnected = None self.on_message_received = None self._pipeline = ( pipeline_stages_base.PipelineRootStage() .append_stage(pipeline_stages_provisioning.UseSecurityClientStage()) .append_stage(pipeline_stages_provisioning_mqtt.ProvisioningMQTTConverterStage()) .append_stage(pipeline_stages_base.EnsureConnectionStage()) .append_stage(pipeline_stages_base.SerializeConnectOpsStage()) .append_stage(pipeline_stages_mqtt.MQTTTransportStage()) ) def _on_pipeline_event(event): if isinstance(event, pipeline_events_provisioning.RegistrationResponseEvent): if self.on_message_received: self.on_message_received( event.request_id, event.status_code, event.key_values, event.response_payload, ) else: logger.warning("Provisioning event received with no handler. dropping.") else: logger.warning("Dropping unknown pipeline event {}".format(event.name)) def _on_connected(): if self.on_connected: self.on_connected("connected") def _on_disconnected(): if self.on_disconnected: self.on_disconnected("disconnected") self._pipeline.on_pipeline_event_handler = _on_pipeline_event self._pipeline.on_connected_handler = _on_connected self._pipeline.on_disconnected_handler = _on_disconnected callback = EventedCallback() if isinstance(security_client, X509SecurityClient): op = pipeline_ops_provisioning.SetX509SecurityClientOperation( security_client=security_client, callback=callback ) elif isinstance(security_client, SymmetricKeySecurityClient): op = pipeline_ops_provisioning.SetSymmetricKeySecurityClientOperation( security_client=security_client, callback=callback ) else: logger.error("Provisioning not equipped to handle other security client.") self._pipeline.run_op(op) callback.wait_for_completion() if op.error: logger.error("{} failed: {}".format(op.name, op.error)) raise op.error