/** * */ package jframe.pushy.impl; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.Date; import java.util.HashMap; import java.util.Map; import jframe.core.conf.VarHandler; import jframe.core.plugin.annotation.InjectPlugin; import jframe.core.plugin.annotation.Injector; import jframe.core.plugin.annotation.Start; import jframe.core.plugin.annotation.Stop; import jframe.pushy.MultiPushyConf; import jframe.pushy.MultiPushyService; import jframe.pushy.PushyPlugin; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.relayrides.pushy.apns.util.SimpleApnsPushNotification; import com.relayrides.pushy.apns.util.TokenUtil; /** * @author dzh * @date Aug 29, 2015 2:05:18 PM * @since 1.0 */ @Injector public class MultiPushyServiceImpl implements MultiPushyService { static Logger LOG = LoggerFactory.getLogger(MultiPushyServiceImpl.class); @InjectPlugin static PushyPlugin Plugin; static String FILE_CONF = "file.pushy"; private Map<String, PushManagerWrapper> pushMap; @Start void start() { LOG.info("MultiPushyService is starting!"); String conf = Plugin.getConfig(FILE_CONF); if (!new File(conf).exists()) { LOG.error("Not found pushy config file {}", conf); return; } try { start(new FileInputStream(conf), new VarHandler(Plugin .getPluginRef().getContext().getConfig())); } catch (Exception e) { LOG.error(e.getMessage()); } } private void start(InputStream is, VarHandler varHandler) { try { MultiPushyConf multiConf = new MultiPushyConf(); multiConf.init(is); multiConf.replace(varHandler); String[] ids = multiConf.getGroupIds(); pushMap = new HashMap<String, PushManagerWrapper>(ids.length, 1); for (String group : ids) { PushManagerWrapper pm = new PushManagerWrapper().init(group, multiConf); pm.start(); pushMap.put(group, pm); } } catch (Exception e) { LOG.error(e.getMessage()); return; } LOG.info("MultiPushyService start successfully!"); } @Stop public void stop() { if (pushMap != null) { for (PushManagerWrapper p : pushMap.values()) { p.stop(); } } Plugin = null; } @Override public void sendMessage(String id, String token, String payload) throws Exception { sendMessage(id, token, payload, null); } @Override public void sendMessage(String id, String token, String payload, Date expirationDate) throws Exception { try { PushManagerWrapper p = pushMap.get(id); if (p != null) p.getPushManager() .getQueue() .put(new SimpleApnsPushNotification(TokenUtil .tokenStringToByteArray(token), payload, expirationDate)); } catch (InterruptedException e) { LOG.warn(e.getMessage()); } } public static MultiPushyServiceImpl test(InputStream is, VarHandler varHandler) { MultiPushyServiceImpl pushy = new MultiPushyServiceImpl(); pushy.start(is, varHandler); return pushy; } }