|
@@ -5,73 +5,76 @@ Reference: http://www.slideshare.net/ishraqabd/publish-subscribe-model-overview-
|
|
|
Author: https://github.com/HanWenfang
|
|
|
'''
|
|
|
|
|
|
+
|
|
|
class Provider:
|
|
|
- def __init__(self):
|
|
|
- self.msgQueue = []
|
|
|
- self.subscribers = {}
|
|
|
-
|
|
|
- def notify(self, msg):
|
|
|
- self.msgQueue.append(msg)
|
|
|
-
|
|
|
- def subscribe(self,msg, subscriber):
|
|
|
- if not msg in self.subscribers:
|
|
|
- self.subscribers[msg] = []
|
|
|
- self.subscribers[msg].append(subscriber) #unfair
|
|
|
- else:
|
|
|
- self.subscribers[msg].append(subscriber)
|
|
|
-
|
|
|
- def unSubscribe(self,msg, subscriber):
|
|
|
- self.subscribers[msg].remove(subscriber)
|
|
|
-
|
|
|
- def update(self):
|
|
|
- for msg in self.msgQueue:
|
|
|
- if msg in self.subscribers:
|
|
|
- for sub in self.subscribers[msg]:
|
|
|
- sub.run(msg)
|
|
|
- self.msgQueue = []
|
|
|
+ def __init__(self):
|
|
|
+ self.msgQueue = []
|
|
|
+ self.subscribers = {}
|
|
|
+
|
|
|
+ def notify(self, msg):
|
|
|
+ self.msgQueue.append(msg)
|
|
|
+
|
|
|
+ def subscribe(self, msg, subscriber):
|
|
|
+ if not msg in self.subscribers:
|
|
|
+ self.subscribers[msg] = []
|
|
|
+ self.subscribers[msg].append(subscriber) #unfair
|
|
|
+ else:
|
|
|
+ self.subscribers[msg].append(subscriber)
|
|
|
+
|
|
|
+ def unSubscribe(self, msg, subscriber):
|
|
|
+ self.subscribers[msg].remove(subscriber)
|
|
|
+
|
|
|
+ def update(self):
|
|
|
+ for msg in self.msgQueue:
|
|
|
+ if msg in self.subscribers:
|
|
|
+ for sub in self.subscribers[msg]:
|
|
|
+ sub.run(msg)
|
|
|
+ self.msgQueue = []
|
|
|
+
|
|
|
|
|
|
class Publisher:
|
|
|
- def __init__(self, msgCenter):
|
|
|
- self.provider = msgCenter
|
|
|
-
|
|
|
- def publish(self, msg):
|
|
|
- self.provider.notify(msg)
|
|
|
+ def __init__(self, msgCenter):
|
|
|
+ self.provider = msgCenter
|
|
|
+
|
|
|
+ def publish(self, msg):
|
|
|
+ self.provider.notify(msg)
|
|
|
|
|
|
|
|
|
class Subscriber:
|
|
|
- def __init__(self,name,msgCenter):
|
|
|
- self.name = name
|
|
|
- self.provider = msgCenter
|
|
|
+ def __init__(self, name, msgCenter):
|
|
|
+ self.name = name
|
|
|
+ self.provider = msgCenter
|
|
|
|
|
|
- def subscribe(self, msg):
|
|
|
- self.provider.subscribe(msg, self)
|
|
|
+ def subscribe(self, msg):
|
|
|
+ self.provider.subscribe(msg, self)
|
|
|
|
|
|
- def run(self, msg):
|
|
|
- print "%s got %s"%(self.name, msg)
|
|
|
+ def run(self, msg):
|
|
|
+ print "%s got %s" % (self.name, msg)
|
|
|
|
|
|
|
|
|
def main():
|
|
|
- messageCenter = Provider()
|
|
|
+ messageCenter = Provider()
|
|
|
+
|
|
|
+ fftv = Publisher(messageCenter)
|
|
|
|
|
|
- fftv = Publisher(messageCenter)
|
|
|
+ jim = Subscriber("jim", messageCenter)
|
|
|
+ jim.subscribe("cartoon")
|
|
|
+ jack = Subscriber("jack", messageCenter)
|
|
|
+ jack.subscribe("music")
|
|
|
+ gee = Subscriber("gee", messageCenter)
|
|
|
+ gee.subscribe("movie")
|
|
|
|
|
|
- jim = Subscriber("jim", messageCenter)
|
|
|
- jim.subscribe("cartoon")
|
|
|
- jack = Subscriber("jack", messageCenter)
|
|
|
- jack.subscribe("music")
|
|
|
- gee = Subscriber("gee", messageCenter)
|
|
|
- gee.subscribe("movie")
|
|
|
+ fftv.publish("cartoon")
|
|
|
+ fftv.publish("music")
|
|
|
+ fftv.publish("ads")
|
|
|
+ fftv.publish("movie")
|
|
|
+ fftv.publish("cartoon")
|
|
|
+ fftv.publish("cartoon")
|
|
|
+ fftv.publish("movie")
|
|
|
+ fftv.publish("blank")
|
|
|
|
|
|
- fftv.publish("cartoon")
|
|
|
- fftv.publish("music")
|
|
|
- fftv.publish("ads")
|
|
|
- fftv.publish("movie")
|
|
|
- fftv.publish("cartoon")
|
|
|
- fftv.publish("cartoon")
|
|
|
- fftv.publish("movie")
|
|
|
- fftv.publish("blank")
|
|
|
+ messageCenter.update()
|
|
|
|
|
|
- messageCenter.update()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
- main()
|
|
|
+ main()
|