/**
*
*/
package jframe.getui.andriod;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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.getui.ConfField;
import jframe.getui.GetuiPlugin;
import jframe.getui.MultiGetuiConf;
import jframe.getui.MultiGetuiService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.gexin.rp.sdk.base.IPushResult;
import com.gexin.rp.sdk.base.ITemplate;
import com.gexin.rp.sdk.base.impl.ListMessage;
import com.gexin.rp.sdk.base.impl.SingleMessage;
import com.gexin.rp.sdk.base.impl.Target;
import com.gexin.rp.sdk.http.IGtPush;
/**
* @author dzh
* @date Aug 20, 2015 3:53:49 PM
* @since 1.0
*/
@Injector
public class MultiGetuiServiceImpl implements MultiGetuiService {
static Logger LOG = LoggerFactory.getLogger(GetuiServiceImpl.class);
@InjectPlugin
static GetuiPlugin plugin;
static String FILE_CONF = "file.getui";
private MultiGetuiConf mgc = null;
private Map<String, IGtPush> pushMap;
@Start
void start() {
String conf = plugin.getConfig(FILE_CONF);
start(conf);
}
private void start(String conf) {
if (!new File(conf).exists()) {
LOG.error("Not found getui config file {}", conf);
return;
}
try {
start(new FileInputStream(conf));
} catch (Exception e) {
LOG.error(e.getMessage());
}
}
private void start(InputStream is) throws Exception {
mgc = new MultiGetuiConf();
mgc.init(is);
String[] ids = mgc.getGroupIds();
pushMap = new HashMap<String, IGtPush>(ids.length, 1);
for (String id : ids) {
// TODO
System.setProperty("gexin.rp.sdk.http.connection.timeout",
mgc.getConf(id, ConfField.KEY_HTTP_CONN_TIMEOUT, "10000"));
System.setProperty("gexin.rp.sdk.http.connection.pool.size",
mgc.getConf(id, ConfField.KEY_HTTP_CONN_COUNT, "100"));
pushMap.put(
id,
new IGtPush(mgc.getConf(id, ConfField.KEY_HOST), mgc
.getConf(id, ConfField.KEY_APPKEY), mgc.getConf(id,
ConfField.KEY_MASTER_SECRET)));
}
LOG.info("GetuiService start successfully!");
}
public static MultiGetuiService test(InputStream is) {
MultiGetuiServiceImpl svc = new MultiGetuiServiceImpl();
try {
svc.start(is);
} catch (Exception e) {
}
return svc;
}
@Stop
public void stop() {
for (IGtPush p : pushMap.values()) {
try {
p.close();
} catch (IOException e) {
LOG.error(e.getMessage());
}
}
plugin = null;
}
/**
*
*/
@Override
public IPushResult push2List(String id, ITemplate data, boolean isOffline,
long offlineExpireTime, List<String> token) {
IGtPush push = pushMap.get(id);
ListMessage message = new ListMessage();
message.setData(data);
message.setOffline(isOffline);
message.setOfflineExpireTime(offlineExpireTime);
List<Target> list = new ArrayList<Target>(token.size());
Target target = null;
for (String t : token) {
target = new Target();
target.setAppId(mgc.getConf(id, ConfField.KEY_APPID));
target.setClientId(t);
list.add(target);
}
return push.pushMessageToList(push.getContentId(message), list);
}
@Override
public IPushResult push2Single(String id, ITemplate data,
boolean isOffline, long offlineExpireTime, String token)
throws Exception {
IGtPush push = pushMap.get(id);
SingleMessage message = new SingleMessage();
message.setOffline(isOffline);
message.setOfflineExpireTime(offlineExpireTime);
message.setData(data);
Target target = new Target();
target.setAppId(mgc.getConf(id, ConfField.KEY_APPID));
target.setClientId(token);
return push.pushMessageToSingle(message, target);
}
public String getConf(String id, String key, String defVal) {
return mgc.getConf(id, key, defVal);
}
@Override
public String getConf(String id, String key) {
return mgc.getConf(id, key, "");
}
// public IPushResult push2App(ITemplate data, boolean isOffline,
// long offlineExpireTime) throws Exception {
//
// return null;
// }
}