async def create_subscription(self, params, callback): self.logger.info("create_subscription") request = ua.CreateSubscriptionRequest() request.Parameters = params data = await self.protocol.send_request(request) response = struct_from_binary( ua.CreateSubscriptionResponse, data ) self.logger.info("create subscription callback") self.logger.debug(response) response.ResponseHeader.ServiceResult.check() self._publish_callbacks[response.Parameters.SubscriptionId] = callback return response.Parameters
async def create_subscription(self, params, callback): self.logger.debug("create_subscription") request = ua.CreateSubscriptionRequest() request.Parameters = params data = await self.protocol.send_request(request) response = struct_from_binary(ua.CreateSubscriptionResponse, data) response.ResponseHeader.ServiceResult.check() self._subscription_callbacks[response.Parameters.SubscriptionId] = callback self.logger.info("create_subscription success SubscriptionId %s", response.Parameters.SubscriptionId) if not self._publish_task or self._publish_task.done(): # Start the publish loop if it is not yet running # The current strategy is to have only one open publish request per UaClient. This might not be enough # in high latency networks or in case many subscriptions are created. A Set of Tasks of `_publish_loop` # could be used if necessary. self._publish_task = self.loop.create_task(self._publish_loop()) return response.Parameters