#! /usr/bin/env mpenv # # This script monitors a user supplied list of MX network fields for # value changed callbacks. # import time import Mp #--------------------------------------------------------------------------- def vc_callback( callback, nf ): server_name = nf.server.get_field( "hostname" ) server_port = nf.server.get_field( "port" ); # print( "vc_callback invoked for server '%s@%s', field '%s'" \ # % ( server_name, server_port, nf.name ) ) # # print( "callback_id = %d" % callback.callback_id ) value = nf.get_local_value() print( "callback: %s@%s:%s = %s" \ % ( server_name, server_port, nf.name, str(value) ) ) #--------------------------------------------------------------------------- mx_database = Mp.RecordList( None ) callback_list = [] for arg in sys.argv[2:]: # Create a network field for this item. nf = Mp.get_network_field( mx_database, arg ) print( "Adding nf = '%s'" % nf.name ) server_name = nf.server.get_field( "hostname" ) server_port = nf.server.get_field( "port" ) print( "initial value: %s@%s:%s = %s" \ % ( server_name, server_port, nf.name, nf.get() )) # Add a value changed callback for the network field. callback = nf.add_callback( Mp.MXCBT_VALUE_CHANGED, vc_callback, nf ) callback_list.append( callback ) del callback if ( callback_list == [] ): print ( "No callbacks requested." ) sys.exit(0) # Monitor the callbacks mx_database.set_program_name( "mp_monitor" ) while (True): try: mx_database.wait_for_messages(1.0) except Mp.Timed_Out_Error: pass if ( Mp.kbhit() ): c = Mp.getch() if ( c == 113 ): length = len(callback_list) for i in range(length): c = callback_list[0] del callback_list[0] del c del callback_list break print( "Exiting..." )