Exemplo n.º 1
0
    // Topic subscription, called from upper layer (i.e. some MonoBahavior
    public async Task <ServiceReply> Subscribe(string topic, Action <TopicDataRecord> function)
    {
        // Repeated fields cannot be instantiated in SerivceRequest creation
        RepeatedField <string> subscribeTopics = new RepeatedField <string>();

        subscribeTopics.Add(topic);
        Debug.Log("Subscribing to topic: " + topic + " (backend), subscribeRepeatedField: " + subscribeTopics.Count);
        ServiceRequest topicSubscription = new ServiceRequest
        {
            Topic             = DEFAULT_TOPICS.SERVICES.TOPIC_SUBSCRIPTION,
            TopicSubscription = new TopicSubscription
            {
                ClientId        = clientSpecification.Id,
                SubscribeTopics = { subscribeTopics }
            }
        };

        var          task     = CallService(topicSubscription);
        ServiceReply subReply = await task;

        if (subReply.Error != null)
        {
            Debug.LogError("subReply Error! Error msg: " + subReply.Error.ToString());
            return(null);
        }

        // adding callback function to dictionary
        netmqTopicDataClient.AddTopicDataCallback(topic, function);

        return(subReply);
    }
    public async Task <bool> SubscribeTopic(string topic, Action <TopicDataRecord> callback)
    {
        if (callback == null)
        {
            Debug.LogError("SubscribeTopic() - callback is NULL!");
            return(false);
        }

        if (this.netmqTopicDataClient.IsSubscribed(topic))
        {
            netmqTopicDataClient.AddTopicDataCallback(topic, callback);
            return(true);
        }

        // Repeated fields cannot be instantiated in SerivceRequest creation
        RepeatedField <string> subscribeTopics = new RepeatedField <string>();

        subscribeTopics.Add(topic);


        //Debug.Log("Subscribing to topic: " + topic + " (backend), subscribeRepeatedField: " + subscribeTopics.Count);
        ServiceRequest topicSubscription = new ServiceRequest
        {
            Topic             = UbiiConstants.Instance.DEFAULT_TOPICS.SERVICES.TOPIC_SUBSCRIPTION,
            TopicSubscription = new TopicSubscription
            {
                ClientId        = clientSpecification.Id,
                SubscribeTopics = { subscribeTopics }
            }
        };

        var          task     = CallService(topicSubscription);
        ServiceReply subReply = await task;

        if (subReply.Error != null)
        {
            Debug.LogError("subReply Error! Error msg: " + subReply.Error.ToString());
            return(false);
        }

        // adding callback function to dictionary
        netmqTopicDataClient.AddTopicDataCallback(topic, callback);
        return(true);
    }