package com.sissi.pipeline.in.message; import com.mongodb.BasicDBObjectBuilder; import com.sissi.config.Dictionary; import com.sissi.config.impl.MongoUtils; import com.sissi.context.JIDContext; import com.sissi.persistent.Persistent; import com.sissi.pipeline.in.ProxyProcessor; import com.sissi.protocol.Protocol; import com.sissi.protocol.message.Message; /** * ACK更新 * * @author kim 2014年3月3日 */ public class MessageReceivedProcessor extends ProxyProcessor { private final Persistent persistent; public MessageReceivedProcessor(Persistent persistent) { super(); this.persistent = persistent; } /* * 如果为ACK请求 * * @see com.sissi.pipeline.Input#input(com.sissi.context.JIDContext, com.sissi.protocol.Protocol) */ @Override public boolean input(JIDContext context, Protocol protocol) { return protocol.cast(Message.class).received() ? this.writeAndReturn(context, protocol) : true; } /** * {"pid":Xxx},{"$set":{"ack":false}} * * @param context * @param protocol * @return */ private boolean writeAndReturn(JIDContext context, Protocol protocol) { this.persistent.peek(MongoUtils.asMap(BasicDBObjectBuilder.start(Dictionary.FIELD_PID, protocol.cast(Message.class).getReceived().id()).get()), MongoUtils.asMap(BasicDBObjectBuilder.start("$set", BasicDBObjectBuilder.start(Dictionary.FIELD_ACK, true).get()).get())); return false; } }