Draft Specification
This specification is currently a draft under development.
Subscription Event Protocol
The CloudOS Subscription Event Protocol provides an event based model for managing subscriptions between Personal Clouds. The current implementation of the protocol will create a symmetric relationship between both Personal Clouds. In order to use the Subscription Event Protocol the CloudOS ruleset must be installed in the Personal Cloud for both the originator and target.
Subscribe
The system:subscribe
event is used to create a channel between two Personal Clouds.
- domain:
cloudos
- type:
subscribe
- attributes:
channelName
namespace
relationship
targetChannel
- The
channelName
attribute is a label associated with the subscription that should convey meaning to developer. ThechannelName
is only used as a component in the creation of the event channel identifier. If nochannelName
is specified the value of "orphan" will be used. - The
namespace
attribute is provided as a means for the developer to group subscriptions within a single, or group, or applications. Thenamespace
is used to filter the list of subscriptions returned by thesubscriptionList()
function. If nonamespace
is specified the value of "shared" will be used. - The
relationship
attribute allows the developer to characterize the relationship between the originator and target clouds. Therelationship
attribute should be specified as a pair of values separated by a dash (e.g.parent-child
,peer-peer
,master-slave
). The first value of the relationship attribute will be stored with the originating Personal Cloud subscription, the second value will be stored with the target Personal Cloud subscription. Therelationship
attribute values are used to filter the list of subscriptions returned by thesubscriptionList()
function. If no relationship is specified the value of "peer-peer" will be used. - The
targetChannel
attribute is the event channel identifier for the target cloud to which the subscription is to be made.
system:subscribe
event. This is most often done in a rule postlude as shown in the following example:fired { raise cloudos event subscribe with channelName = "Coworkers Bob+Ted" and namespace = "MyFriends" and relationship = "friend-friend" and targetChannel = "3f15b820-af7f-012f-4c6e-00163ebczzzz" and _api = "sky"; }
Upon receiving the subscription request, the target cloud raises the following event to the originating cloud:
- domain:
cloudos
- type:
subscriptionRequestAdded
- attributes:
targetChannel
,backChannel
,namespace
,relationship
,channelName
rule receive_subscriptionRequestAdded select when cloudos subscriptionRequestAdded namespace re/MyFriends/" channelName re/Coworkers Bob+Ted/ relationship re/friend-friend/
- domain: cloudos
- type: subscriptionRequestPending
- attributes: eventChannel, namespace, relationship, channelName
Subscription Approval or Rejection
- domain: cloudos
- type: subscriptionRequestApproved
- attributes: eventChannel
fired { raise cloudos event subscriptionRequestApproved with eventChannel = "3f15b820-af7f-012f-4c6e-00163ebcaaaa" and _api = "sky"; }
- domain: cloudos
- type: CloudOS_subscriptionAdded
- attributes: eventChannel, backChannel, namespace, relationship, channelName
rule receive_subscriptionRequestAdded select when cloudos subscriptionRequestAdded namespace re/MyFriends/ channelName re/Coworkers Bob+Ted/ relationship re/friend-friend/
- domain: cloudos
- type: subscriptionRequestRejected
- attributes: eventChannel
fired { raise cloudos event subscriptionRequestRejected with eventChannel = "3f15b820-af7f-012f-4c6e-00163ebcaaaa" and _api = "sky"; }
- domain: cloudos
- type: subscriptionRejected
- attributes: eventChannel, namespace, relationship, channelName
rule receive_subscriptionRejected select when cloudos subscriptionRejected namespace re/MyFriends/ channelName re/Coworkers Bob+Ted/ relationship re/friend-friend/
- domain: cloudos
- type: subscriptionRejected
- attributes: backChannel, namespace, relationship, channelName
rule receive_subscriptionRejected select when cloudos subscriptionRejected namespace re/MyFriends/ channelName re/Coworkers Bob+Ted/ relationship re/friend-friend/
Unsubscribe
The system:unsubscribe event is used to remove the Personal Channels between two Personal Clouds.
- domain: cloudos
- type: unsubscribe
- attribute: backChannel
fired { raise cloudos event unsubscribe with eventChannel = "3f15b820-af7f-012f-4c6e-00163ebcfddfd" and _api = "sky"; }
- domain: cloudos
- type: CloudOS_subscriptionRemoved
- attributes: eventChannel, backChannel, namespace, relationship, channelName
rule receive_CloudOS_subscriptionRemoved select when cloudos CloudOS_subscriptionRemoved namespace re/MyFriends/ channelName re/Coworkers Bob+Ted/ relationship re/friend-friend/
Functions
subscriptionList(namespace, relationship)
The subscriptionList() function will return a map of the subscriptions within the specified namespace and relationship. In order to use the function you must include the CloudOS module as a pragma in the meta section of your ruleset:
use module a169x625 alias CloudOS