awesome-im
Version:
Lightweight, extensible, JavaScript Instant Messaging.
118 lines (108 loc) • 2.76 kB
JavaScript
export const MessageType = {
/**
* 文本消息
*/
TEXT: "TxtMsg",
/**
* 图片消息
*/
IMAGE: "ImgMsg",
FILE: "FileMsg",
/**
* ping 消息,用于判断客户端是否连接服务端。
*/
PING: "PingMsg",
/**
* 信令消息(用于客户端与服务端的交互信令)
*/
SIGNAL: "SignalMsg"
}
export const ConversationType = {
/**
* 客户端与服务端的会话
*/
SERVER: 0,
/**
* 单聊
*/
PRIVATE: 1,
/**
* 讨论组
*/
DISCUSSION: 2,
/**
* 群组聊天
*/
GROUP: 3,
/**
* 聊天室会话
*/
CHATROOM: 4,
/**
* 系统消息
*/
SYSTEM: 5,
}
export const MessageDirection = {
/**
* 发送消息。
*/
SEND: 1,
/**
* 接收消息。
*/
RECEIVE: 2
}
export default class MessageModel {
constructor(messageData) {
const { messageType, conversationType, message, extra, from, to, messageUId, messageId } = messageData;
const Message = {
"messageDirection": MessageDirection.SEND,
"messageType": messageType || MessageType.TEXT,
"sentTime": new Date().getTime(),
"messageUId": messageUId,
"messageId": messageId,
"conversationType": conversationType || ConversationType.SERVER,
}
if (message) {
Message.content = {
message,
extra: extra || null
}
}
from && (Message.from = from);
to && (Message.to = to);
return Message;
}
}
export class TextMessage extends MessageModel {
constructor(messageData) {
const Message = super(messageData)
Message.messageType = MessageType.TEXT
return Message;
}
}
export class ImageMessage extends MessageModel {
constructor(messageData) {
const Message = super(messageData)
Message.messageType = MessageType.IMAGE
return Message;
}
}
export class PingMessage extends MessageModel {
constructor(messageData) {
const Message = super(messageData)
Message.messageType = MessageType.PING
Message.conversationType = ConversationType.SERVER;
return Message;
}
}
export class SignalMessage extends MessageModel {
constructor(messageData) {
const Message = super(messageData)
Message.messageType = MessageType.SIGNAL;
Message.signalName = messageData.signalName;
Message.conversationType = ConversationType.SERVER;
return Message;
}
}