【仅供内部供应商使用,不提供对外解答和培训】

Page tree

【仅供内部供应商使用,不提供对外解答和培训】

Skip to end of metadata
Go to start of metadata

接口作用

扩展平台内置的消息推送,可以推送自定义的消息。

接口内容

MessageHelper
FS.MessageHelper = [];

FS.MessageHelper中可以放入如下格式的对象

Item
{
   executable : function(msg){},
   action : function(msg){}
}

executable函数用于确定消息链接是否可以点击打开,返回true表示可以打开,返回false则表示无效的消息,而action函数则用户点击该消息后的操作。

关键引用类

MessageHelper
 /**
 * 消息帮助类,可以自己注册发送器用于发送
 */
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

  • No labels