实例:
default_sdk()->NotificationCenter()->notify(NotifyKeyRefundSuccess, array(
"refund_sn" => $refund_data['refund_sn'],
"uid" => $refundTask['user_id']
));
function default_sdk()
{
global $sdk;
if ($sdk == null) {
$sdk = SDKCore::instance();
$sdk->initGlobalData();
}
return $sdk;
}
class SDKCore{
public static function instance()
{
if (self::$_instance === null)
self::$_instance = new SDKCore();
return self::$_instance;
}
public function _SmsService()
{
if (!self::$sms_service) {
self::$sms_service = new SmsService();
}
return self::$sms_service;
}
public function _PushNotificationService()
{
if (!self::$push_service) {
self::$push_service = new PushNotificationService();
}
return self::$push_service;
}
public function NotificationCenter()
{
if (!self::$notification_center) {
self::$notification_center = new NotificationCenter();
default_sdk()->_SmsService()->regObserver();//观察者注入
default_sdk()->_PushNotificationService()->regObserver();//观察者注入
}
return self::$notification_center;
}
}
class SmsService
{
public function handleNotify($key, $data)
{
if ($key == NotifyKeyOrdersPay) {
} else if ($key == NotifyKeyOrdersDelivery) {
default_sdk()->OrderService()->send_sms_yunpian_write($data);
}
}
public function regObserver()
{
default_sdk()->NotificationCenter()->regObserver(NotifyKeyOrdersPay, $this);
default_sdk()->NotificationCenter()->regObserver(NotifyKeyDelivery, $this);
}
}
class PushNotificationService extends ServiceBase
{
public function regObserver()
{
default_sdk()->NotificationCenter()->regObserver(NotifyRefundChanged, $this);
default_sdk()->NotificationCenter()->regObserver(NotifyRefundSuccess, $this);
}
public function handleNotify($key, $data)
{
$Db = new DataSource;
//退款消息
if ($key == NotifyRefundInfoChanged) {
if(date('G')>=23 || date('G')<8) return;
$refundModel = $data;
$user_id = $refundModel->userId;
$redis_value = 1;
$redis_sign = $Db->getRedisManager()->get_refund_sign_push_time($user_id);
if($redis_sign == $redis_value) return;
$Db->getRedisManager()->set_refund_sign_push_time($user_id,$redis_value);
if (!($refundModel instanceof RefundModel))
return;
$pushType = isset($refundModel->pushType) ? $refundModel->pushType : 0;
$this->pushToUser_StartWeb($refundModel->userId, "楚楚街", "您的退款有一条新消息,点击查看。",
H5_SC_REFUND_DETAIL.'?refund_sn='. $refundModel->refundSn,$pushType);
Monitor::reportCount(PUSH_REFUND_MESSAGE_COUNT);
} else if ($key == NotifyKeyOrdersPay) {//付款成功
}
}
class NotificationCenter
{
private $observerDict = array();
//$observer需要实现IObserver接口
public function regObserver($key, $observer)
{
$list = $this->observerDict[$key];
if (!$list) {
$list = array();
}
$list[] = $observer;
$this->observerDict[$key] = $list;
}
public function notify($key, $data)
{
$list = $this->observerDict[$key];
if ($list) {
for ($i = 0; $i < count($list); $i++) {
if($key == NotifyKeyOrderPayedPointReceive ||
$key == NotifyKeyNopayOrdersTimeout1day
)
{
try {
$list[$i]->handleNotify($key, $data);
} catch (Exception $ex) {
}
}else{
CCTransactionIgnoreRollbackStart();
try {
$list[$i]->handleNotify($key, $data);
} catch (Exception $ex) {
}
CCTransactionIgnoreRollbackEnd();
}
}
}
}
}