代码拉取完成,页面将自动刷新
# -*- coding: UTF-8 -*-
"""
消息驱动模块
使用发布/订阅模式实现消息回调
本模块负责:
1. 各模块之间解耦,通过消息驱动
2. 实现一对一和一对多的消息模式
"""
from collections import defaultdict
class _Intermedia:
""" 一对多模式 """
# 本软件(filesync)中刚好是按照:
# ConfigData
# Inotify
# Master
# Monitor
# 这种顺序先后调用,否则不能使用defaultdict
# 因为reload动作中,Master依赖ConfigData先完成
messages = defaultdict(dict)
@classmethod
def broadcast(cls, msg, param):
for name, callback in cls.messages[msg].items():
callback(param)
@classmethod
def register(cls, msg, handler):
cls.messages[msg][handler.name] = handler.callback
@classmethod
def unregister(cls, msg, handler):
try:
del cls.messages[msg][handler.name]
except:
pass
class Subscriber(object):
def __init__(self, name):
self.name = name
self.callback = None
def register(self, msg, callback):
self.callback = callback
_Intermedia.register(msg, self)
def unregister(self, msg):
_Intermedia.unregister(msg, self)
class Publisher:
@classmethod
def notify(cls, msg, param=None):
_Intermedia.broadcast(msg, param)
class _Medium:
""" 一对一模式 """
messages = {}
@classmethod
def unicast(cls, msg, param):
callback = cls.messages[msg]
return callback(param)
@classmethod
def bind(cls, msg, callback):
cls.messages[msg] = callback
@classmethod
def unbind(cls, msg):
try:
del cls.messages[msg]
except:
pass
class Receiver:
@classmethod
def bind(cls, msg, callback):
_Medium.bind(msg, callback)
@classmethod
def unbind(cls, msg):
_Medium.unbind(msg)
class Sender:
@classmethod
def send(cls, msg, param=None):
return _Medium.unicast(msg, param)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。