package com.farsunset.ichat.cim.push;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.farsunset.ichat.nio.mutual.Message;
import com.farsunset.ichat.nio.session.CIMSession;
import com.farsunset.ichat.nio.session.DefaultSessionManager;
/**
* 消息发送实现类
*
* @author farsunset (3979434@qq.com)
*/
public class DefaultMessagePusher implements CIMMessagePusher {
private final Log log = LogFactory.getLog(getClass());
private DefaultSessionManager sessionManager;
public void setSessionManager(DefaultSessionManager sessionManager) {
this.sessionManager = sessionManager;
}
/**
* 向用户发送消息
* @param msg
*/
public void pushMessageToUser(Message msg) {
CIMSession session = sessionManager.getSession(msg.getReceiver());
System.out.println(msg.getReceiver()+"-------");
/*服务器集群时,可以在此 判断当前session是否连接于本台服务器,如果是,继续往下走,如果不是,将此消息发往当前session连接的服务器并 return
if(!session.isLocalhost()){//判断当前session是否连接于本台服务器,如不是
MessageDispatcher.execute(msg, session.getHost());
return;
}
*/
if (session != null && session.isConnected()) {
/*//如果用户标示了DeviceToken 且 需要后台推送(Pushable=1) 说明这是ios设备需要使用anps发送
if(StringUtil.isNotEmpty(session.getDeviceToken())&&session.getPushable()==User.PUSHABLE)
{
try {
deliverByANPS(msg,session.getDeviceToken());
msg.setStatus(Message.STATUS_SEND);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
msg.setStatus(Message.STATUS_NOT_SEND);
}
}else
{
//推送消息
session.deliver(MessageUtil.transform(msg));
}*/
//推送消息
session.write(msg);
System.out.println(msg.getContent()+"-------");
}else{
/*User target = ((UserService)ContextHolder.getBean("userServiceImpl")).getUserByAccount(msg.getReceiver());
//如果用户标示了DeviceToken 且 需要后台推送(Pushable=1) 说明这是ios设备需要使用anps发送
if(StringUtil.isNotEmpty(target.getDeviceToken())&&target.getPushable()==User.PUSHABLE)
{
try {
deliverByANPS(msg,target.getDeviceToken());
msg.setStatus(Message.STATUS_SEND);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
msg.setStatus(Message.STATUS_NOT_SEND);
}
} */
//未发送
}
try{
//可以在这保存消息到数据库
//((MessageService)ContextHolder.getBean("messageServiceImpl")).save(msg);
}catch(Exception e){
log.warn(" Messages insert to database failure!!");
}
}
/* public void deliverByANPS(Message msg,String deviceToken) throws Exception {
String alert = getMessageTile(msg);
// 被推送的iphone应用程序标示符
PayLoad payLoad = new PayLoad();
payLoad.addAlert(alert);
payLoad.addBadge(1);
payLoad.addSound("default");
PushNotificationManager pushManager = PushNotificationManager.getInstance();
pushManager.addDevice(deviceToken, deviceToken);
String host = ConfigManager.getInstance().get("apple.anps.host"); // 测试用的苹果推送服务器
int port = Integer.parseInt(ConfigManager.getInstance().get("apple.anps.port"));
String password = ConfigManager.getInstance().get("apple.anps.p12.password");
String p12File = ConfigManager.getInstance().get("apple.anps.p12.file");
pushManager.initializeConnection(host, port,this.getClass().getClassLoader().getResourceAsStream(p12File), password,
SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);
// Send Push
Device client = pushManager.getDevice(deviceToken);
pushManager.sendNotification(client, payLoad); // 推送消息
pushManager.stopConnection();
pushManager.removeDevice(deviceToken);
}
*/
}