from threading import Thread from daemonize import Daemonize from apns import APNs, Payload import redis import time import signal import sys import os import logging def sigint_handler(signal, frame): sys.exit(0) os._exit(0) def redisLoop(apns, logger): r = redis.StrictRedis(host='localhost', port=6379, db=0) while 1: time.sleep(0) data = r.brpop("apns_push", 10) if data: info = data[1].split('|') logger.info("Token: " + info[0] + " message: " + info[1]) send_notif(apns, info[0], info[1]) def sigint_handler(signal, frame): sys.exit(0) def send_notif(apns, token_hex, message): #token_hex = '602E96BF9BC15D7913871D4D90FEBD7E265500C9D22DCEC5A4AFA3FC36EBE4DC' payload = Payload(alert=message, sound="default", badge=1) apns.gateway_server.send_notification(token_hex, payload) def get_logger(): logger = logging.getLogger("apns_logger") logger.setLevel(logging.INFO) fh = logging.FileHandler("/tmp/apns_sender.log") fmt = '%(asctime)s - %(threadName)s - %(levelname)s - %(message)s' formatter = logging.Formatter(fmt) fh.setFormatter(formatter) logger.addHandler(fh) return logger def main(): logger = get_logger() logger.info("Starting apns_sender") cert_file = "/root/ios_push_test/ios_prod.pem" apns = APNs(use_sandbox=False, cert_file=cert_file) logger.info("Starting redis loop") redisLoop(apns, logger) signal.signal(signal.SIGINT, sigint_handler) pid = "/tmp/apns_sender.pid" daemon = Daemonize(app="apns_sender", pid=pid, action=main) daemon.start() #main()