Just a second...

Start subscribing with Swift on iOS®

Create a client that connects to the Diffusion™ server. This example uses Swift to create a client and subscribe to a string topic.

To use this example, you need Apple's Xcode installed on your development system and a Diffusion server.

You also require that anonymous client connections to the server are assigned a role with the select_topic and read_topic permissions. For example, the "CLIENT" role. For more information about roles and permissions, see Role-based authorization.

This simple subscribing example connects to the Diffusion server. It then adds a local fallback string value stream on which to receive notifications regarding updates, followed by sending a request to Diffusion to subscribe to a topic.

You will need a caller to instantiate a new SimpleSubscriber instance and then call publish().

Full example

SimpleSubscriber.swift
import Foundation
import Diffusion

let url = NSURL(string: "wss://host_name")

class SimpleSubscriber: PTDiffusionStringValueStreamDelegate {
    var session: PTDiffusionSession?

    func subscribe() {
        // Connect to Diffusion Cloud
        PTDiffusionSession.open(with: url! as URL) { (session, error) -> Void in
            self.session = session; // maintain strong reference to session

            // Add a new stream
            let stream = PTDiffusionPrimitive.stringValueStream(with: self)
            session!.topics.addFallbackStream(stream)

            // Subscribe to the topic
            session!.topics.subscribe(
            withTopicSelectorExpression: "example/topic") { (error) -> Void in }
        }
    }

    func diffusionStream(_ stream: PTDiffusionStream,
                         didSubscribeToTopicPath topicPath: String,
                         specification: PTDiffusionTopicSpecification) {
        print("Subscribed: \(topicPath)")
    }

    func diffusionStream(_ stream: PTDiffusionValueStream,
                         didUpdateTopicPath topicPath: String,
                         specification: PTDiffusionTopicSpecification,
                         oldString: String?,
                         newString: String?) {
        print("Update: \(String(describing: newString))")
    }

    func diffusionStream(_ stream: PTDiffusionStream,
                         didUnsubscribeFromTopicPath topicPath: String,
                         specification: PTDiffusionTopicSpecification,
                         reason: PTDiffusionTopicUnsubscriptionReason) {
        print("Unsubscribed: \(topicPath)")
    }

    func diffusionDidClose(_ stream: PTDiffusionStream) {
        print("Closed")
    }

    func diffusionStream(_ stream: PTDiffusionStream,
                         didFailWithError error: Error) {
        print("Failed: \(error)")
    }
}