blob: 1db982f96e6d5780948b881dd8bdca471d36e77a [file] [log] [blame]
# 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