Move rmr python api docs over.
[ric-plt/xapp-frame-py.git] / examples / rmr / rcv_all.py
diff --git a/examples/rmr/rcv_all.py b/examples/rmr/rcv_all.py
new file mode 100644 (file)
index 0000000..1db982f
--- /dev/null
@@ -0,0 +1,70 @@
+# vim: ts=4 sw=4 expandtab:
+# ==================================================================================
+#       Copyright (c) 2019 Nokia
+#       Copyright (c) 2018-2019 AT&T Intellectual Property.
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#          http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+# ==================================================================================
+
+#   Mnemonic:   rcv_all.py
+#   Abstract:   This example shows how to receive all queued messages into
+#               a bunch (an array of summaries).  RMR is initialised in multi-
+#               threaded call mode so that it will queue messages on a 2K ring
+#               and prevent the remote application(s) from blocking if we don't
+#               do timely receives.  Then we read 'bursts' of messages sleeping
+#               between reads to allow some message to pile up.
+#
+#               Because this programme does not send messages, there is no reason
+#               to wait for RMR to initialise a route table (no call to rmr_ready
+#               is needed.
+#
+#   Date:       26 September 2019
+#
+# ---------------------------------------------------------------------------------
+
+from rmr import rmr
+from rmr import helpers
+import time
+import sys
+import signal
+
+
+#    Ensure things terminate nicely
+#
+def signal_handler(sig, frame):
+    print('SIGINT received! Cleaning up rmr')
+    rmr.rmr_close(mrc)
+    print("Byeee")
+    sys.exit(0)
+
+listen_port = "4560".encode('utf-8')                                          # port RMR will listen on (RMR needs string, not value)
+mrc = rmr.rmr_init( listen_port, rmr.RMR_MAX_RCV_BYTES, rmr.RMRFL_MTCALL )    # put into multi-threaded call mode
+
+signal.signal(signal.SIGINT, signal_handler)    # cleanup on ctl-c
+
+while True:
+
+    # three calling options:
+    #mbunch = helpers.rmr_rcvall_msgs( mrc, [2, 4, 6] )     # get types 2, 4 and 6 only
+    #mbunch = helpers.rmr_rcvall_msgs( mrc, [2] )           # get types 2 only
+    mbunch = helpers.rmr_rcvall_msgs( mrc )                 # get all message types
+
+    if mbunch == None or  len( mbunch ) < 1:
+        print( "no messages" )
+    else:
+        print( "got %d messages" % len( mbunch ) )
+        for mb in mbunch:
+            print( "type=%d payload=%s" % (mb["message type"], mb["payload"] ) )
+
+    time.sleep( 1 )            # sleep to allow some to accumulate
+