package chat.module.entity;
|
|
import chat.consts.ProtoConstants;
|
import chat.server.call.ResultCode;
|
import chat.server.moquette.message.ModifiedMqttPubAckMessage;
|
import chat.server.moquette.message.MqttFixedHeader;
|
import chat.server.moquette.message.MqttMessage;
|
import chat.server.moquette.message.MqttMessageIdVariableHeader;
|
import chat.server.moquette.message.MqttMessageType;
|
import chat.server.moquette.message.MqttQoS;
|
import chat.user.User;
|
import chat.user.UserStore;
|
import chat.util.ByteStrToStr;
|
import cn.wildfirechat.proto.WFCMessage;
|
import cn.wildfirechat.proto.WFCMessage.Message;
|
|
import frame.object.data.Entity;
|
import frame.object.data.ID;
|
import frame.persist.NamedSQL;
|
import frame.persist.SQLRunner;
|
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.Unpooled;
|
|
public class MessageRecord {
|
|
private String id;
|
private String spaceid;
|
private String spacecode;
|
private String typecode;
|
private int type;
|
private String path;
|
private String content;
|
private int persistflag;
|
private String senderid;
|
private long messageid;
|
private String statuscode;
|
private long timestamp;
|
private String parentid;
|
private int level;
|
|
private User sender;
|
private WFCMessage.Message message;
|
|
public MessageRecord() {
|
timestamp = System.currentTimeMillis();
|
}
|
|
public static MessageRecord getInstance(String spaceCode, String spaceId, Message message) throws Exception {
|
MessageRecord result = new MessageRecord();
|
|
result.id = ID.newValue();
|
|
if (message.getContent().getType() == 1) {
|
result.typecode = "text";
|
}
|
else if (message.getContent().getType() == 2) {
|
result.typecode = "voice";
|
}
|
else if (message.getContent().getType() == 3) {
|
result.typecode = "image";
|
}
|
else if (message.getContent().getType() == 4) {
|
result.typecode = "location";
|
}
|
else if (message.getContent().getType() == 5) {
|
result.typecode = "file";
|
}
|
else if (message.getContent().getType() == 6) {
|
result.typecode = "video";
|
}
|
else if (message.getContent().getType() == 7) {
|
result.typecode = "sticker";
|
}
|
else if (message.getContent().getType() == 8) {
|
result.typecode = "richmedia";
|
}
|
else if (message.getContent().getType() == 104) {
|
result.typecode = "groupNotiy";
|
}
|
else if (message.getContent().getType() == 90) {
|
result.typecode = "newFriendNotify";
|
}
|
|
result.type = message.getContent().getType();
|
result.spaceid = spaceId;
|
result.spacecode = spaceCode;
|
|
if (message.getContent().getType() == 90) {
|
result.content = message.getContent().getContent();
|
}
|
else if (message.getContent().getSearchableContent() == null || ("").equals(message.getContent().getSearchableContent())) {
|
result.content = ByteStrToStr.transformStr(message.getContent().getData());
|
}
|
else {
|
result.content = message.getContent().getSearchableContent();
|
}
|
|
result.persistflag = message.getContent().getPersistFlag();
|
result.senderid = message.getFromUser();
|
result.messageid = message.getMessageId();
|
result.statuscode = "send";
|
result.timestamp = System.currentTimeMillis();
|
result.sender = UserStore.getById(message.getFromUser());
|
|
return result;
|
}
|
|
public static MessageRecord getTextInstance(String content, User sender) throws Exception {
|
MessageRecord result = new MessageRecord();
|
|
result.id = ID.newValue();
|
result.messageid = newMessageId();
|
result.sender = sender;
|
result.senderid = sender.getId();
|
result.content = content;
|
|
return result;
|
}
|
|
public static MessageRecord getImageInstance(String content) {
|
// TODO Auto-generated method stub
|
return null;
|
}
|
|
public void load(Entity entity) throws Exception {
|
// TODO Auto-generated method stub
|
id = entity.getString("id");
|
spaceid = entity.getString("spaceid");
|
spacecode = entity.getString("spacecode");
|
typecode = entity.getString("typecode");
|
type = entity.getInteger("type");
|
content = entity.getString("content");
|
path = entity.getString("path");
|
persistflag = entity.getInteger("persistflag");
|
senderid = entity.getString("senderid");
|
messageid = Long.parseLong(entity.getString("messageid"));
|
statuscode = entity.getString("statuscode");
|
timestamp = Long.parseLong(entity.getString("timestamp"));
|
parentid = entity.getString("parentid");
|
level = entity.getInteger("level");
|
}
|
|
public void pushTo(Entity entity) throws Exception {
|
entity.set("id", id);
|
entity.set("spaceid", spaceid);
|
entity.set("spacecode", spacecode);
|
entity.set("content", content);
|
entity.set("typecode", typecode);
|
entity.set("type", type);
|
entity.set("content", content);
|
entity.set("path", path);
|
entity.set("persistflag", persistflag);
|
entity.set("senderid", senderid);
|
entity.set("content", content);
|
entity.set("messageid", messageid);
|
entity.set("statuscode", statuscode);
|
entity.set("timestamp", timestamp);
|
entity.set("parentid", parentid);
|
entity.set("level", level);
|
}
|
|
public MqttMessage toMqttMessage(String targetId, WFCMessage.MessageContent content) {
|
WFCMessage.Message wfcMessage = toWFCMessage(targetId, content);
|
|
byte[] bytes = wfcMessage.toByteArray();
|
|
ByteBuf buf = Unpooled.buffer();
|
buf.ensureWritable(1).writeByte(ResultCode.Success.getValue());
|
buf.ensureWritable(bytes.length).writeBytes(bytes);
|
|
MqttMessageIdVariableHeader header = MqttMessageIdVariableHeader.from(Integer.parseInt(String.valueOf(messageid)));
|
MqttFixedHeader fixedHeader = new MqttFixedHeader(MqttMessageType.PUBACK, false, MqttQoS.AT_MOST_ONCE, false, 0);
|
ModifiedMqttPubAckMessage mqttMessage = new ModifiedMqttPubAckMessage(fixedHeader, header, buf);
|
|
return mqttMessage;
|
}
|
|
public Message toWFCMessage(String targetId, WFCMessage.MessageContent contentMessage) {
|
WFCMessage.Message message = null;
|
|
try {
|
WFCMessage.Message.Builder builder = WFCMessage.Message.newBuilder();
|
if (contentMessage != null) {
|
long timestamp = System.currentTimeMillis();
|
builder = WFCMessage.Message.newBuilder().setContent(contentMessage).setServerTimestamp(timestamp);
|
builder.setConversation(builder.getConversationBuilder().setType(ProtoConstants.ConversationType.ConversationType_Group).setTarget(targetId).setLine(0));
|
builder.setFromUser("user000");
|
long messageId = newMessageId();
|
builder.setMessageId(messageId);
|
} else {
|
builder = WFCMessage.Message.newBuilder();
|
builder.setMessageId(messageid);
|
builder.setFromUser(senderid);
|
WFCMessage.Conversation.Builder cb = WFCMessage.Conversation.newBuilder();
|
cb.setType(0);
|
cb.setTarget(targetId);
|
cb.setLine(0);
|
builder.setConversation(cb.build());
|
}
|
|
WFCMessage.MessageContent.Builder contentBuilder = null;
|
if (contentMessage == null) {
|
contentBuilder = WFCMessage.MessageContent.newBuilder();
|
contentBuilder.setType(1);
|
contentBuilder.setSearchableContent(content);
|
contentBuilder.setMediaType(0);
|
contentBuilder.setPersistFlag(0);
|
contentBuilder.setExpireDuration(0);
|
contentBuilder.setMentionedType(0);
|
WFCMessage.MessageContent messageContent = contentBuilder.build();
|
|
builder.setContent(messageContent);
|
builder.setServerTimestamp(System.currentTimeMillis());
|
}
|
|
message = builder.build();
|
}
|
catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
return message;
|
}
|
|
public String getSenderId() {
|
return senderid;
|
}
|
|
public String getContent() {
|
return content;
|
}
|
|
public void setSender(User sender) {
|
if (sender == null) {
|
this.sender = null;
|
this.senderid = null;
|
return;
|
}
|
|
this.sender = sender;
|
this.senderid = sender.getId();
|
}
|
|
public WFCMessage.Message getWFCMessage() {
|
return message;
|
}
|
|
public static int newMessageId() throws Exception {
|
NamedSQL namedSQL = NamedSQL.getInstance("nextval");
|
namedSQL.setParam("name", "messageId");
|
|
int result = SQLRunner.getInteger(namedSQL);
|
return result;
|
}
|
|
public String getId() {
|
return id;
|
}
|
|
public boolean isFreshThan(long timestamp) {
|
return this.timestamp > timestamp;
|
}
|
|
public long getMessageid() {
|
return messageid;
|
}
|
|
public void setMessageid(long messageid) {
|
this.messageid = messageid;
|
}
|
|
public WFCMessage.Message getMessage() {
|
return message;
|
}
|
|
public void setMessage(WFCMessage.Message message) {
|
this.message = message;
|
}
|
|
public String getTypecode() {
|
return typecode;
|
}
|
|
public void setTypecode(String typecode) {
|
this.typecode = typecode;
|
}
|
|
public int getPersistflag() {
|
return persistflag;
|
}
|
|
public void setPersistflag(int persistflag) {
|
this.persistflag = persistflag;
|
}
|
|
public int getType() {
|
return type;
|
}
|
|
public void setType(int type) {
|
this.type = type;
|
}
|
|
public long getTimestamp() {
|
return timestamp;
|
}
|
|
public void setTimestamp(long timestamp) {
|
this.timestamp = timestamp;
|
}
|
|
public String getSpacecode() {
|
return spacecode;
|
}
|
|
public void setSpacecode(String spacecode) {
|
this.spacecode = spacecode;
|
}
|
|
public String getSpaceid() {
|
return spaceid;
|
}
|
|
public void setSpaceid(String spaceid) {
|
this.spaceid = spaceid;
|
}
|
|
}
|