import Pyro.core
import Pyro.util
import Pyro.naming
from RemoteObject import *
import random
from time import sleep

# An Observer is an object that watches another object and reacts
# whenever the Subject changes state.
class Observer(RemoteObject):
    def __init__(self, subject_name):

        # choose a name and initialize the RemoteObject
        self.name = subject_name + '_observer%d' % random.randint(0, 1000000)
        RemoteObject.__init__(self, self.name)

        # register with the subject
        self.subject = get_remote_object(subject_name)
        self.subject.register(self.uri)
        print "I just registered."

    def notify(self):
    # when the subject is modified, it invokes notify
        state = self.subject.get_state()
        print 'Observer notified; new state =', state

def main(script, subject_name='bob', *args):
    Observer(subject_name).requestLoop()

if __name__ == '__main__':
    main(*sys.argv)
