retained-event and meta-API example
This commit is contained in:
@@ -6,6 +6,15 @@
|
||||
"realms": [
|
||||
{
|
||||
"name": "crossbardemo",
|
||||
"store": {
|
||||
"type": "memory",
|
||||
"event-history": [
|
||||
{
|
||||
"uri": "com.example.history",
|
||||
"limit": 100
|
||||
}
|
||||
]
|
||||
},
|
||||
"roles": [
|
||||
{
|
||||
"name": "anonymous",
|
||||
|
||||
13
examples/twisted/wamp/pubsub/retained/README.md
Normal file
13
examples/twisted/wamp/pubsub/retained/README.md
Normal file
@@ -0,0 +1,13 @@
|
||||
This shows how to use "retained" events.
|
||||
|
||||
The "backend.py" will publish to 'event.foo' with "retain=True" option
|
||||
turned on. This will cause the router to remember the event.
|
||||
|
||||
Now, when "frontend.py" attaches and subscribes to 'event.foo' with
|
||||
"get_retained=True" option turned on, it will get the retained event
|
||||
(even if the publisher session has already disconnected).
|
||||
|
||||
Try:
|
||||
|
||||
- run backend.py, then run frontend.py in a new shell
|
||||
- run backend.py, kill it, then run frontend.py
|
||||
59
examples/twisted/wamp/pubsub/retained/backend.py
Normal file
59
examples/twisted/wamp/pubsub/retained/backend.py
Normal file
@@ -0,0 +1,59 @@
|
||||
###############################################################################
|
||||
#
|
||||
# The MIT License (MIT)
|
||||
#
|
||||
# Copyright (c) Crossbar.io Technologies GmbH
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
from os import environ
|
||||
from twisted.internet import reactor
|
||||
from twisted.internet.defer import inlineCallbacks
|
||||
|
||||
from autobahn.twisted.wamp import Session, ApplicationRunner
|
||||
from autobahn.twisted.util import sleep
|
||||
from autobahn.wamp.types import PublishOptions
|
||||
|
||||
|
||||
class Component(Session):
|
||||
"""
|
||||
An application component calling the different backend procedures.
|
||||
"""
|
||||
|
||||
@inlineCallbacks
|
||||
def onJoin(self, details):
|
||||
print("session attached {}".format(details))
|
||||
topic = u"com.example.history"
|
||||
|
||||
print("publishing '{}' as retained event".format(topic))
|
||||
pub = yield self.publish(
|
||||
topic, "some data",
|
||||
options=PublishOptions(retain=True, acknowledge=True),
|
||||
)
|
||||
print("published: {}".format(pub))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
runner = ApplicationRunner(
|
||||
environ.get("AUTOBAHN_DEMO_ROUTER", u"ws://127.0.0.1:8080/auth_ws"),
|
||||
u"crossbardemo",
|
||||
)
|
||||
runner.run(Component)
|
||||
68
examples/twisted/wamp/pubsub/retained/frontend.py
Normal file
68
examples/twisted/wamp/pubsub/retained/frontend.py
Normal file
@@ -0,0 +1,68 @@
|
||||
###############################################################################
|
||||
#
|
||||
# The MIT License (MIT)
|
||||
#
|
||||
# Copyright (c) Crossbar.io Technologies GmbH
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
from os import environ
|
||||
from twisted.internet import reactor
|
||||
from twisted.internet.defer import inlineCallbacks
|
||||
|
||||
from autobahn.twisted.wamp import Session, ApplicationRunner
|
||||
from autobahn.twisted.util import sleep
|
||||
from autobahn.wamp.types import SubscribeOptions
|
||||
|
||||
|
||||
class Component(Session):
|
||||
"""
|
||||
An application component calling the different backend procedures.
|
||||
"""
|
||||
|
||||
@inlineCallbacks
|
||||
def onJoin(self, details):
|
||||
print("session attached {}".format(details))
|
||||
|
||||
def got_event(*args, **kw):
|
||||
print("got_event(): args={}, kwargs={}".format(args, kw))
|
||||
|
||||
topic = u"com.example.history"
|
||||
print("subscribing to '{}'".format(topic))
|
||||
pub = yield self.subscribe(
|
||||
got_event, topic,
|
||||
options=SubscribeOptions(get_retained=True),
|
||||
)
|
||||
print("id={}".format(pub.id))
|
||||
|
||||
events = yield self.call(u"wamp.subscription.get_events", pub.id)
|
||||
print("Using the WAMP Meta API:")
|
||||
print("wamp.subscription.get_events {}: {}".format(pub.id, len(events)))
|
||||
for event in events:
|
||||
print(" {event[timestamp]} {event[topic]} args={event[args]} kwargs={event[kwargs]}".format(event=event))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
runner = ApplicationRunner(
|
||||
environ.get("AUTOBAHN_DEMO_ROUTER", u"ws://127.0.0.1:8080/auth_ws"),
|
||||
u"crossbardemo",
|
||||
)
|
||||
runner.run(Component)
|
||||
Reference in New Issue
Block a user