扩展平台内置的消息推送,可以推送自定义的消息。
FS.MessageHelper = []; |
FS.MessageHelper中可以放入如下格式的对象
{ executable : function(msg){}, action : function(msg){} } |
executable函数用于确定消息链接是否可以点击打开,返回true表示可以打开,返回false则表示无效的消息,而action函数则用户点击该消息后的操作。
/** * 消息帮助类,可以自己注册发送器用于发送 */ public class MessageHelper { private static Map<String, MessageDataAccessObject> map = new ConcurrentHashMap<String, MessageDataAccessObject>(); public static int getMessageDataAccessObjectCount() { return map.size(); } /** * 注册消息发送器 * @param mark 标记 * @param dao 消息和数据库关联接口 */ public static void registerMessageDataAccessObject(String mark, MessageDataAccessObject dao) { map.put(mark, dao); } public static MessageDataAccessObject getMessageDataAccessObject(String mark) { return map.get(mark); } /** * 入库 * @param mark 标记 * @param message 消息 * @return 入库成功的话返回记录的id * @throws Exception 异常 */ public static long save(String mark, Message message) throws Exception { return getMessageDataAccessObject(mark).save(message); } /** * 将制定的消息标记会已弹出过的状态 * @param mark 标记 * @param id 记录id * @throws Exception 异常 */ public static void updateToasted(String mark, long id) throws Exception { getMessageDataAccessObject(mark).updateToasted(id); } /** * 通过消息id获取消息 * @param mark 标记 * @param id 消息id * @return 消息 * @throws Exception 异常 */ public static Message findByID(String mark, long id) throws Exception { return getMessageDataAccessObject(mark).findByID(id); } /** * 通过id删除一条消息 * @param mark 标记 * @param id 消息id * @return 删除成功还是失败 * @throws Exception 异常 */ public static boolean deleteByID(String mark, long id) throws Exception { return getMessageDataAccessObject(mark).deleteByID(id); } /** * 删除指定用户的所有通知信息 * @param userID 用户ID * @throws Exception 删除过程中出现异常则抛出此异常 */ public static void deleteAll(long userID) throws Exception { for (String category : map.keySet()) { MessageDataAccessObject messageDataAccessObject = getMessageDataAccessObject(category); if (messageDataAccessObject != null) { messageDataAccessObject.deleteByID(userID); } } } /** * 获取当前用户的所有信息 * * @param username 用户名 * @return 用户信息数组 * @throws Exception 信息获取失败则抛出此异常 */ public static List<Message> getMessages(String username) throws Exception { List<Message> messages = new ArrayList<Message>(); for (String category : map.keySet()) { MessageDataAccessObject messageDataAccessObject = getMessageDataAccessObject(category); if (messageDataAccessObject != null) { messages.addAll(messageDataAccessObject.getMessages(username)); } } return messages; } /** * 获取当前用户的新鲜信息 * * @param username 用户名 * @return 用户信息数组 * @throws Exception 信息获取失败则抛出此异常 */ public static List<Message> getFreshMessages(String username) throws Exception { List<Message> messages = new ArrayList<Message>(); for (String category : map.keySet()) { MessageDataAccessObject messageDataAccessObject = getMessageDataAccessObject(category); if (messageDataAccessObject != null) { messages.addAll(messageDataAccessObject.getFreshMessages(username)); } } return messages; } /** * 获取指定用户的通知消息所组成的JSON对象 * @param username 用户名 * @return 通知消息 * @throws Exception 获取JSON对象过程中出现异常则抛出此异常 */ public static JSONObject getMessageJSONObject(String username) throws Exception { List<Message> messages = MessageHelper.getMessages(username); List<Message> freshMessages = MessageHelper.getFreshMessages(username); JSONObject jo = new JSONObject(); JSONArray toasted = new JSONArray(); for (Message message : messages) { toasted.put(message.createJSONObject()); } jo.put("toasted", toasted); JSONArray fresh = new JSONArray(); for (Message message : freshMessages) { fresh.put(message.createJSONObject()); } jo.put("fresh", fresh); return jo; } } |
可以在FSPlate的实现类中调用MessageHelper注册自定义的消息获取组件。
(function(){ var openMessage = function(msg) { FS.tabPane.addItem({ title : "我的消息" + msg.id, src : msg.url }); }; var executable = function(msg) { return msg.username != null; }; FS.MessageHelper.push({ executable : executable, action : openMessage }); })(jQuery); |
自定义消息的示例可参照这里:https://git.oschina.net/fanruan/plugins-free/tree/master/plugin-message