Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c1d353bce9 | ||
|
|
9d83f8e3fa | ||
|
|
94833780ef | ||
|
|
d0fdf55db4 | ||
|
|
ea00ef6b7f | ||
|
|
a11cf3c564 | ||
|
|
f5af956298 | ||
|
|
4005a4babe | ||
|
|
6ef8b78452 | ||
|
|
100a1bd44c | ||
|
|
5a213704c5 | ||
|
|
5a52a7d553 | ||
|
|
d751a7080b | ||
|
|
68ae7dbd58 | ||
|
|
10fce4baad | ||
|
|
c69906e249 | ||
|
|
1aed4b1d37 | ||
|
|
f2601fc65d | ||
|
|
4895f03a68 | ||
|
|
1d234a3575 | ||
|
|
386d0b9c57 | ||
|
|
3ab1c7553d | ||
|
|
85a4c806c1 | ||
|
|
9aac87b7a1 | ||
|
|
ce21441772 |
@@ -7,7 +7,7 @@
|
|||||||
* 性能强大,专业版IM服务支持百万在线和集群部署,业内顶尖性能水平,详情参考野火性能报告。
|
* 性能强大,专业版IM服务支持百万在线和集群部署,业内顶尖性能水平,详情参考野火性能报告。
|
||||||
* 部署运维简单,依赖服务少,稍加配置一键启动。
|
* 部署运维简单,依赖服务少,稍加配置一键启动。
|
||||||
* 安全加密。网络连接AES加密。客户端数据库SqlCipher加密。安全无小事。
|
* 安全加密。网络连接AES加密。客户端数据库SqlCipher加密。安全无小事。
|
||||||
* 全平台客户端,支持Android、iOS、Web、小程序、UniApp、Flutter、Windows、Mac OS、Linux等所有常见平台。
|
* 全平台客户端,支持Android、iOS、鸿蒙、Web、小程序、UniApp、Flutter、Windows、Mac OS、Linux等所有常见平台。
|
||||||
* 四端同时在线(移动端,pc端,web端和小程序端),数据和状态多端完美同步。
|
* 四端同时在线(移动端,pc端,web端和小程序端),数据和状态多端完美同步。
|
||||||
* 支持国产化。支持国产化操作系统、国产化芯片和国产操作系统。支持国密加密。
|
* 支持国产化。支持国产化操作系统、国产化芯片和国产操作系统。支持国密加密。
|
||||||
* 客户端使用微信[mars](https://github.com/tencent/mars)连接库,野火IM可能是最适应中国网络国情的即时通讯服务。
|
* 客户端使用微信[mars](https://github.com/tencent/mars)连接库,野火IM可能是最适应中国网络国情的即时通讯服务。
|
||||||
@@ -22,9 +22,10 @@
|
|||||||
* API丰富,方便与其它服务系统的对接。
|
* API丰富,方便与其它服务系统的对接。
|
||||||
* 拥有机器人和公众号功能,免费的频道(公众号)管理后台。
|
* 拥有机器人和公众号功能,免费的频道(公众号)管理后台。
|
||||||
* 超级群组功能,可以支持万人大群。
|
* 超级群组功能,可以支持万人大群。
|
||||||
|
* 支持多个IM服务组网互通,打破孤岛,适用于集团公司下多个分公司互联互通。
|
||||||
* 社区版IM服务和移动端免费商用,可以免费构建出完备的移动互联网应用。
|
* 社区版IM服务和移动端免费商用,可以免费构建出完备的移动互联网应用。
|
||||||
* 收费项目非常便宜,野火独有的试用模式,可以先部署到客户环境试用6个月,试用满意后再购买,避免上当受骗。
|
* 收费项目非常便宜,野火独有的试用模式,可以先部署到客户环境试用6个月,试用满意后再购买,避免上当受骗。
|
||||||
* 技术支持专业和高效,核心研发人员及时处理issue和论坛回复。
|
* 技术支持专业和高效,***核心研发***及时处理issue和工单,能最快解决用户的技术难题。
|
||||||
|
|
||||||
## 野火开源项目
|
## 野火开源项目
|
||||||
主要包括以下项目:
|
主要包括以下项目:
|
||||||
@@ -119,6 +120,19 @@ mvn clean package
|
|||||||
|
|
||||||
修改之后运行编译命令```mvn clean package```,rpm包生成在```distribution/target```目录下。
|
修改之后运行编译命令```mvn clean package```,rpm包生成在```distribution/target```目录下。
|
||||||
|
|
||||||
|
## Epoll
|
||||||
|
在linux系统中打开Epoll开关可以提高性能,默认软件包内打包的是x86_64的epoll native sdk。如果是arm64的机器,可以把[broker pom](./broker/pom.xml)文件中修改如下:
|
||||||
|
```xml
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.netty</groupId>
|
||||||
|
<artifactId>netty-transport-native-epoll</artifactId>
|
||||||
|
<version>${netty.version}</version>
|
||||||
|
<!-- <classifier>linux-x86_64</classifier>-->
|
||||||
|
<classifier>linux-aarch_64</classifier>
|
||||||
|
</dependency>
|
||||||
|
```
|
||||||
|
然后重新打包。专业版IM服务软件包中有arm64架构的sdk,可以直接替换。epoll只支持x86_64和arm64两个架构,其他架构不要把epoll开关打开。
|
||||||
|
|
||||||
## 升级说明
|
## 升级说明
|
||||||
1. 从0.42 版本增加了群成员数限制,默认为2000。如果您从之前的版本升级到这个版本或以后,需要注意到群成员数的限制。升级之后超出限制的群不受影响,但不能继续加人,如果您想修改默认值,可以在升级版本之后,修改t_setting表,把默认的大小改为您期望的人数。另外修改t_group表,把已经存在的群组max_member_count改成您期望的,然后重启。
|
1. 从0.42 版本增加了群成员数限制,默认为2000。如果您从之前的版本升级到这个版本或以后,需要注意到群成员数的限制。升级之后超出限制的群不受影响,但不能继续加人,如果您想修改默认值,可以在升级版本之后,修改t_setting表,把默认的大小改为您期望的人数。另外修改t_group表,把已经存在的群组max_member_count改成您期望的,然后重启。
|
||||||
2. 0.50版本添加了是否允许客户端发送群操作通知的配置。如果您在客户端自定义群通知,需要在服务器端配置允许,没有使用自定义群操作通知的不受影响。***
|
2. 0.50版本添加了是否允许客户端发送群操作通知的配置。如果您在客户端自定义群通知,需要在服务器端配置允许,没有使用自定义群操作通知的不受影响。***
|
||||||
@@ -143,6 +157,9 @@ mvn clean package
|
|||||||
## 服务对象
|
## 服务对象
|
||||||
因为野火的使用范围比较广,难免被一些不法分子利用,国内反诈反赌力度很大,所以国内多地警方都跟我们都有过联系。***为了预防我们的产品被用于非法目的,试用及购买只能支持境内法人单位,不接受个人或者境外团体。如果我们发现产品被用于非法目的,我们会立即停止技术支持服务并且报警和配合警方调查。请用于非法目的用户绕行!***
|
因为野火的使用范围比较广,难免被一些不法分子利用,国内反诈反赌力度很大,所以国内多地警方都跟我们都有过联系。***为了预防我们的产品被用于非法目的,试用及购买只能支持境内法人单位,不接受个人或者境外团体。如果我们发现产品被用于非法目的,我们会立即停止技术支持服务并且报警和配合警方调查。请用于非法目的用户绕行!***
|
||||||
|
|
||||||
|
## 常见问题
|
||||||
|
请参考文档[常见问题](https://docs.wildfirechat.cn/faq/server.html)
|
||||||
|
|
||||||
## 应用截图
|
## 应用截图
|
||||||
登录界面
|
登录界面
|
||||||
|
|
||||||
|
|||||||
@@ -148,6 +148,10 @@ robot.callback_with_client_info false
|
|||||||
## 频道回调信息是否带上用户clientId和平台类型。
|
## 频道回调信息是否带上用户clientId和平台类型。
|
||||||
channel.callback_with_client_info false
|
channel.callback_with_client_info false
|
||||||
|
|
||||||
|
## 频道回调新方式,在新方式下,如果有callback地址就会总是回调客户端发送的消息(包括owner和订阅者)。automatic属性控制订阅者发送的消息是否发给owner, 0发,1不发。
|
||||||
|
## 旧的方式是,automatic为0时,订阅者的消息发给owner,不转发消息到callback地址。为1时,把订阅者的消息转发给callback地址,不发给owner。
|
||||||
|
channel.new_callback_feature true
|
||||||
|
|
||||||
##禁止搜索用户
|
##禁止搜索用户
|
||||||
friend.disable_search false
|
friend.disable_search false
|
||||||
|
|
||||||
@@ -250,15 +254,6 @@ client.request_rate_limit 100
|
|||||||
##关于对象存储的详细信息请参考:https://docs.wildfirechat.cn/server/oss.html
|
##关于对象存储的详细信息请参考:https://docs.wildfirechat.cn/server/oss.html
|
||||||
media.server.use_qiniu 0
|
media.server.use_qiniu 0
|
||||||
|
|
||||||
##媒体类型分类
|
|
||||||
#Media_Type_GENERAL = 0,
|
|
||||||
#Media_Type_IMAGE = 1,
|
|
||||||
#Media_Type_VOICE = 2,
|
|
||||||
#Media_Type_VIDEO = 3,
|
|
||||||
#Media_Type_FILE = 4,
|
|
||||||
#Media_Type_PORTRAIT = 5,
|
|
||||||
#Media_Type_FAVORITE = 6
|
|
||||||
|
|
||||||
# qiniu media server configuration
|
# qiniu media server configuration
|
||||||
qiniu.server_url http://up.qbox.me
|
qiniu.server_url http://up.qbox.me
|
||||||
qiniu.access_key tU3vdBK5BL5j4N7jI5N5uZgq_HQDo170w5C9Amnn
|
qiniu.access_key tU3vdBK5BL5j4N7jI5N5uZgq_HQDo170w5C9Amnn
|
||||||
@@ -282,11 +277,21 @@ qiniu.bucket_portrait_domain http://cdn2.wildfirechat.cn
|
|||||||
qiniu.bucket_favorite_name storage
|
qiniu.bucket_favorite_name storage
|
||||||
qiniu.bucket_favorite_domain http://cdn2.wildfirechat.cn
|
qiniu.bucket_favorite_domain http://cdn2.wildfirechat.cn
|
||||||
|
|
||||||
|
##媒体类型分类
|
||||||
|
#Media_Type_GENERAL = 0,
|
||||||
|
#Media_Type_IMAGE = 1,
|
||||||
|
#Media_Type_VOICE = 2,
|
||||||
|
#Media_Type_VIDEO = 3,
|
||||||
|
#Media_Type_FILE = 4,
|
||||||
|
#Media_Type_PORTRAIT = 5,
|
||||||
|
#Media_Type_FAVORITE = 6,
|
||||||
|
#Media_Type_STICKER = 7,
|
||||||
|
#Media_Type_MOMENTS = 8
|
||||||
|
|
||||||
# local media server configuration
|
# local media server configuration
|
||||||
# 本地媒体服务器配置。
|
# 本地媒体服务器配置。
|
||||||
local.media.storage.root media
|
local.media.storage.root media
|
||||||
# 如果使用内置文件存储,文件上传后地址默认为 http://server.ip:http_port/fs/5/2021/03/27/08/filename。
|
# 如果使用内置文件存储,文件上传后地址默认为 http://server.ip:http_port/fs/5/2021/03/27/08/filename。fs目录下按照类型存放文件,媒体类型见上面注释,比如5就是Media_Type_PORTRAIT,是客户端的头像文件。
|
||||||
# 如果需要使用nginx添加https支持,请打开下面配置,这样客户端得到的文件地址为 https://example.com/media/fs/5/2021/03/27/08/filename。
|
# 如果需要使用nginx添加https支持,请打开下面配置,这样客户端得到的文件地址为 https://example.com/media/fs/5/2021/03/27/08/filename。
|
||||||
# 需要nginx把请求从https://example.com/media/fs 转到 http://server.ip:http_port/fs。注意需要带上所有header。
|
# 需要nginx把请求从https://example.com/media/fs 转到 http://server.ip:http_port/fs。注意需要带上所有header。
|
||||||
# 尽管内置文件存储可以使用,但是我们还是建议使用专业级别的对象存储服务,社区版可以使用七牛,专业版另外支持阿里云和也是私有对象存储。详情请参考 https://docs.wildfirechat.cn/server/oss.html
|
# 尽管内置文件存储可以使用,但是我们还是建议使用专业级别的对象存储服务,社区版可以使用七牛,专业版另外支持阿里云和也是私有对象存储。详情请参考 https://docs.wildfirechat.cn/server/oss.html
|
||||||
|
|||||||
Executable
+13
@@ -0,0 +1,13 @@
|
|||||||
|
DROP TABLE IF EXISTS `t_domain`;
|
||||||
|
CREATE TABLE `t_domain` (
|
||||||
|
`_domain_id` varchar(64) NOT NULL PRIMARY KEY,
|
||||||
|
`_name` varchar(64) NOT NULL,
|
||||||
|
`_desc` varchar(256) DEFAULT '',
|
||||||
|
`_email` varchar(64) DEFAULT '',
|
||||||
|
`_tel` varchar(64) DEFAULT '',
|
||||||
|
`_address` varchar(64) DEFAULT '',
|
||||||
|
`_extra` varchar(1024) DEFAULT '',
|
||||||
|
`_dt` bigint(20) NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
alter table `t_user` add column `_external` tinyint DEFAULT 0;
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
DROP TABLE IF EXISTS `t_domain`;
|
||||||
|
CREATE TABLE `t_domain` (
|
||||||
|
`_domain_id` varchar(128) NOT NULL PRIMARY KEY,
|
||||||
|
`_name` varchar(64) NOT NULL,
|
||||||
|
`_desc` varchar(256) DEFAULT '',
|
||||||
|
`_email` varchar(64) DEFAULT '',
|
||||||
|
`_tel` varchar(64) DEFAULT '',
|
||||||
|
`_address` varchar(64) DEFAULT '',
|
||||||
|
`_extra` varchar(1024) DEFAULT '',
|
||||||
|
`_dt` bigint(20) NOT NULL
|
||||||
|
)
|
||||||
|
ENGINE = InnoDB
|
||||||
|
DEFAULT CHARACTER SET = utf8mb4
|
||||||
|
COLLATE = utf8mb4_unicode_ci;
|
||||||
|
|
||||||
|
alter table `t_user` add column `_external` tinyint DEFAULT 0;
|
||||||
+2
-4
@@ -5,7 +5,7 @@
|
|||||||
<relativePath>../</relativePath>
|
<relativePath>../</relativePath>
|
||||||
<artifactId>wildfirechat-parent</artifactId>
|
<artifactId>wildfirechat-parent</artifactId>
|
||||||
<groupId>cn.wildfirechat</groupId>
|
<groupId>cn.wildfirechat</groupId>
|
||||||
<version>1.2.5</version>
|
<version>1.2.8</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>moquette-broker</artifactId>
|
<artifactId>moquette-broker</artifactId>
|
||||||
@@ -124,9 +124,7 @@
|
|||||||
<artifactId>netty-transport-native-epoll</artifactId>
|
<artifactId>netty-transport-native-epoll</artifactId>
|
||||||
<version>${netty.version}</version>
|
<version>${netty.version}</version>
|
||||||
<classifier>linux-x86_64</classifier>
|
<classifier>linux-x86_64</classifier>
|
||||||
<!--
|
<!-- <classifier>linux-aarch_64</classifier>-->
|
||||||
<classifier>${os.detected.name}-${os.detected.arch}</classifier>
|
|
||||||
-->
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|||||||
@@ -80,6 +80,7 @@ public class UpdateProfileAction extends RobotAction {
|
|||||||
RestResult result = RestResult.ok();
|
RestResult result = RestResult.ok();
|
||||||
if(modified) {
|
if(modified) {
|
||||||
try {
|
try {
|
||||||
|
builder.setUpdateDt(System.currentTimeMillis());
|
||||||
messagesStore.updateUserInfo(builder.build());
|
messagesStore.updateUserInfo(builder.build());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|||||||
@@ -163,6 +163,8 @@ public final class BrokerConstants {
|
|||||||
|
|
||||||
public static final String ROBOT_Callback_With_Client_Info = "robot.callback_with_client_info";
|
public static final String ROBOT_Callback_With_Client_Info = "robot.callback_with_client_info";
|
||||||
public static final String CHANNEL_Callback_With_Client_Info = "channel.callback_with_client_info";
|
public static final String CHANNEL_Callback_With_Client_Info = "channel.callback_with_client_info";
|
||||||
|
public static final String CHANNEL_New_Callback_Feature = "channel.new_callback_feature";
|
||||||
|
|
||||||
|
|
||||||
public static final String FRIEND_Disable_Search = "friend.disable_search";
|
public static final String FRIEND_Disable_Search = "friend.disable_search";
|
||||||
public static final String FRIEND_Disable_NickName_Search = "friend.disable_nick_name_search";
|
public static final String FRIEND_Disable_NickName_Search = "friend.disable_nick_name_search";
|
||||||
|
|||||||
@@ -43,13 +43,13 @@ public class QuitGroupHandler extends GroupHandler<WFCMessage.QuitGroupRequest>
|
|||||||
if (request.hasNotifyContent() && request.getNotifyContent().getType() > 0) {
|
if (request.hasNotifyContent() && request.getNotifyContent().getType() > 0) {
|
||||||
sendGroupNotification(fromUser, request.getGroupId(), request.getToLineList(), request.getNotifyContent());
|
sendGroupNotification(fromUser, request.getGroupId(), request.getToLineList(), request.getNotifyContent());
|
||||||
} else {
|
} else {
|
||||||
WFCMessage.MessageContent content = new GroupNotificationBinaryContent(request.getGroupId(), fromUser, null, "").getQuitGroupNotifyContent();
|
WFCMessage.MessageContent content = new GroupNotificationBinaryContent(request.getGroupId(), fromUser, request.getKeepMsg()>0?"1":"0", "").getQuitGroupNotifyContent();
|
||||||
sendGroupNotification(fromUser, request.getGroupId(), request.getToLineList(), content);
|
sendGroupNotification(fromUser, request.getGroupId(), request.getToLineList(), content);
|
||||||
}
|
}
|
||||||
|
|
||||||
if((m_messagesStore.getVisibleQuitKickoffNotification() & 0x01) > 0) {
|
if((m_messagesStore.getVisibleQuitKickoffNotification() & 0x01) > 0) {
|
||||||
Set<String> toUsers = m_messagesStore.getGroupManagers(request.getGroupId(), true);
|
Set<String> toUsers = m_messagesStore.getGroupManagers(request.getGroupId(), true);
|
||||||
WFCMessage.MessageContent content = new GroupNotificationBinaryContent(request.getGroupId(), fromUser, null, "").getQuitVisibleGroupNotifyContent();
|
WFCMessage.MessageContent content = new GroupNotificationBinaryContent(request.getGroupId(), fromUser, request.getKeepMsg()>0?"1":"0", "").getQuitVisibleGroupNotifyContent();
|
||||||
sendGroupNotification(fromUser, request.getGroupId(), request.getToLineList(), content, toUsers);
|
sendGroupNotification(fromUser, request.getGroupId(), request.getToLineList(), content, toUsers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1136,7 +1136,16 @@ public class DatabaseStore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!expired) {
|
if (!expired) {
|
||||||
messages.add(message);
|
boolean duplicated = false;
|
||||||
|
for (WFCMessage.Message msg : messages) {
|
||||||
|
if(message.getMessageId() == msg.getMessageId()) {
|
||||||
|
duplicated = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!duplicated) {
|
||||||
|
messages.add(message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2194,6 +2203,7 @@ public class DatabaseStore {
|
|||||||
", `_join_type`" +
|
", `_join_type`" +
|
||||||
", `_private_chat`" +
|
", `_private_chat`" +
|
||||||
", `_searchable`" +
|
", `_searchable`" +
|
||||||
|
", _deleted" +
|
||||||
" from t_group where `_gid` = ?";
|
" from t_group where `_gid` = ?";
|
||||||
|
|
||||||
statement = connection.prepareStatement(sql);
|
statement = connection.prepareStatement(sql);
|
||||||
@@ -2250,6 +2260,9 @@ public class DatabaseStore {
|
|||||||
intValue = rs.getInt(index++);
|
intValue = rs.getInt(index++);
|
||||||
builder.setSearchable(intValue);
|
builder.setSearchable(intValue);
|
||||||
|
|
||||||
|
intValue = rs.getInt(index++);
|
||||||
|
builder.setDeleted(intValue);
|
||||||
|
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
@@ -3758,7 +3771,11 @@ public class DatabaseStore {
|
|||||||
sql += " where `_name` = ?";
|
sql += " where `_name` = ?";
|
||||||
}
|
}
|
||||||
|
|
||||||
sql += " and _status = 0";
|
sql += " and _status <> 64";
|
||||||
|
sql += " and _status <> 16";
|
||||||
|
sql += " and _status <> 17";
|
||||||
|
sql += " and _status <> 24";
|
||||||
|
sql += " and _status <> 25";
|
||||||
|
|
||||||
sql += " limit 20";
|
sql += " limit 20";
|
||||||
|
|
||||||
|
|||||||
@@ -203,6 +203,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
private boolean mForwardMessageWithClientInfo = false;
|
private boolean mForwardMessageWithClientInfo = false;
|
||||||
private boolean mRobotCallbackWithClientInfo = false;
|
private boolean mRobotCallbackWithClientInfo = false;
|
||||||
private boolean mChannelCallbackWithClientInfo = false;
|
private boolean mChannelCallbackWithClientInfo = false;
|
||||||
|
private boolean mChannelNewCallbackFeature = true;
|
||||||
|
|
||||||
private Set<Integer> mUserHideProperties = new HashSet<>();
|
private Set<Integer> mUserHideProperties = new HashSet<>();
|
||||||
|
|
||||||
@@ -602,8 +603,12 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
try {
|
try {
|
||||||
mChannelCallbackWithClientInfo = Boolean.parseBoolean(server.getConfig().getProperty(BrokerConstants.CHANNEL_Callback_With_Client_Info, "false"));
|
mChannelCallbackWithClientInfo = Boolean.parseBoolean(server.getConfig().getProperty(BrokerConstants.CHANNEL_Callback_With_Client_Info, "false"));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
|
mChannelNewCallbackFeature = Boolean.parseBoolean(server.getConfig().getProperty(BrokerConstants.CHANNEL_New_Callback_Feature, "true"));
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
mRecallForwardUrl = server.getConfig().getProperty(BrokerConstants.MESSAGE_RecallMsg_Forward_Url);
|
mRecallForwardUrl = server.getConfig().getProperty(BrokerConstants.MESSAGE_RecallMsg_Forward_Url);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -732,7 +737,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
if (channelInfo != null) {
|
if (channelInfo != null) {
|
||||||
if (channelInfo.getOwner().equals(fromUser)) {
|
if (channelInfo.getOwner().equals(fromUser)) {
|
||||||
if(requestSourceType == ProtoConstants.RequestSourceType.Request_From_Channel
|
if(requestSourceType == ProtoConstants.RequestSourceType.Request_From_Channel
|
||||||
&& channelInfo.getAutomatic() != 0) {
|
&& channelInfo.getAutomatic() != 0 && !isChannelNewCallbackFeature()) {
|
||||||
LOG.info("Channel api message not send to the owner when automatic");
|
LOG.info("Channel api message not send to the owner when automatic");
|
||||||
} else {
|
} else {
|
||||||
notifyReceivers.add(fromUser);
|
notifyReceivers.add(fromUser);
|
||||||
@@ -762,7 +767,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
notifyReceivers.add(fromUser);
|
notifyReceivers.add(fromUser);
|
||||||
if (channelInfo.getAutomatic() == 0) {
|
if (channelInfo.getAutomatic() == 0 || isChannelNewCallbackFeature()) {
|
||||||
notifyReceivers.add(channelInfo.getOwner());
|
notifyReceivers.add(channelInfo.getOwner());
|
||||||
} else {
|
} else {
|
||||||
LOG.info("Channel api message not send to the owner when automatic");
|
LOG.info("Channel api message not send to the owner when automatic");
|
||||||
@@ -1720,8 +1725,19 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
WFCMessage.GroupMember newOwner = null;
|
WFCMessage.GroupMember newOwner = null;
|
||||||
for (WFCMessage.GroupMember member :members) {
|
for (WFCMessage.GroupMember member :members) {
|
||||||
if (!member.getMemberId().equals(operator) && member.getType() != GroupMemberType_Removed) {
|
if (!member.getMemberId().equals(operator) && member.getType() != GroupMemberType_Removed) {
|
||||||
newOwner = member;
|
if(newOwner == null) {
|
||||||
break;
|
newOwner = member;
|
||||||
|
} else {
|
||||||
|
if(newOwner.getType() == GroupMemberType_Silent && member.getType() != GroupMemberType_Silent) {
|
||||||
|
newOwner = member;
|
||||||
|
} else if(newOwner.getType() != GroupMemberType_Manager && member.getType() == GroupMemberType_Manager) {
|
||||||
|
newOwner = member;
|
||||||
|
} else if(newOwner.getType() == member.getType()) {
|
||||||
|
if(newOwner.getCreateDt() > member.getCreateDt() && member.getCreateDt() > 0) {
|
||||||
|
newOwner = member;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2088,8 +2104,11 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
for (WFCMessage.UserRequest request : requests) {
|
for (WFCMessage.UserRequest request : requests) {
|
||||||
WFCMessage.GroupInfo groupInfo = mIMap.get(request.getUid());
|
WFCMessage.GroupInfo groupInfo = mIMap.get(request.getUid());
|
||||||
if (groupInfo != null && groupInfo.getUpdateDt() > request.getUpdateDt()) {
|
if (groupInfo != null && groupInfo.getUpdateDt() > request.getUpdateDt()) {
|
||||||
if(!isAdmin && !StringUtil.isNullOrEmpty(fromUser)) {
|
if(!isAdmin && !StringUtil.isNullOrEmpty(fromUser) && groupInfo.getDeleted() == 0) {
|
||||||
WFCMessage.GroupMember gm = getGroupMember(groupInfo.getTargetId(), fromUser);
|
WFCMessage.GroupMember gm = getGroupMember(groupInfo.getTargetId(), fromUser);
|
||||||
|
if((gm == null || gm.getType() == GroupMemberType_Removed) && request.getUpdateDt() > 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if(gm == null) {
|
if(gm == null) {
|
||||||
groupInfo = groupInfo.toBuilder().setMemberUpdateDt(-1).build();
|
groupInfo = groupInfo.toBuilder().setMemberUpdateDt(-1).build();
|
||||||
} else if(gm.getType() == GroupMemberType_Removed) {
|
} else if(gm.getType() == GroupMemberType_Removed) {
|
||||||
@@ -2402,7 +2421,8 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
|
|
||||||
WFCMessage.GroupInfo groupInfo = groupMap.get(message.getConversation().getTarget());
|
WFCMessage.GroupInfo groupInfo = groupMap.get(message.getConversation().getTarget());
|
||||||
if (groupInfo == null) {
|
if (groupInfo == null) {
|
||||||
return ErrorCode.ERROR_CODE_RECALL_TIME_EXPIRED;
|
LOG.info("recall message failure, group {} not exist", message.getConversation().getTarget());
|
||||||
|
return ErrorCode.ERROR_CODE_NOT_EXIST;
|
||||||
}
|
}
|
||||||
if (operatorId.equals(groupInfo.getOwner())) {
|
if (operatorId.equals(groupInfo.getOwner())) {
|
||||||
if(operatorId.equals(message.getFromUser())) {
|
if(operatorId.equals(message.getFromUser())) {
|
||||||
@@ -2839,7 +2859,9 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
IMap<String, Integer> mUserMap = hzInstance.getMap(USER_STATUS);
|
IMap<String, Integer> mUserMap = hzInstance.getMap(USER_STATUS);
|
||||||
ArrayList<InputOutputUserBlockStatus> out = new ArrayList<>();
|
ArrayList<InputOutputUserBlockStatus> out = new ArrayList<>();
|
||||||
for (Map.Entry<String, Integer> entry : mUserMap.entrySet()) {
|
for (Map.Entry<String, Integer> entry : mUserMap.entrySet()) {
|
||||||
out.add(new InputOutputUserBlockStatus(entry.getKey(), entry.getValue()));
|
if(entry.getValue() > 0) {
|
||||||
|
out.add(new InputOutputUserBlockStatus(entry.getKey(), entry.getValue()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
@@ -4631,6 +4653,11 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
return mChannelCallbackWithClientInfo;
|
return mChannelCallbackWithClientInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isChannelNewCallbackFeature() {
|
||||||
|
return mChannelNewCallbackFeature;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isRobotAutoAcceptFriendRequest() {
|
public boolean isRobotAutoAcceptFriendRequest() {
|
||||||
return mFriendRobotAutoAccept;
|
return mFriendRobotAutoAccept;
|
||||||
|
|||||||
@@ -135,7 +135,6 @@ public class NettyAcceptor implements ServerAcceptor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.option(ChannelOption.SO_BACKLOG, 10240) // 服务端可连接队列大小
|
|
||||||
.option(ChannelOption.SO_BACKLOG, nettySoBacklog)
|
.option(ChannelOption.SO_BACKLOG, nettySoBacklog)
|
||||||
.option(ChannelOption.SO_REUSEADDR, nettySoReuseaddr)
|
.option(ChannelOption.SO_REUSEADDR, nettySoReuseaddr)
|
||||||
.childOption(ChannelOption.TCP_NODELAY, nettyTcpNodelay)
|
.childOption(ChannelOption.TCP_NODELAY, nettyTcpNodelay)
|
||||||
|
|||||||
@@ -243,6 +243,7 @@ public interface IMessagesStore {
|
|||||||
boolean isForwardMessageWithClientInfo();
|
boolean isForwardMessageWithClientInfo();
|
||||||
boolean isRobotCallbackWithClientInfo();
|
boolean isRobotCallbackWithClientInfo();
|
||||||
boolean isChannelCallbackWithClientInfo();
|
boolean isChannelCallbackWithClientInfo();
|
||||||
|
boolean isChannelNewCallbackFeature();
|
||||||
|
|
||||||
boolean isRobotAutoAcceptFriendRequest();
|
boolean isRobotAutoAcceptFriendRequest();
|
||||||
|
|
||||||
|
|||||||
@@ -668,7 +668,15 @@ public class MessagesPublisher {
|
|||||||
public void publish2Receivers(WFCMessage.Message message, Set<String> receivers, String exceptClientId, int pullType) {
|
public void publish2Receivers(WFCMessage.Message message, Set<String> receivers, String exceptClientId, int pullType) {
|
||||||
if (message.getConversation().getType() == ProtoConstants.ConversationType.ConversationType_Channel) {
|
if (message.getConversation().getType() == ProtoConstants.ConversationType.ConversationType_Channel) {
|
||||||
WFCMessage.ChannelInfo channelInfo = m_messagesStore.getChannelInfo(message.getConversation().getTarget());
|
WFCMessage.ChannelInfo channelInfo = m_messagesStore.getChannelInfo(message.getConversation().getTarget());
|
||||||
if (channelInfo != null && !StringUtil.isNullOrEmpty(channelInfo.getCallback()) && channelInfo.getAutomatic() == 1 && !message.getFromUser().equals(channelInfo.getOwner())) {
|
|
||||||
|
boolean forwardMsg;
|
||||||
|
if(m_messagesStore.isChannelNewCallbackFeature()) {
|
||||||
|
forwardMsg = channelInfo != null && !StringUtil.isNullOrEmpty(channelInfo.getCallback()) && !StringUtil.isNullOrEmpty(exceptClientId);
|
||||||
|
} else {
|
||||||
|
forwardMsg = channelInfo != null && !StringUtil.isNullOrEmpty(channelInfo.getCallback()) && channelInfo.getAutomatic() == 1 && !message.getFromUser().equals(channelInfo.getOwner());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (forwardMsg) {
|
||||||
OutputClient outputClient = null;
|
OutputClient outputClient = null;
|
||||||
if(m_messagesStore.isChannelCallbackWithClientInfo() && !StringUtil.isNullOrEmpty(exceptClientId)) {
|
if(m_messagesStore.isChannelCallbackWithClientInfo() && !StringUtil.isNullOrEmpty(exceptClientId)) {
|
||||||
Session session = m_sessionsStore.getSession(exceptClientId);
|
Session session = m_sessionsStore.getSession(exceptClientId);
|
||||||
@@ -767,7 +775,10 @@ public class MessagesPublisher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void notifyChannelListenStatusChanged(WFCMessage.ChannelInfo channelInfo, String user, boolean listen) {
|
public void notifyChannelListenStatusChanged(WFCMessage.ChannelInfo channelInfo, String user, boolean listen) {
|
||||||
if (channelInfo == null || StringUtil.isNullOrEmpty(channelInfo.getCallback()) || channelInfo.getAutomatic() == 0) {
|
if (channelInfo == null || StringUtil.isNullOrEmpty(channelInfo.getCallback())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(!m_messagesStore.isChannelNewCallbackFeature() && channelInfo.getAutomatic() == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ public class HttpUtils {
|
|||||||
if(httpCallback != null) {
|
if(httpCallback != null) {
|
||||||
int code = response.code();
|
int code = response.code();
|
||||||
if(code == 200) {
|
if(code == 200) {
|
||||||
if(response.body() != null && response.body().contentLength() > 0) {
|
if(response.body() != null) {
|
||||||
httpCallback.onSuccess(response.body().string());
|
httpCallback.onSuccess(response.body().string());
|
||||||
} else {
|
} else {
|
||||||
httpCallback.onSuccess(null);
|
httpCallback.onSuccess(null);
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>wildfirechat-parent</artifactId>
|
<artifactId>wildfirechat-parent</artifactId>
|
||||||
<groupId>cn.wildfirechat</groupId>
|
<groupId>cn.wildfirechat</groupId>
|
||||||
<version>1.2.5</version>
|
<version>1.2.8</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -17,9 +17,15 @@ public interface APIPath {
|
|||||||
String Sensitive_Del = "/admin/sensitive/del";
|
String Sensitive_Del = "/admin/sensitive/del";
|
||||||
String Sensitive_Query = "/admin/sensitive/query";
|
String Sensitive_Query = "/admin/sensitive/query";
|
||||||
|
|
||||||
|
String Create_Domain = "/admin/domain/create";
|
||||||
|
String Get_Domain = "/admin/domain/get";
|
||||||
|
String Destroy_Domain = "/admin/domain/destroy";
|
||||||
|
String List_Domain = "/admin/domain/list";
|
||||||
|
|
||||||
String Create_User = "/admin/user/create";
|
String Create_User = "/admin/user/create";
|
||||||
String Update_User = "/admin/user/update";
|
String Update_User = "/admin/user/update";
|
||||||
String Destroy_User = "/admin/user/destroy";
|
String Destroy_User = "/admin/user/destroy";
|
||||||
|
String Search_User = "/admin/user/search_user";
|
||||||
String Create_Robot = "/admin/robot/create";
|
String Create_Robot = "/admin/robot/create";
|
||||||
String CreateOrUpdate_Device = "/admin/device/create";
|
String CreateOrUpdate_Device = "/admin/device/create";
|
||||||
String Get_Device = "/admin/device/get";
|
String Get_Device = "/admin/device/get";
|
||||||
@@ -27,6 +33,7 @@ public interface APIPath {
|
|||||||
String User_Get_Token = "/admin/user/get_token";
|
String User_Get_Token = "/admin/user/get_token";
|
||||||
String User_Update_Block_Status = "/admin/user/update_block_status";
|
String User_Update_Block_Status = "/admin/user/update_block_status";
|
||||||
String User_Get_Info = "/admin/user/get_info";
|
String User_Get_Info = "/admin/user/get_info";
|
||||||
|
String User_Batch_Get_Infos = "/admin/user/batch_get_infos";
|
||||||
String User_Get_Email_Info = "/admin/user/get_info_by_email";
|
String User_Get_Email_Info = "/admin/user/get_info_by_email";
|
||||||
String User_Get_All = "/admin/user/all";
|
String User_Get_All = "/admin/user/all";
|
||||||
String User_Get_Robot_Info = "/admin/user/get_robot_info";
|
String User_Get_Robot_Info = "/admin/user/get_robot_info";
|
||||||
@@ -52,7 +59,10 @@ public interface APIPath {
|
|||||||
String Friend_Get_Requests = "/admin/friend/get_requests";
|
String Friend_Get_Requests = "/admin/friend/get_requests";
|
||||||
String Relation_Get = "/admin/relation/get";
|
String Relation_Get = "/admin/relation/get";
|
||||||
|
|
||||||
|
String Handle_Friend_Send_Request = "/admin/friend/handle_send_request";
|
||||||
|
|
||||||
String Msg_Send = "/admin/message/send";
|
String Msg_Send = "/admin/message/send";
|
||||||
|
String Msg_Publish = "/admin/message/publish";
|
||||||
String Msg_Recall = "/admin/message/recall";
|
String Msg_Recall = "/admin/message/recall";
|
||||||
String Msg_Delete = "/admin/message/delete";
|
String Msg_Delete = "/admin/message/delete";
|
||||||
String Msg_Update = "/admin/message/update";
|
String Msg_Update = "/admin/message/update";
|
||||||
@@ -70,6 +80,7 @@ public interface APIPath {
|
|||||||
String Group_Dismiss = "/admin/group/del";
|
String Group_Dismiss = "/admin/group/del";
|
||||||
String Group_Transfer = "/admin/group/transfer";
|
String Group_Transfer = "/admin/group/transfer";
|
||||||
String Group_Get_Info = "/admin/group/get_info";
|
String Group_Get_Info = "/admin/group/get_info";
|
||||||
|
String Group_Batch_Info = "/admin/group/batch_infos";
|
||||||
String Group_Modify_Info = "/admin/group/modify";
|
String Group_Modify_Info = "/admin/group/modify";
|
||||||
String Group_Member_List = "/admin/group/member/list";
|
String Group_Member_List = "/admin/group/member/list";
|
||||||
String Group_Member_Get = "/admin/group/member/get";
|
String Group_Member_Get = "/admin/group/member/get";
|
||||||
@@ -85,6 +96,10 @@ public interface APIPath {
|
|||||||
String Group_Set_Member_Extra = "/admin/group/member/set_extra";
|
String Group_Set_Member_Extra = "/admin/group/member/set_extra";
|
||||||
String Get_Common_Groups = "/admin/group/common_group";
|
String Get_Common_Groups = "/admin/group/common_group";
|
||||||
|
|
||||||
|
String Sync_Group = "/admin/mesh/group_sync";
|
||||||
|
String Conference_User_Request = "/admin/conference/user_request";
|
||||||
|
String Conference_User_Event = "/admin/conference/user_event";
|
||||||
|
|
||||||
String Create_Channel = "/admin/channel/create";
|
String Create_Channel = "/admin/channel/create";
|
||||||
String Destroy_Channel = "/admin/channel/destroy";
|
String Destroy_Channel = "/admin/channel/destroy";
|
||||||
String Get_Channel_Info = "/admin/channel/get";
|
String Get_Channel_Info = "/admin/channel/get";
|
||||||
|
|||||||
-19
@@ -1,19 +0,0 @@
|
|||||||
package cn.wildfirechat.messagecontentbuilder;
|
|
||||||
|
|
||||||
import cn.wildfirechat.pojos.MessagePayload;
|
|
||||||
|
|
||||||
abstract public class MediaMessageContentBuilder extends MessageContentBuilder{
|
|
||||||
private String remoteMediaUrl;
|
|
||||||
|
|
||||||
public MediaMessageContentBuilder remoteMediaUrl(String remoteMediaUrl) {
|
|
||||||
this.remoteMediaUrl = remoteMediaUrl;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected MessagePayload encodeBase() {
|
|
||||||
MessagePayload payload = super.encodeBase();
|
|
||||||
payload.setRemoteMediaUrl(remoteMediaUrl);
|
|
||||||
return payload;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
package cn.wildfirechat.messagecontentbuilder;
|
|
||||||
|
|
||||||
import cn.wildfirechat.pojos.MessagePayload;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public abstract class MessageContentBuilder {
|
|
||||||
private int mentionedType;
|
|
||||||
private List<String> mentionedTargets;
|
|
||||||
private String extra;
|
|
||||||
public MessageContentBuilder mentionedType(int mentionedType) {
|
|
||||||
this.mentionedType = mentionedType;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
public MessageContentBuilder mentionedTargets(List<String> mentionedTargets) {
|
|
||||||
this.mentionedTargets = mentionedTargets;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public MessageContentBuilder extra(String extra) {
|
|
||||||
this.extra = extra;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected MessagePayload encodeBase() {
|
|
||||||
MessagePayload payload = new MessagePayload();
|
|
||||||
payload.setMentionedType(mentionedType);
|
|
||||||
payload.setMentionedTarget(mentionedTargets);
|
|
||||||
payload.setExtra(extra);
|
|
||||||
return payload;
|
|
||||||
}
|
|
||||||
abstract public MessagePayload build();
|
|
||||||
}
|
|
||||||
-25
@@ -1,25 +0,0 @@
|
|||||||
package cn.wildfirechat.messagecontentbuilder;
|
|
||||||
|
|
||||||
import cn.wildfirechat.pojos.MessagePayload;
|
|
||||||
import cn.wildfirechat.proto.ProtoConstants;
|
|
||||||
import org.json.simple.JSONObject;
|
|
||||||
|
|
||||||
public class SoundMessageContentBuilder extends MediaMessageContentBuilder {
|
|
||||||
private int duration;
|
|
||||||
public static SoundMessageContentBuilder newBuilder(int duration) {
|
|
||||||
SoundMessageContentBuilder builder = new SoundMessageContentBuilder();
|
|
||||||
builder.duration = duration;
|
|
||||||
return builder;
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public MessagePayload build() {
|
|
||||||
MessagePayload payload = encodeBase();
|
|
||||||
payload.setType(ProtoConstants.ContentType.Voice);
|
|
||||||
payload.setMediaType(ProtoConstants.MessageMediaType.VOICE);
|
|
||||||
payload.setPersistFlag(ProtoConstants.PersistFlag.Persist_And_Count);
|
|
||||||
JSONObject jsonObject = new JSONObject();
|
|
||||||
jsonObject.put("duration", duration);
|
|
||||||
payload.setContent(jsonObject.toJSONString());
|
|
||||||
return payload;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-48
@@ -1,48 +0,0 @@
|
|||||||
package cn.wildfirechat.messagecontentbuilder;
|
|
||||||
|
|
||||||
import cn.wildfirechat.pojos.MessagePayload;
|
|
||||||
import cn.wildfirechat.proto.ProtoConstants;
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
|
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.util.Base64;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class StreamingTextMessageContentBuilder extends MessageContentBuilder{
|
|
||||||
private String text;
|
|
||||||
private String streamId;
|
|
||||||
private boolean generating;
|
|
||||||
public static StreamingTextMessageContentBuilder newBuilder(String streamId) {
|
|
||||||
StreamingTextMessageContentBuilder builder = new StreamingTextMessageContentBuilder();
|
|
||||||
builder.generating = false;
|
|
||||||
builder.streamId = streamId;
|
|
||||||
return builder;
|
|
||||||
}
|
|
||||||
public StreamingTextMessageContentBuilder text(String text) {
|
|
||||||
this.text = text;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public StreamingTextMessageContentBuilder generating(boolean generating) {
|
|
||||||
this.generating = generating;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public MessagePayload build() {
|
|
||||||
MessagePayload payload = encodeBase();
|
|
||||||
payload.setSearchableContent(text);
|
|
||||||
payload.setContent(streamId);
|
|
||||||
if(generating) {
|
|
||||||
//正在生成消息的类型是14,存储标记位为透传为4。
|
|
||||||
payload.setType(14);
|
|
||||||
payload.setPersistFlag(4);
|
|
||||||
} else {
|
|
||||||
//已经生成消息的类型是15,存储标记位为透传为3。
|
|
||||||
payload.setType(15);
|
|
||||||
payload.setPersistFlag(3);
|
|
||||||
}
|
|
||||||
return payload;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-21
@@ -1,21 +0,0 @@
|
|||||||
package cn.wildfirechat.messagecontentbuilder;
|
|
||||||
|
|
||||||
import cn.wildfirechat.pojos.MessagePayload;
|
|
||||||
import cn.wildfirechat.proto.ProtoConstants;
|
|
||||||
|
|
||||||
public class TextMessageContentBuilder extends MessageContentBuilder{
|
|
||||||
private String text;
|
|
||||||
public static TextMessageContentBuilder newBuilder(String text) {
|
|
||||||
TextMessageContentBuilder builder = new TextMessageContentBuilder();
|
|
||||||
builder.text = text;
|
|
||||||
return builder;
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public MessagePayload build() {
|
|
||||||
MessagePayload payload = encodeBase();
|
|
||||||
payload.setType(ProtoConstants.ContentType.Text);
|
|
||||||
payload.setPersistFlag(ProtoConstants.PersistFlag.Persist_And_Count);
|
|
||||||
payload.setSearchableContent(text);
|
|
||||||
return payload;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -15,6 +15,7 @@ public class InputGroupBase {
|
|||||||
public String operator;
|
public String operator;
|
||||||
public List<Integer> to_lines;
|
public List<Integer> to_lines;
|
||||||
public MessagePayload notify_message;
|
public MessagePayload notify_message;
|
||||||
|
private boolean isMeshMessage;
|
||||||
|
|
||||||
public String getOperator() {
|
public String getOperator() {
|
||||||
return operator;
|
return operator;
|
||||||
@@ -39,4 +40,12 @@ public class InputGroupBase {
|
|||||||
public void setNotify_message(MessagePayload notify_message) {
|
public void setNotify_message(MessagePayload notify_message) {
|
||||||
this.notify_message = notify_message;
|
this.notify_message = notify_message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isMeshMessage() {
|
||||||
|
return isMeshMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMeshMessage(boolean meshMessage) {
|
||||||
|
isMeshMessage = meshMessage;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Wildfire Chat package.
|
||||||
|
* (c) Heavyrain2012 <heavyrain.lee@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cn.wildfirechat.pojos;
|
||||||
|
|
||||||
|
|
||||||
|
public class InputHandleFriendRequest {
|
||||||
|
private String userId;
|
||||||
|
private String friendUid;
|
||||||
|
private int status;
|
||||||
|
private boolean force;
|
||||||
|
|
||||||
|
|
||||||
|
public String getUserId() {
|
||||||
|
return userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserId(String userId) {
|
||||||
|
this.userId = userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFriendUid() {
|
||||||
|
return friendUid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFriendUid(String friendUid) {
|
||||||
|
this.friendUid = friendUid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(int status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isForce() {
|
||||||
|
return force;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setForce(boolean force) {
|
||||||
|
this.force = force;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package cn.wildfirechat.pojos;
|
||||||
|
|
||||||
|
public class InputIntValue {
|
||||||
|
public int value;
|
||||||
|
|
||||||
|
public int getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(int value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,85 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Wildfire Chat package.
|
||||||
|
* (c) Heavyrain2012 <heavyrain.lee@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cn.wildfirechat.pojos;
|
||||||
|
|
||||||
|
|
||||||
|
public class InputOutputDomainInfo {
|
||||||
|
public String domainId;
|
||||||
|
public String name;
|
||||||
|
public String desc;
|
||||||
|
public String email;
|
||||||
|
public String tel;
|
||||||
|
public String address;
|
||||||
|
public String extra;
|
||||||
|
public long dt;
|
||||||
|
|
||||||
|
public String getDomainId() {
|
||||||
|
return domainId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDomainId(String domainId) {
|
||||||
|
this.domainId = domainId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDesc() {
|
||||||
|
return desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDesc(String desc) {
|
||||||
|
this.desc = desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEmail() {
|
||||||
|
return email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEmail(String email) {
|
||||||
|
this.email = email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTel() {
|
||||||
|
return tel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTel(String tel) {
|
||||||
|
this.tel = tel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAddress() {
|
||||||
|
return address;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAddress(String address) {
|
||||||
|
this.address = address;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getExtra() {
|
||||||
|
return extra;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExtra(String extra) {
|
||||||
|
this.extra = extra;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getDt() {
|
||||||
|
return dt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDt(long dt) {
|
||||||
|
this.dt = dt;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Wildfire Chat package.
|
||||||
|
* (c) Heavyrain2012 <heavyrain.lee@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cn.wildfirechat.pojos;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class InputOutputDomainInfoList {
|
||||||
|
public List<InputOutputDomainInfo> infos;
|
||||||
|
|
||||||
|
public List<InputOutputDomainInfo> getInfos() {
|
||||||
|
return infos;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInfos(List<InputOutputDomainInfo> infos) {
|
||||||
|
this.infos = infos;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package cn.wildfirechat.pojos;
|
||||||
|
|
||||||
|
public class InputStringValue {
|
||||||
|
public String value;
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(String value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,6 +14,7 @@ public class PojoGroupInfo {
|
|||||||
String portrait;
|
String portrait;
|
||||||
String owner;
|
String owner;
|
||||||
int type;
|
int type;
|
||||||
|
int member_count;
|
||||||
String extra;
|
String extra;
|
||||||
int mute;
|
int mute;
|
||||||
int join_type;
|
int join_type;
|
||||||
@@ -23,6 +24,8 @@ public class PojoGroupInfo {
|
|||||||
int history_message;
|
int history_message;
|
||||||
boolean super_group;
|
boolean super_group;
|
||||||
boolean deleted;
|
boolean deleted;
|
||||||
|
long update_dt;
|
||||||
|
long member_update_dt;
|
||||||
|
|
||||||
public String getTarget_id() {
|
public String getTarget_id() {
|
||||||
return target_id;
|
return target_id;
|
||||||
@@ -135,4 +138,28 @@ public class PojoGroupInfo {
|
|||||||
public void setDeleted(boolean deleted) {
|
public void setDeleted(boolean deleted) {
|
||||||
this.deleted = deleted;
|
this.deleted = deleted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public long getUpdate_dt() {
|
||||||
|
return update_dt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUpdate_dt(long update_dt) {
|
||||||
|
this.update_dt = update_dt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMember_count() {
|
||||||
|
return member_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMember_count(int member_count) {
|
||||||
|
this.member_count = member_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getMember_update_dt() {
|
||||||
|
return member_update_dt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMember_update_dt(long member_update_dt) {
|
||||||
|
this.member_update_dt = member_update_dt;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Wildfire Chat package.
|
||||||
|
* (c) Heavyrain2012 <heavyrain.lee@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cn.wildfirechat.pojos;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class PojoGroupInfoList {
|
||||||
|
public List<PojoGroupInfo> groupInfoList;
|
||||||
|
|
||||||
|
public List<PojoGroupInfo> getGroupInfoList() {
|
||||||
|
return groupInfoList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroupInfoList(List<PojoGroupInfo> groupInfoList) {
|
||||||
|
this.groupInfoList = groupInfoList;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,6 +13,7 @@ public class PojoGroupMember {
|
|||||||
String alias;
|
String alias;
|
||||||
int type;
|
int type;
|
||||||
String extra;
|
String extra;
|
||||||
|
long updateDt;
|
||||||
long createDt;
|
long createDt;
|
||||||
|
|
||||||
public String getMember_id() {
|
public String getMember_id() {
|
||||||
@@ -47,6 +48,14 @@ public class PojoGroupMember {
|
|||||||
this.extra = extra;
|
this.extra = extra;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public long getUpdateDt() {
|
||||||
|
return updateDt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUpdateDt(long updateDt) {
|
||||||
|
this.updateDt = updateDt;
|
||||||
|
}
|
||||||
|
|
||||||
public long getCreateDt() {
|
public long getCreateDt() {
|
||||||
return createDt;
|
return createDt;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import io.netty.util.internal.StringUtil;
|
|||||||
public class RecallMessageData {
|
public class RecallMessageData {
|
||||||
private String operator;
|
private String operator;
|
||||||
private long messageUid;
|
private long messageUid;
|
||||||
|
private boolean isUserRecall;
|
||||||
|
|
||||||
public String getOperator() {
|
public String getOperator() {
|
||||||
return operator;
|
return operator;
|
||||||
@@ -30,4 +31,12 @@ public class RecallMessageData {
|
|||||||
public void setMessageUid(long messageUid) {
|
public void setMessageUid(long messageUid) {
|
||||||
this.messageUid = messageUid;
|
this.messageUid = messageUid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isUserRecall() {
|
||||||
|
return isUserRecall;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserRecall(boolean userRecall) {
|
||||||
|
isUserRecall = userRecall;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ public class SendMessageData {
|
|||||||
private Conversation conv;
|
private Conversation conv;
|
||||||
private MessagePayload payload;
|
private MessagePayload payload;
|
||||||
private List<String> toUsers;
|
private List<String> toUsers;
|
||||||
|
private boolean isMeshMessage;
|
||||||
|
|
||||||
public String getSender() {
|
public String getSender() {
|
||||||
return sender;
|
return sender;
|
||||||
@@ -52,6 +53,14 @@ public class SendMessageData {
|
|||||||
this.toUsers = toUsers;
|
this.toUsers = toUsers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isMeshMessage() {
|
||||||
|
return isMeshMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMeshMessage(boolean meshMessage) {
|
||||||
|
isMeshMessage = meshMessage;
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean isValide(SendMessageData sendMessageData) {
|
public static boolean isValide(SendMessageData sendMessageData) {
|
||||||
if(sendMessageData == null ||
|
if(sendMessageData == null ||
|
||||||
sendMessageData.getConv() == null ||
|
sendMessageData.getConv() == null ||
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ public class UpdateMessageContentData {
|
|||||||
private MessagePayload payload;
|
private MessagePayload payload;
|
||||||
private int distribute;
|
private int distribute;
|
||||||
private int updateTimestamp;
|
private int updateTimestamp;
|
||||||
|
private int meshLocal;
|
||||||
|
|
||||||
public String getOperator() {
|
public String getOperator() {
|
||||||
return operator;
|
return operator;
|
||||||
@@ -54,4 +55,12 @@ public class UpdateMessageContentData {
|
|||||||
public void setUpdateTimestamp(int updateTimestamp) {
|
public void setUpdateTimestamp(int updateTimestamp) {
|
||||||
this.updateTimestamp = updateTimestamp;
|
this.updateTimestamp = updateTimestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getMeshLocal() {
|
||||||
|
return meshLocal;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMeshLocal(int meshLocal) {
|
||||||
|
this.meshLocal = meshLocal;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,139 @@
|
|||||||
|
package cn.wildfirechat.pojos.mesh;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
|
||||||
|
public class MeshRestResult<T> {
|
||||||
|
private static Gson gson = new Gson();
|
||||||
|
public enum MeshRestCode {
|
||||||
|
SUCCESS(0, "success"),
|
||||||
|
ERROR_INVALID_MOBILE(1, "无效的电话号码"),
|
||||||
|
ERROR_SEND_SMS_OVER_FREQUENCY(3, "请求验证码太频繁"),
|
||||||
|
ERROR_SERVER_ERROR(4, "服务器异常"),
|
||||||
|
ERROR_CODE_EXPIRED(5, "验证码已过期"),
|
||||||
|
ERROR_CODE_INCORRECT(6, "验证码或密码错误"),
|
||||||
|
ERROR_SERVER_CONFIG_ERROR(7, "服务器配置错误"),
|
||||||
|
ERROR_SESSION_EXPIRED(8, "会话不存在或已过期"),
|
||||||
|
ERROR_SESSION_NOT_VERIFIED(9, "会话没有验证"),
|
||||||
|
ERROR_SESSION_NOT_SCANED(10, "会话没有被扫码"),
|
||||||
|
ERROR_SERVER_NOT_IMPLEMENT(11, "功能没有实现"),
|
||||||
|
ERROR_GROUP_ANNOUNCEMENT_NOT_EXIST(12, "群公告不存在"),
|
||||||
|
ERROR_NOT_LOGIN(13, "没有登录"),
|
||||||
|
ERROR_NO_RIGHT(14, "没有权限"),
|
||||||
|
ERROR_INVALID_PARAMETER(15, "无效参数"),
|
||||||
|
ERROR_NOT_EXIST(16, "对象不存在"),
|
||||||
|
ERROR_USER_NAME_ALREADY_EXIST(17, "用户名已经存在"),
|
||||||
|
ERROR_SESSION_CANCELED(18, "会话已经取消"),
|
||||||
|
ERROR_PASSWORD_INCORRECT(19, "密码错误"),
|
||||||
|
ERROR_FAILURE_TOO_MUCH_TIMES(20, "密码错误次数太多,请等5分钟再试试"),
|
||||||
|
ERROR_USER_FORBIDDEN(21, "用户被封禁");
|
||||||
|
public int code;
|
||||||
|
public String msg;
|
||||||
|
|
||||||
|
MeshRestCode(int code, String msg) {
|
||||||
|
this.code = code;
|
||||||
|
this.msg = msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
private int remote_im_code;
|
||||||
|
private int remote_mesh_code;
|
||||||
|
private int local_mesh_code;
|
||||||
|
private String error_message;
|
||||||
|
private T result;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return gson.toJson(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MeshRestResult ok() {
|
||||||
|
return new MeshRestResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MeshRestResult ok(Object object) {
|
||||||
|
return new MeshRestResult(object);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MeshRestResult remoteIMError(int code, String message) {
|
||||||
|
MeshRestResult r = new MeshRestResult();
|
||||||
|
r.remote_im_code = code;
|
||||||
|
r.error_message = message;
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MeshRestResult remoteMeshError(int code, String message) {
|
||||||
|
MeshRestResult r = new MeshRestResult();
|
||||||
|
r.remote_mesh_code = code;
|
||||||
|
r.error_message = message;
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MeshRestResult addRemoteMeshError(int code, String message) {
|
||||||
|
MeshRestResult r = new MeshRestResult();
|
||||||
|
remote_mesh_code = code;
|
||||||
|
error_message = message;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MeshRestResult localMeshError(int code, String message) {
|
||||||
|
MeshRestResult r = new MeshRestResult();
|
||||||
|
r.local_mesh_code = code;
|
||||||
|
r.error_message = message;
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MeshRestResult addLocalMeshError(int code, String message) {
|
||||||
|
local_mesh_code = code;
|
||||||
|
error_message = message;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public MeshRestResult() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public MeshRestResult(T object) {
|
||||||
|
result = object;
|
||||||
|
}
|
||||||
|
|
||||||
|
public T getResult() {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setResult(T result) {
|
||||||
|
this.result = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRemote_im_code() {
|
||||||
|
return remote_im_code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRemote_im_code(int remote_im_code) {
|
||||||
|
this.remote_im_code = remote_im_code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRemote_mesh_code() {
|
||||||
|
return remote_mesh_code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRemote_mesh_code(int remote_mesh_code) {
|
||||||
|
this.remote_mesh_code = remote_mesh_code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getLocal_mesh_code() {
|
||||||
|
return local_mesh_code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLocal_mesh_code(int local_mesh_code) {
|
||||||
|
this.local_mesh_code = local_mesh_code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getError_message() {
|
||||||
|
return error_message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setError_message(String error_message) {
|
||||||
|
this.error_message = error_message;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package cn.wildfirechat.pojos.mesh;
|
||||||
|
|
||||||
|
public class PojoAddFriendReq {
|
||||||
|
public String fromUserId;
|
||||||
|
public String reason;
|
||||||
|
public String targetUserId;
|
||||||
|
public String domainId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
package cn.wildfirechat.pojos.mesh;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.PojoGroupMember;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class PojoAddGroupMember {
|
||||||
|
public String domainId;
|
||||||
|
public String operator;
|
||||||
|
public String group_id;
|
||||||
|
public List<PojoGroupMember> members;
|
||||||
|
|
||||||
|
public String getOperator() {
|
||||||
|
return operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOperator(String operator) {
|
||||||
|
this.operator = operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGroup_id() {
|
||||||
|
return group_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroup_id(String group_id) {
|
||||||
|
this.group_id = group_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PojoGroupMember> getMembers() {
|
||||||
|
return members;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMembers(List<PojoGroupMember> members) {
|
||||||
|
this.members = members;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDomainId() {
|
||||||
|
return domainId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDomainId(String domainId) {
|
||||||
|
this.domainId = domainId;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package cn.wildfirechat.pojos.mesh;
|
||||||
|
|
||||||
|
public class PojoDeleteFriend {
|
||||||
|
public String domainId;
|
||||||
|
public String operator;
|
||||||
|
public String friendUid;
|
||||||
|
|
||||||
|
public String getOperator() {
|
||||||
|
return operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOperator(String operator) {
|
||||||
|
this.operator = operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFriendUid() {
|
||||||
|
return friendUid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFriendUid(String friendUid) {
|
||||||
|
this.friendUid = friendUid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDomainId() {
|
||||||
|
return domainId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDomainId(String domainId) {
|
||||||
|
this.domainId = domainId;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package cn.wildfirechat.pojos.mesh;
|
||||||
|
|
||||||
|
public class PojoDismissGroup {
|
||||||
|
public String domainId;
|
||||||
|
public String operator;
|
||||||
|
public String group_id;
|
||||||
|
|
||||||
|
public String getOperator() {
|
||||||
|
return operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOperator(String operator) {
|
||||||
|
this.operator = operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGroup_id() {
|
||||||
|
return group_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroup_id(String group_id) {
|
||||||
|
this.group_id = group_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDomainId() {
|
||||||
|
return domainId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDomainId(String domainId) {
|
||||||
|
this.domainId = domainId;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package cn.wildfirechat.pojos.mesh;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.PojoGroupInfo;
|
||||||
|
import cn.wildfirechat.pojos.PojoGroupMember;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class PojoGroupUpdated {
|
||||||
|
public List<String> domainIds;
|
||||||
|
public PojoGroupInfo groupInfo;
|
||||||
|
public List<PojoGroupMember> members;
|
||||||
|
|
||||||
|
public List<String> getDomainIds() {
|
||||||
|
return domainIds;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDomainIds(List<String> domainIds) {
|
||||||
|
this.domainIds = domainIds;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PojoGroupInfo getGroupInfo() {
|
||||||
|
return groupInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroupInfo(PojoGroupInfo groupInfo) {
|
||||||
|
this.groupInfo = groupInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<PojoGroupMember> getMembers() {
|
||||||
|
return members;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMembers(List<PojoGroupMember> members) {
|
||||||
|
this.members = members;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package cn.wildfirechat.pojos.mesh;
|
||||||
|
|
||||||
|
public class PojoHandleFriendRequestReq {
|
||||||
|
public String userId;
|
||||||
|
public int status;
|
||||||
|
public String targetUserId;
|
||||||
|
public String domainId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package cn.wildfirechat.pojos.mesh;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class PojoKickoffGroupMember {
|
||||||
|
public String domainId;
|
||||||
|
public String operator;
|
||||||
|
public String group_id;
|
||||||
|
public List<String> members;
|
||||||
|
|
||||||
|
public String getOperator() {
|
||||||
|
return operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOperator(String operator) {
|
||||||
|
this.operator = operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGroup_id() {
|
||||||
|
return group_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroup_id(String group_id) {
|
||||||
|
this.group_id = group_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDomainId() {
|
||||||
|
return domainId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDomainId(String domainId) {
|
||||||
|
this.domainId = domainId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getMembers() {
|
||||||
|
return members;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMembers(List<String> members) {
|
||||||
|
this.members = members;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package cn.wildfirechat.pojos.mesh;
|
||||||
|
|
||||||
|
public class PojoModifyGroupInfo {
|
||||||
|
public String domainId;
|
||||||
|
public String operator;
|
||||||
|
public String group_id;
|
||||||
|
public int type;
|
||||||
|
public String value;
|
||||||
|
|
||||||
|
public String getDomainId() {
|
||||||
|
return domainId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDomainId(String domainId) {
|
||||||
|
this.domainId = domainId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOperator() {
|
||||||
|
return operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOperator(String operator) {
|
||||||
|
this.operator = operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGroup_id() {
|
||||||
|
return group_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroup_id(String group_id) {
|
||||||
|
this.group_id = group_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(int type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(String value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package cn.wildfirechat.pojos.mesh;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.SendMessageData;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class PojoPublishMessageReq {
|
||||||
|
public SendMessageData messageData;
|
||||||
|
public List<String> receivers;
|
||||||
|
public String domainId;
|
||||||
|
public long messageId;
|
||||||
|
public boolean republish;
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package cn.wildfirechat.pojos.mesh;
|
||||||
|
|
||||||
|
public class PojoQuitGroup {
|
||||||
|
public String domainId;
|
||||||
|
public String operator;
|
||||||
|
public String group_id;
|
||||||
|
|
||||||
|
public String getOperator() {
|
||||||
|
return operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOperator(String operator) {
|
||||||
|
this.operator = operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGroup_id() {
|
||||||
|
return group_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroup_id(String group_id) {
|
||||||
|
this.group_id = group_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDomainId() {
|
||||||
|
return domainId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDomainId(String domainId) {
|
||||||
|
this.domainId = domainId;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package cn.wildfirechat.pojos.mesh;
|
||||||
|
|
||||||
|
public class PojoRecallMessageReq {
|
||||||
|
public String domainId;
|
||||||
|
public long messageId;
|
||||||
|
public String operator;
|
||||||
|
public boolean isSenderRecall;
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
package cn.wildfirechat.pojos.mesh;
|
||||||
|
|
||||||
|
public class PojoSearchUserReq {
|
||||||
|
public String keyword;
|
||||||
|
public int searchType;
|
||||||
|
public int page;
|
||||||
|
public String domainId;
|
||||||
|
|
||||||
|
public String getKeyword() {
|
||||||
|
return keyword;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKeyword(String keyword) {
|
||||||
|
this.keyword = keyword;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSearchType() {
|
||||||
|
return searchType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSearchType(int searchType) {
|
||||||
|
this.searchType = searchType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPage() {
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPage(int page) {
|
||||||
|
this.page = page;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDomainId() {
|
||||||
|
return domainId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDomainId(String domainId) {
|
||||||
|
this.domainId = domainId;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package cn.wildfirechat.pojos.mesh;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.InputOutputUserInfo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class PojoSearchUserRes {
|
||||||
|
public List<InputOutputUserInfo> userInfos;
|
||||||
|
public String keyword;
|
||||||
|
|
||||||
|
public List<InputOutputUserInfo> getUserInfos() {
|
||||||
|
return userInfos;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserInfos(List<InputOutputUserInfo> userInfos) {
|
||||||
|
this.userInfos = userInfos;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getKeyword() {
|
||||||
|
return keyword;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setKeyword(String keyword) {
|
||||||
|
this.keyword = keyword;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package cn.wildfirechat.pojos.mesh;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.SendMessageData;
|
||||||
|
|
||||||
|
public class PojoSendMessageReq {
|
||||||
|
public SendMessageData messageData;
|
||||||
|
public String clientId;
|
||||||
|
public String domainId;
|
||||||
|
public long messageId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package cn.wildfirechat.pojos.mesh;
|
||||||
|
|
||||||
|
public class PojoString {
|
||||||
|
public String domainId;
|
||||||
|
public String string;
|
||||||
|
|
||||||
|
public String getString() {
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setString(String string) {
|
||||||
|
this.string = string;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDomainId() {
|
||||||
|
return domainId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDomainId(String domainId) {
|
||||||
|
this.domainId = domainId;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package cn.wildfirechat.pojos.mesh;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class PojoStringList {
|
||||||
|
public String domainId;
|
||||||
|
public List<String> stringList;
|
||||||
|
|
||||||
|
public List<String> getStringList() {
|
||||||
|
return stringList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStringList(List<String> stringList) {
|
||||||
|
this.stringList = stringList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDomainId() {
|
||||||
|
return domainId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDomainId(String domainId) {
|
||||||
|
this.domainId = domainId;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
package cn.wildfirechat.pojos.mesh;
|
||||||
|
|
||||||
|
public class PojoTransferGroup {
|
||||||
|
public String domainId;
|
||||||
|
public String operator;
|
||||||
|
public String newOwner;
|
||||||
|
public String group_id;
|
||||||
|
|
||||||
|
public String getOperator() {
|
||||||
|
return operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOperator(String operator) {
|
||||||
|
this.operator = operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getGroup_id() {
|
||||||
|
return group_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGroup_id(String group_id) {
|
||||||
|
this.group_id = group_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNewOwner() {
|
||||||
|
return newOwner;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewOwner(String newOwner) {
|
||||||
|
this.newOwner = newOwner;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDomainId() {
|
||||||
|
return domainId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDomainId(String domainId) {
|
||||||
|
this.domainId = domainId;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package cn.wildfirechat.pojos.mesh;
|
||||||
|
|
||||||
|
public class PojoUserConferenceEvent {
|
||||||
|
public String domainId;
|
||||||
|
public String data;
|
||||||
|
public String userId;
|
||||||
|
public String clientId;
|
||||||
|
public boolean isRobot;
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package cn.wildfirechat.pojos.mesh;
|
||||||
|
|
||||||
|
public class PojoUserConferenceRequest {
|
||||||
|
public String domainId;
|
||||||
|
public String clientID;
|
||||||
|
public String fromUser;
|
||||||
|
public String request;
|
||||||
|
public long sessionId;
|
||||||
|
public String roomId;
|
||||||
|
public String data;
|
||||||
|
public boolean advanced;
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
package cn.wildfirechat.pojos.mesh;
|
||||||
|
|
||||||
|
public class PojoUserConferenceResponse {
|
||||||
|
public String data;
|
||||||
|
}
|
||||||
@@ -97,6 +97,10 @@ public class ProtoConstants {
|
|||||||
int Composited = 11;
|
int Composited = 11;
|
||||||
int Rich_Notification = 12;
|
int Rich_Notification = 12;
|
||||||
int Articles = 13;
|
int Articles = 13;
|
||||||
|
int StreamingText_Generationg = 14;
|
||||||
|
int StreamingText_Generated = 15;
|
||||||
|
int Not_Delivered = 16;
|
||||||
|
int Ptt_Voice = 23;
|
||||||
int Enter_Channel_Chat = 71;
|
int Enter_Channel_Chat = 71;
|
||||||
int Leave_Channel_Chat = 72;
|
int Leave_Channel_Chat = 72;
|
||||||
int Recall = 80;
|
int Recall = 80;
|
||||||
@@ -126,6 +130,12 @@ public class ProtoConstants {
|
|||||||
int Quit_Group_Visible_Notification = 121;
|
int Quit_Group_Visible_Notification = 121;
|
||||||
int Modify_Group_Extra = 122;
|
int Modify_Group_Extra = 122;
|
||||||
int Modify_Group_Member_Extra = 123;
|
int Modify_Group_Member_Extra = 123;
|
||||||
|
|
||||||
|
int Call_Start = 400;
|
||||||
|
int Call_Accept = 401;
|
||||||
|
int Call_End = 402;
|
||||||
|
int Call_Add_Participant = 406;
|
||||||
|
int Call_Multi_Call_Ongoing = 416;
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface MessagePersistFlag {
|
public interface MessagePersistFlag {
|
||||||
|
|||||||
@@ -41874,6 +41874,16 @@ public final class WFCMessage {
|
|||||||
* <code>optional .MessageContent notify_content = 3;</code>
|
* <code>optional .MessageContent notify_content = 3;</code>
|
||||||
*/
|
*/
|
||||||
cn.wildfirechat.proto.WFCMessage.MessageContentOrBuilder getNotifyContentOrBuilder();
|
cn.wildfirechat.proto.WFCMessage.MessageContentOrBuilder getNotifyContentOrBuilder();
|
||||||
|
|
||||||
|
// optional int32 keep_msg = 4;
|
||||||
|
/**
|
||||||
|
* <code>optional int32 keep_msg = 4;</code>
|
||||||
|
*/
|
||||||
|
boolean hasKeepMsg();
|
||||||
|
/**
|
||||||
|
* <code>optional int32 keep_msg = 4;</code>
|
||||||
|
*/
|
||||||
|
int getKeepMsg();
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Protobuf type {@code QuitGroupRequest}
|
* Protobuf type {@code QuitGroupRequest}
|
||||||
@@ -41965,6 +41975,11 @@ public final class WFCMessage {
|
|||||||
bitField0_ |= 0x00000002;
|
bitField0_ |= 0x00000002;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 32: {
|
||||||
|
bitField0_ |= 0x00000004;
|
||||||
|
keepMsg_ = input.readInt32();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
|
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
|
||||||
@@ -42096,10 +42111,27 @@ public final class WFCMessage {
|
|||||||
return notifyContent_;
|
return notifyContent_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// optional int32 keep_msg = 4;
|
||||||
|
public static final int KEEP_MSG_FIELD_NUMBER = 4;
|
||||||
|
private int keepMsg_;
|
||||||
|
/**
|
||||||
|
* <code>optional int32 keep_msg = 4;</code>
|
||||||
|
*/
|
||||||
|
public boolean hasKeepMsg() {
|
||||||
|
return ((bitField0_ & 0x00000004) == 0x00000004);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional int32 keep_msg = 4;</code>
|
||||||
|
*/
|
||||||
|
public int getKeepMsg() {
|
||||||
|
return keepMsg_;
|
||||||
|
}
|
||||||
|
|
||||||
private void initFields() {
|
private void initFields() {
|
||||||
groupId_ = "";
|
groupId_ = "";
|
||||||
toLine_ = java.util.Collections.emptyList();
|
toLine_ = java.util.Collections.emptyList();
|
||||||
notifyContent_ = cn.wildfirechat.proto.WFCMessage.MessageContent.getDefaultInstance();
|
notifyContent_ = cn.wildfirechat.proto.WFCMessage.MessageContent.getDefaultInstance();
|
||||||
|
keepMsg_ = 0;
|
||||||
}
|
}
|
||||||
private byte memoizedIsInitialized = -1;
|
private byte memoizedIsInitialized = -1;
|
||||||
public final boolean isInitialized() {
|
public final boolean isInitialized() {
|
||||||
@@ -42132,6 +42164,9 @@ public final class WFCMessage {
|
|||||||
if (((bitField0_ & 0x00000002) == 0x00000002)) {
|
if (((bitField0_ & 0x00000002) == 0x00000002)) {
|
||||||
output.writeMessage(3, notifyContent_);
|
output.writeMessage(3, notifyContent_);
|
||||||
}
|
}
|
||||||
|
if (((bitField0_ & 0x00000004) == 0x00000004)) {
|
||||||
|
output.writeInt32(4, keepMsg_);
|
||||||
|
}
|
||||||
getUnknownFields().writeTo(output);
|
getUnknownFields().writeTo(output);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42158,6 +42193,10 @@ public final class WFCMessage {
|
|||||||
size += com.google.protobuf.CodedOutputStream
|
size += com.google.protobuf.CodedOutputStream
|
||||||
.computeMessageSize(3, notifyContent_);
|
.computeMessageSize(3, notifyContent_);
|
||||||
}
|
}
|
||||||
|
if (((bitField0_ & 0x00000004) == 0x00000004)) {
|
||||||
|
size += com.google.protobuf.CodedOutputStream
|
||||||
|
.computeInt32Size(4, keepMsg_);
|
||||||
|
}
|
||||||
size += getUnknownFields().getSerializedSize();
|
size += getUnknownFields().getSerializedSize();
|
||||||
memoizedSerializedSize = size;
|
memoizedSerializedSize = size;
|
||||||
return size;
|
return size;
|
||||||
@@ -42285,6 +42324,8 @@ public final class WFCMessage {
|
|||||||
notifyContentBuilder_.clear();
|
notifyContentBuilder_.clear();
|
||||||
}
|
}
|
||||||
bitField0_ = (bitField0_ & ~0x00000004);
|
bitField0_ = (bitField0_ & ~0x00000004);
|
||||||
|
keepMsg_ = 0;
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000008);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42330,6 +42371,10 @@ public final class WFCMessage {
|
|||||||
} else {
|
} else {
|
||||||
result.notifyContent_ = notifyContentBuilder_.build();
|
result.notifyContent_ = notifyContentBuilder_.build();
|
||||||
}
|
}
|
||||||
|
if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
|
||||||
|
to_bitField0_ |= 0x00000004;
|
||||||
|
}
|
||||||
|
result.keepMsg_ = keepMsg_;
|
||||||
result.bitField0_ = to_bitField0_;
|
result.bitField0_ = to_bitField0_;
|
||||||
onBuilt();
|
onBuilt();
|
||||||
return result;
|
return result;
|
||||||
@@ -42364,6 +42409,9 @@ public final class WFCMessage {
|
|||||||
if (other.hasNotifyContent()) {
|
if (other.hasNotifyContent()) {
|
||||||
mergeNotifyContent(other.getNotifyContent());
|
mergeNotifyContent(other.getNotifyContent());
|
||||||
}
|
}
|
||||||
|
if (other.hasKeepMsg()) {
|
||||||
|
setKeepMsg(other.getKeepMsg());
|
||||||
|
}
|
||||||
this.mergeUnknownFields(other.getUnknownFields());
|
this.mergeUnknownFields(other.getUnknownFields());
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
@@ -42658,6 +42706,39 @@ public final class WFCMessage {
|
|||||||
return notifyContentBuilder_;
|
return notifyContentBuilder_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// optional int32 keep_msg = 4;
|
||||||
|
private int keepMsg_ ;
|
||||||
|
/**
|
||||||
|
* <code>optional int32 keep_msg = 4;</code>
|
||||||
|
*/
|
||||||
|
public boolean hasKeepMsg() {
|
||||||
|
return ((bitField0_ & 0x00000008) == 0x00000008);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional int32 keep_msg = 4;</code>
|
||||||
|
*/
|
||||||
|
public int getKeepMsg() {
|
||||||
|
return keepMsg_;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional int32 keep_msg = 4;</code>
|
||||||
|
*/
|
||||||
|
public Builder setKeepMsg(int value) {
|
||||||
|
bitField0_ |= 0x00000008;
|
||||||
|
keepMsg_ = value;
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional int32 keep_msg = 4;</code>
|
||||||
|
*/
|
||||||
|
public Builder clearKeepMsg() {
|
||||||
|
bitField0_ = (bitField0_ & ~0x00000008);
|
||||||
|
keepMsg_ = 0;
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
// @@protoc_insertion_point(builder_scope:QuitGroupRequest)
|
// @@protoc_insertion_point(builder_scope:QuitGroupRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67490,76 +67571,77 @@ public final class WFCMessage {
|
|||||||
"\003\"0\n\017PullUserRequest\022\035\n\007request\030\001 \003(\0132\014." +
|
"\003\"0\n\017PullUserRequest\022\035\n\007request\030\001 \003(\0132\014." +
|
||||||
"UserRequest\"/\n\nUserResult\022\023\n\004user\030\001 \002(\0132" +
|
"UserRequest\"/\n\nUserResult\022\023\n\004user\030\001 \002(\0132" +
|
||||||
"\005.User\022\014\n\004code\030\002 \002(\005\"-\n\016PullUserResult\022\033" +
|
"\005.User\022\014\n\004code\030\002 \002(\005\"-\n\016PullUserResult\022\033" +
|
||||||
"\n\006result\030\001 \003(\0132\013.UserResult\"^\n\020QuitGroup" +
|
"\n\006result\030\001 \003(\0132\013.UserResult\"p\n\020QuitGroup" +
|
||||||
"Request\022\020\n\010group_id\030\001 \002(\t\022\017\n\007to_line\030\002 \003",
|
"Request\022\020\n\010group_id\030\001 \002(\t\022\017\n\007to_line\030\002 \003",
|
||||||
"(\005\022\'\n\016notify_content\030\003 \001(\0132\017.MessageCont" +
|
"(\005\022\'\n\016notify_content\030\003 \001(\0132\017.MessageCont" +
|
||||||
"ent\"~\n\030RemoveGroupMemberRequest\022\020\n\010group" +
|
"ent\022\020\n\010keep_msg\030\004 \001(\005\"~\n\030RemoveGroupMemb" +
|
||||||
"_id\030\001 \002(\t\022\026\n\016removed_member\030\002 \003(\t\022\017\n\007to_" +
|
"erRequest\022\020\n\010group_id\030\001 \002(\t\022\026\n\016removed_m" +
|
||||||
"line\030\003 \003(\005\022\'\n\016notify_content\030\004 \001(\0132\017.Mes" +
|
"ember\030\002 \003(\t\022\017\n\007to_line\030\003 \003(\005\022\'\n\016notify_c" +
|
||||||
"sageContent\"u\n\024TransferGroupRequest\022\020\n\010g" +
|
"ontent\030\004 \001(\0132\017.MessageContent\"u\n\024Transfe" +
|
||||||
"roup_id\030\001 \002(\t\022\021\n\tnew_owner\030\002 \002(\t\022\017\n\007to_l" +
|
"rGroupRequest\022\020\n\010group_id\030\001 \002(\t\022\021\n\tnew_o" +
|
||||||
"ine\030\003 \003(\005\022\'\n\016notify_content\030\004 \001(\0132\017.Mess" +
|
"wner\030\002 \002(\t\022\017\n\007to_line\030\003 \003(\005\022\'\n\016notify_co" +
|
||||||
"ageContent\"\206\001\n\026ModifyGroupMemberAlias\022\020\n" +
|
"ntent\030\004 \001(\0132\017.MessageContent\"\206\001\n\026ModifyG" +
|
||||||
"\010group_id\030\001 \002(\t\022\r\n\005alias\030\002 \002(\t\022\017\n\007to_lin" +
|
"roupMemberAlias\022\020\n\010group_id\030\001 \002(\t\022\r\n\005ali" +
|
||||||
"e\030\003 \003(\005\022\'\n\016notify_content\030\004 \001(\0132\017.Messag",
|
"as\030\002 \002(\t\022\017\n\007to_line\030\003 \003(\005\022\'\n\016notify_cont",
|
||||||
"eContent\022\021\n\tmember_id\030\005 \001(\t\"\206\001\n\026ModifyGr" +
|
"ent\030\004 \001(\0132\017.MessageContent\022\021\n\tmember_id\030" +
|
||||||
"oupMemberExtra\022\020\n\010group_id\030\001 \002(\t\022\017\n\007to_l" +
|
"\005 \001(\t\"\206\001\n\026ModifyGroupMemberExtra\022\020\n\010grou" +
|
||||||
"ine\030\002 \003(\005\022\'\n\016notify_content\030\003 \001(\0132\017.Mess" +
|
"p_id\030\001 \002(\t\022\017\n\007to_line\030\002 \003(\005\022\'\n\016notify_co" +
|
||||||
"ageContent\022\r\n\005extra\030\004 \001(\t\022\021\n\tmember_id\030\005" +
|
"ntent\030\003 \001(\0132\017.MessageContent\022\r\n\005extra\030\004 " +
|
||||||
" \001(\t\"P\n\020UserSettingEntry\022\r\n\005scope\030\001 \002(\005\022" +
|
"\001(\t\022\021\n\tmember_id\030\005 \001(\t\"P\n\020UserSettingEnt" +
|
||||||
"\013\n\003key\030\002 \002(\t\022\r\n\005value\030\003 \002(\t\022\021\n\tupdate_dt" +
|
"ry\022\r\n\005scope\030\001 \002(\005\022\013\n\003key\030\002 \002(\t\022\r\n\005value\030" +
|
||||||
"\030\004 \002(\003\"A\n\024ModifyUserSettingReq\022\r\n\005scope\030" +
|
"\003 \002(\t\022\021\n\tupdate_dt\030\004 \002(\003\"A\n\024ModifyUserSe" +
|
||||||
"\001 \002(\005\022\013\n\003key\030\002 \002(\t\022\r\n\005value\030\003 \002(\t\"\032\n\007Ver" +
|
"ttingReq\022\r\n\005scope\030\001 \002(\005\022\013\n\003key\030\002 \002(\t\022\r\n\005" +
|
||||||
"sion\022\017\n\007version\030\001 \002(\003\"8\n\024GetUserSettingR" +
|
"value\030\003 \002(\t\"\032\n\007Version\022\017\n\007version\030\001 \002(\003\"" +
|
||||||
"esult\022 \n\005entry\030\001 \003(\0132\021.UserSettingEntry\"",
|
"8\n\024GetUserSettingResult\022 \n\005entry\030\001 \003(\0132\021",
|
||||||
"f\n\006Friend\022\013\n\003uid\030\001 \002(\t\022\r\n\005state\030\002 \002(\005\022\021\n" +
|
".UserSettingEntry\"f\n\006Friend\022\013\n\003uid\030\001 \002(\t" +
|
||||||
"\tupdate_dt\030\003 \002(\003\022\r\n\005alias\030\004 \001(\t\022\017\n\007black" +
|
"\022\r\n\005state\030\002 \002(\005\022\021\n\tupdate_dt\030\003 \002(\003\022\r\n\005al" +
|
||||||
"ed\030\005 \001(\005\022\r\n\005extra\030\006 \001(\t\"*\n\020GetFriendsRes" +
|
"ias\030\004 \001(\t\022\017\n\007blacked\030\005 \001(\005\022\r\n\005extra\030\006 \001(" +
|
||||||
"ult\022\026\n\005entry\030\001 \003(\0132\007.Friend\"7\n\026GetFriend" +
|
"\t\"*\n\020GetFriendsResult\022\026\n\005entry\030\001 \003(\0132\007.F" +
|
||||||
"RequestResult\022\035\n\005entry\030\001 \003(\0132\016.FriendReq" +
|
"riend\"7\n\026GetFriendRequestResult\022\035\n\005entry" +
|
||||||
"uest\"\243\001\n\021ConnectAckPayload\022\020\n\010msg_head\030\001" +
|
"\030\001 \003(\0132\016.FriendRequest\"\243\001\n\021ConnectAckPay" +
|
||||||
" \001(\003\022\023\n\013friend_head\030\002 \001(\003\022\026\n\016friend_rq_h" +
|
"load\022\020\n\010msg_head\030\001 \001(\003\022\023\n\013friend_head\030\002 " +
|
||||||
"ead\030\003 \001(\003\022\024\n\014setting_head\030\004 \001(\003\022\021\n\tnode_" +
|
"\001(\003\022\026\n\016friend_rq_head\030\003 \001(\003\022\024\n\014setting_h" +
|
||||||
"addr\030\005 \001(\t\022\021\n\tnode_port\030\006 \001(\005\022\023\n\013server_" +
|
"ead\030\004 \001(\003\022\021\n\tnode_addr\030\005 \001(\t\022\021\n\tnode_por" +
|
||||||
"time\030\007 \001(\003\"P\n\rIMHttpWrapper\022\r\n\005token\030\001 \002",
|
"t\030\006 \001(\005\022\023\n\013server_time\030\007 \001(\003\"P\n\rIMHttpWr",
|
||||||
"(\t\022\021\n\tclient_id\030\002 \002(\t\022\017\n\007request\030\003 \002(\t\022\014" +
|
"apper\022\r\n\005token\030\001 \002(\t\022\021\n\tclient_id\030\002 \002(\t\022" +
|
||||||
"\n\004data\030\004 \001(\014\"A\n\021SearchUserRequest\022\017\n\007key" +
|
"\017\n\007request\030\003 \002(\t\022\014\n\004data\030\004 \001(\014\"A\n\021Search" +
|
||||||
"word\030\001 \002(\t\022\r\n\005fuzzy\030\002 \001(\005\022\014\n\004page\030\003 \001(\005\"" +
|
"UserRequest\022\017\n\007keyword\030\001 \002(\t\022\r\n\005fuzzy\030\002 " +
|
||||||
"(\n\020SearchUserResult\022\024\n\005entry\030\001 \003(\0132\005.Use" +
|
"\001(\005\022\014\n\004page\030\003 \001(\005\"(\n\020SearchUserResult\022\024\n" +
|
||||||
"r\"@\n\026GetChatroomInfoRequest\022\023\n\013chatroom_" +
|
"\005entry\030\001 \003(\0132\005.User\"@\n\026GetChatroomInfoRe" +
|
||||||
"id\030\001 \002(\t\022\021\n\tupdate_dt\030\002 \001(\003\"\227\001\n\014Chatroom" +
|
"quest\022\023\n\013chatroom_id\030\001 \002(\t\022\021\n\tupdate_dt\030" +
|
||||||
"Info\022\r\n\005title\030\001 \002(\t\022\014\n\004desc\030\002 \001(\t\022\020\n\010por" +
|
"\002 \001(\003\"\227\001\n\014ChatroomInfo\022\r\n\005title\030\001 \002(\t\022\014\n" +
|
||||||
"trait\030\003 \001(\t\022\024\n\014member_count\030\004 \001(\005\022\021\n\tcre" +
|
"\004desc\030\002 \001(\t\022\020\n\010portrait\030\003 \001(\t\022\024\n\014member_" +
|
||||||
"ate_dt\030\005 \001(\003\022\021\n\tupdate_dt\030\006 \001(\003\022\r\n\005extra" +
|
"count\030\004 \001(\005\022\021\n\tcreate_dt\030\005 \001(\003\022\021\n\tupdate" +
|
||||||
"\030\007 \001(\t\022\r\n\005state\030\010 \001(\005\"F\n\034GetChatroomMemb",
|
"_dt\030\006 \001(\003\022\r\n\005extra\030\007 \001(\t\022\r\n\005state\030\010 \001(\005\"",
|
||||||
"erInfoRequest\022\023\n\013chatroom_id\030\001 \002(\t\022\021\n\tma" +
|
"F\n\034GetChatroomMemberInfoRequest\022\023\n\013chatr" +
|
||||||
"x_count\030\002 \001(\005\";\n\022ChatroomMemberInfo\022\024\n\014m" +
|
"oom_id\030\001 \002(\t\022\021\n\tmax_count\030\002 \001(\005\";\n\022Chatr" +
|
||||||
"ember_count\030\001 \001(\005\022\017\n\007members\030\002 \003(\t\"\026\n\010IN" +
|
"oomMemberInfo\022\024\n\014member_count\030\001 \001(\005\022\017\n\007m" +
|
||||||
"T64Buf\022\n\n\002id\030\001 \002(\003\"4\n\023NotifyRecallMessag" +
|
"embers\030\002 \003(\t\"\026\n\010INT64Buf\022\n\n\002id\030\001 \002(\003\"4\n\023" +
|
||||||
"e\022\n\n\002id\030\001 \002(\003\022\021\n\tfrom_user\030\002 \002(\t\"/\n\020Blac" +
|
"NotifyRecallMessage\022\n\n\002id\030\001 \002(\003\022\021\n\tfrom_" +
|
||||||
"kUserRequest\022\013\n\003uid\030\001 \002(\t\022\016\n\006status\030\002 \002(" +
|
"user\030\002 \002(\t\"/\n\020BlackUserRequest\022\013\n\003uid\030\001 " +
|
||||||
"\005\"\323\001\n\014RouteRequest\022\013\n\003app\030\001 \001(\t\022\020\n\010platf" +
|
"\002(\t\022\016\n\006status\030\002 \002(\005\"\323\001\n\014RouteRequest\022\013\n\003" +
|
||||||
"orm\030\002 \001(\005\022\021\n\tpush_type\030\003 \001(\005\022\023\n\013device_n" +
|
"app\030\001 \001(\t\022\020\n\010platform\030\002 \001(\005\022\021\n\tpush_type" +
|
||||||
"ame\030\004 \001(\t\022\026\n\016device_version\030\005 \001(\t\022\022\n\npho" +
|
"\030\003 \001(\005\022\023\n\013device_name\030\004 \001(\t\022\026\n\016device_ve" +
|
||||||
"ne_name\030\006 \001(\t\022\020\n\010language\030\007 \001(\t\022\024\n\014carri",
|
"rsion\030\005 \001(\t\022\022\n\nphone_name\030\006 \001(\t\022\020\n\010langu",
|
||||||
"er_name\030\010 \001(\t\022\023\n\013app_version\030\t \001(\t\022\023\n\013sd" +
|
"age\030\007 \001(\t\022\024\n\014carrier_name\030\010 \001(\t\022\023\n\013app_v" +
|
||||||
"k_version\030\n \001(\t\"D\n\rRouteResponse\022\014\n\004host" +
|
"ersion\030\t \001(\t\022\023\n\013sdk_version\030\n \001(\t\"D\n\rRou" +
|
||||||
"\030\001 \002(\t\022\021\n\tlong_port\030\002 \002(\005\022\022\n\nshort_port\030" +
|
"teResponse\022\014\n\004host\030\001 \002(\t\022\021\n\tlong_port\030\002 " +
|
||||||
"\003 \002(\005\"G\n\017GetTokenRequest\022\017\n\007user_id\030\001 \002(" +
|
"\002(\005\022\022\n\nshort_port\030\003 \002(\005\"G\n\017GetTokenReque" +
|
||||||
"\t\022\021\n\tclient_id\030\002 \002(\t\022\020\n\010platform\030\003 \001(\005\"r" +
|
"st\022\017\n\007user_id\030\001 \002(\t\022\021\n\tclient_id\030\002 \002(\t\022\020" +
|
||||||
"\n\022LoadRemoteMessages\022#\n\014conversation\030\001 \002" +
|
"\n\010platform\030\003 \001(\005\"r\n\022LoadRemoteMessages\022#" +
|
||||||
"(\0132\r.Conversation\022\022\n\nbefore_uid\030\002 \002(\003\022\r\n" +
|
"\n\014conversation\030\001 \002(\0132\r.Conversation\022\022\n\nb" +
|
||||||
"\005count\030\003 \002(\005\022\024\n\014content_type\030\004 \003(\005\"a\n\020Mu" +
|
"efore_uid\030\002 \002(\003\022\r\n\005count\030\003 \002(\005\022\024\n\014conten" +
|
||||||
"ltiCastMessage\022\021\n\tfrom_user\030\001 \002(\t\022 \n\007con" +
|
"t_type\030\004 \003(\005\"a\n\020MultiCastMessage\022\021\n\tfrom" +
|
||||||
"tent\030\002 \002(\0132\017.MessageContent\022\n\n\002to\030\003 \003(\t\022",
|
"_user\030\001 \002(\t\022 \n\007content\030\002 \002(\0132\017.MessageCo",
|
||||||
"\014\n\004line\030\004 \002(\005\"E\n\035RecallMultiCastMessageR" +
|
"ntent\022\n\n\002to\030\003 \003(\t\022\014\n\004line\030\004 \002(\005\"E\n\035Recal" +
|
||||||
"equest\022\022\n\nmessage_id\030\001 \002(\003\022\020\n\010receiver\030\002" +
|
"lMultiCastMessageRequest\022\022\n\nmessage_id\030\001" +
|
||||||
" \003(\t\"@\n\017AuthCodeRequest\022\021\n\ttarget_id\030\001 \002" +
|
" \002(\003\022\020\n\010receiver\030\002 \003(\t\"@\n\017AuthCodeReques" +
|
||||||
"(\t\022\014\n\004type\030\002 \002(\005\022\014\n\004host\030\003 \002(\t\"o\n\030Applic" +
|
"t\022\021\n\ttarget_id\030\001 \002(\t\022\014\n\004type\030\002 \002(\005\022\014\n\004ho" +
|
||||||
"ationConfigRequest\022\r\n\005appId\030\001 \002(\t\022\017\n\007app" +
|
"st\030\003 \002(\t\"o\n\030ApplicationConfigRequest\022\r\n\005" +
|
||||||
"Type\030\002 \002(\005\022\021\n\ttimestamp\030\003 \002(\003\022\r\n\005nonce\030\004" +
|
"appId\030\001 \002(\t\022\017\n\007appType\030\002 \002(\005\022\021\n\ttimestam" +
|
||||||
" \002(\t\022\021\n\tsignature\030\005 \002(\tB/\n\025cn.wildfirech" +
|
"p\030\003 \002(\003\022\r\n\005nonce\030\004 \002(\t\022\021\n\tsignature\030\005 \002(" +
|
||||||
"at.protoB\nWFCMessageZ\n./go;proto"
|
"\tB/\n\025cn.wildfirechat.protoB\nWFCMessageZ\n" +
|
||||||
|
"./go;proto"
|
||||||
};
|
};
|
||||||
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
|
com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
|
||||||
new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
|
new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
|
||||||
@@ -67841,7 +67923,7 @@ public final class WFCMessage {
|
|||||||
internal_static_QuitGroupRequest_fieldAccessorTable = new
|
internal_static_QuitGroupRequest_fieldAccessorTable = new
|
||||||
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
|
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
|
||||||
internal_static_QuitGroupRequest_descriptor,
|
internal_static_QuitGroupRequest_descriptor,
|
||||||
new java.lang.String[] { "GroupId", "ToLine", "NotifyContent", });
|
new java.lang.String[] { "GroupId", "ToLine", "NotifyContent", "KeepMsg", });
|
||||||
internal_static_RemoveGroupMemberRequest_descriptor =
|
internal_static_RemoveGroupMemberRequest_descriptor =
|
||||||
getDescriptor().getMessageTypes().get(46);
|
getDescriptor().getMessageTypes().get(46);
|
||||||
internal_static_RemoveGroupMemberRequest_fieldAccessorTable = new
|
internal_static_RemoveGroupMemberRequest_fieldAccessorTable = new
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<!--<relativePath>../pom.xml</relativePath>-->
|
<!--<relativePath>../pom.xml</relativePath>-->
|
||||||
<artifactId>wildfirechat-parent</artifactId>
|
<artifactId>wildfirechat-parent</artifactId>
|
||||||
<groupId>cn.wildfirechat</groupId>
|
<groupId>cn.wildfirechat</groupId>
|
||||||
<version>1.2.5</version>
|
<version>1.2.8</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>distribution</artifactId>
|
<artifactId>distribution</artifactId>
|
||||||
|
|||||||
@@ -146,6 +146,10 @@ robot.callback_with_client_info false
|
|||||||
## 频道回调信息是否带上用户clientId和平台类型。
|
## 频道回调信息是否带上用户clientId和平台类型。
|
||||||
channel.callback_with_client_info false
|
channel.callback_with_client_info false
|
||||||
|
|
||||||
|
## 频道回调新方式,在新方式下,如果有callback地址就会总是回调客户端发送的消息(包括owner和订阅者)。automatic属性控制订阅者发送的消息是否发给owner, 0发,1不发。
|
||||||
|
## 旧的方式是,automatic为0时,订阅者的消息发给owner,不转发消息到callback地址。为1时,把订阅者的消息转发给callback地址,不发给owner。
|
||||||
|
channel.new_callback_feature true
|
||||||
|
|
||||||
##禁止搜索用户
|
##禁止搜索用户
|
||||||
friend.disable_search false
|
friend.disable_search false
|
||||||
|
|
||||||
@@ -246,15 +250,6 @@ client.request_rate_limit 100
|
|||||||
##关于对象存储的详细信息请参考:https://docs.wildfirechat.cn/server/oss.html
|
##关于对象存储的详细信息请参考:https://docs.wildfirechat.cn/server/oss.html
|
||||||
media.server.use_qiniu 0
|
media.server.use_qiniu 0
|
||||||
|
|
||||||
##媒体类型分类
|
|
||||||
#Media_Type_GENERAL = 0,
|
|
||||||
#Media_Type_IMAGE = 1,
|
|
||||||
#Media_Type_VOICE = 2,
|
|
||||||
#Media_Type_VIDEO = 3,
|
|
||||||
#Media_Type_FILE = 4,
|
|
||||||
#Media_Type_PORTRAIT = 5,
|
|
||||||
#Media_Type_FAVORITE = 6
|
|
||||||
|
|
||||||
# qiniu media server configuration
|
# qiniu media server configuration
|
||||||
## 上传地址,不同的区域,上传地址也不同,请注意现在正确的地址
|
## 上传地址,不同的区域,上传地址也不同,请注意现在正确的地址
|
||||||
qiniu.server_url http://up.qbox.me
|
qiniu.server_url http://up.qbox.me
|
||||||
@@ -280,11 +275,21 @@ qiniu.bucket_portrait_domain http://cdn2.wildfirechat.cn
|
|||||||
qiniu.bucket_favorite_name storage
|
qiniu.bucket_favorite_name storage
|
||||||
qiniu.bucket_favorite_domain http://cdn2.wildfirechat.cn
|
qiniu.bucket_favorite_domain http://cdn2.wildfirechat.cn
|
||||||
|
|
||||||
|
##媒体类型分类
|
||||||
|
#Media_Type_GENERAL = 0,
|
||||||
|
#Media_Type_IMAGE = 1,
|
||||||
|
#Media_Type_VOICE = 2,
|
||||||
|
#Media_Type_VIDEO = 3,
|
||||||
|
#Media_Type_FILE = 4,
|
||||||
|
#Media_Type_PORTRAIT = 5,
|
||||||
|
#Media_Type_FAVORITE = 6,
|
||||||
|
#Media_Type_STICKER = 7,
|
||||||
|
#Media_Type_MOMENTS = 8
|
||||||
|
|
||||||
# local media server configuration
|
# local media server configuration
|
||||||
# 本地媒体服务器配置。
|
# 本地媒体服务器配置。
|
||||||
local.media.storage.root ./media
|
local.media.storage.root media
|
||||||
# 如果使用内置文件存储,文件上传后地址默认为 http://server.ip:http_port/fs/5/2021/03/27/08/filename。
|
# 如果使用内置文件存储,文件上传后地址默认为 http://server.ip:http_port/fs/5/2021/03/27/08/filename。fs目录下按照类型存放文件,媒体类型见上面注释,比如5就是Media_Type_PORTRAIT,是客户端的头像文件。
|
||||||
# 如果需要使用nginx添加https支持,请打开下面配置,这样客户端得到的文件地址为 https://example.com/media/fs/5/2021/03/27/08/filename。
|
# 如果需要使用nginx添加https支持,请打开下面配置,这样客户端得到的文件地址为 https://example.com/media/fs/5/2021/03/27/08/filename。
|
||||||
# 需要nginx把请求从https://example.com/media/fs 转到 http://server.ip:http_port/fs。注意需要带上所有header。
|
# 需要nginx把请求从https://example.com/media/fs 转到 http://server.ip:http_port/fs。注意需要带上所有header。
|
||||||
# 尽管内置文件存储可以使用,但是我们还是建议使用专业级别的对象存储服务,社区版可以使用七牛,专业版另外支持阿里云和也是私有对象存储。详情请参考 https://docs.wildfirechat.cn/server/oss.html
|
# 尽管内置文件存储可以使用,但是我们还是建议使用专业级别的对象存储服务,社区版可以使用七牛,专业版另外支持阿里云和也是私有对象存储。详情请参考 https://docs.wildfirechat.cn/server/oss.html
|
||||||
@@ -398,7 +403,7 @@ push.ios.server.address http://localhost:8085/ios/push
|
|||||||
# gain and reduced GC.
|
# gain and reduced GC.
|
||||||
# http://netty.io/wiki/native-transports.html for more information
|
# http://netty.io/wiki/native-transports.html for more information
|
||||||
#*********************************************************************
|
#*********************************************************************
|
||||||
# 如果是linux系统,一定要打开下面这个参数,能大幅度提高性能
|
# 如果是linux系统,一定要打开下面这个参数,能大幅度提高性能。默认只支持x86_64架构。如果是arm64架构,可以按照项目说明来更新epoll SDK。其他架构不支持epoll。
|
||||||
#netty.epoll true
|
#netty.epoll true
|
||||||
|
|
||||||
#*********************************************************************
|
#*********************************************************************
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
<artifactId>wildfirechat-parent</artifactId>
|
<artifactId>wildfirechat-parent</artifactId>
|
||||||
|
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
<version>1.2.5</version>
|
<version>1.2.8</version>
|
||||||
<name>Wildfire Chat</name>
|
<name>Wildfire Chat</name>
|
||||||
<description>Wildfire Chat Server</description>
|
<description>Wildfire Chat Server</description>
|
||||||
<inceptionYear>2019</inceptionYear>
|
<inceptionYear>2019</inceptionYear>
|
||||||
|
|||||||
@@ -12,6 +12,29 @@
|
|||||||
|
|
||||||
# 更新记录
|
# 更新记录
|
||||||
|
|
||||||
|
--------------
|
||||||
|
Release note 1.2.8:
|
||||||
|
1. server api获取被封禁用户时,过滤掉正常用户。
|
||||||
|
2. 解决群组标记删除错误。
|
||||||
|
3. SDK中添加发送消息的示例。
|
||||||
|
4. 群解散后撤回群中的消息应该失败。
|
||||||
|
5. 解决某些时候http请求返回信息无法读取问题。
|
||||||
|
|
||||||
|
--------------
|
||||||
|
Release note 1.2.7:
|
||||||
|
1. 解决搜索频道时某些类型的频道无法被搜索的问题。
|
||||||
|
2. 添加频道回调新特性,方便使用。
|
||||||
|
3. 解决机器人API修改机器人用户信息客户端没有更新的问题。
|
||||||
|
4. Server SDK中关于频道的接口放到ChannelAdmin中。
|
||||||
|
5. 添加Mesh功能的SDK。
|
||||||
|
|
||||||
|
--------------
|
||||||
|
Release note 1.2.6:
|
||||||
|
1. 群主强制被退群时(销毁账号/server api强制退群),调整新群主选择,群管理优先,先加入群组优先。
|
||||||
|
2. 拉取远程消息时,过滤掉可能重复的消息。
|
||||||
|
3. 退群时添加是否保留消息的参数,可以退群后保留原有消息。
|
||||||
|
4. 如果不在群组中,当获取群组信息时不更新数据。
|
||||||
|
|
||||||
--------------
|
--------------
|
||||||
Release note 1.2.5:
|
Release note 1.2.5:
|
||||||
1. Server API添加通过邮箱获取用户信息的接口。
|
1. Server API添加通过邮箱获取用户信息的接口。
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<artifactId>wildfirechat-parent</artifactId>
|
<artifactId>wildfirechat-parent</artifactId>
|
||||||
<groupId>cn.wildfirechat</groupId>
|
<groupId>cn.wildfirechat</groupId>
|
||||||
<version>1.2.5</version>
|
<version>1.2.8</version>
|
||||||
</parent>
|
</parent>
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package cn.wildfirechat.sdk;
|
||||||
|
|
||||||
|
import cn.wildfirechat.common.APIPath;
|
||||||
|
import cn.wildfirechat.pojos.*;
|
||||||
|
import cn.wildfirechat.sdk.model.IMResult;
|
||||||
|
import cn.wildfirechat.sdk.utilities.AdminHttpUtils;
|
||||||
|
|
||||||
|
public class ChannelAdmin {
|
||||||
|
public static IMResult<OutputCreateChannel> createChannel(InputCreateChannel inputCreateChannel) throws Exception {
|
||||||
|
String path = APIPath.Create_Channel;
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, inputCreateChannel, OutputCreateChannel.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<Void> destroyChannel(String channelId) throws Exception {
|
||||||
|
String path = APIPath.Destroy_Channel;
|
||||||
|
InputChannelId inputChannelId = new InputChannelId(channelId);
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, inputChannelId, Void.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<OutputGetChannelInfo> getChannelInfo(String channelId) throws Exception {
|
||||||
|
String path = APIPath.Get_Channel_Info;
|
||||||
|
InputChannelId inputChannelId = new InputChannelId(channelId);
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, inputChannelId, OutputGetChannelInfo.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<Void> subscribeChannel(String channelId, String userId) throws Exception {
|
||||||
|
String path = APIPath.Subscribe_Channel;
|
||||||
|
InputSubscribeChannel input = new InputSubscribeChannel(channelId, userId, 1);
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, input, Void.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<Void> unsubscribeChannel(String channelId, String userId) throws Exception {
|
||||||
|
String path = APIPath.Subscribe_Channel;
|
||||||
|
InputSubscribeChannel input = new InputSubscribeChannel(channelId, userId, 0);
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, input, Void.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<OutputBooleanValue> isUserSubscribedChannel(String userId, String channelId) throws Exception {
|
||||||
|
String path = APIPath.Check_User_Subscribe_Channel;
|
||||||
|
InputSubscribeChannel input = new InputSubscribeChannel(channelId, userId, 0);
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, input, OutputBooleanValue.class);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -22,35 +22,59 @@ public class GeneralAdmin {
|
|||||||
return AdminHttpUtils.httpJsonPost(path, input, Void.class);
|
return AdminHttpUtils.httpJsonPost(path, input, Void.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated 请使用 {@link cn.wildfirechat.sdk.ChannelAdmin#createChannel(InputCreateChannel inputCreateChannel)} 代替此方法,因为它将在未来的版本中被移除。
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public static IMResult<OutputCreateChannel> createChannel(InputCreateChannel inputCreateChannel) throws Exception {
|
public static IMResult<OutputCreateChannel> createChannel(InputCreateChannel inputCreateChannel) throws Exception {
|
||||||
String path = APIPath.Create_Channel;
|
String path = APIPath.Create_Channel;
|
||||||
return AdminHttpUtils.httpJsonPost(path, inputCreateChannel, OutputCreateChannel.class);
|
return AdminHttpUtils.httpJsonPost(path, inputCreateChannel, OutputCreateChannel.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated 请使用 {@link cn.wildfirechat.sdk.ChannelAdmin#destroyChannel(String channelId)} 代替此方法,因为它将在未来的版本中被移除。
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public static IMResult<Void> destroyChannel(String channelId) throws Exception {
|
public static IMResult<Void> destroyChannel(String channelId) throws Exception {
|
||||||
String path = APIPath.Destroy_Channel;
|
String path = APIPath.Destroy_Channel;
|
||||||
InputChannelId inputChannelId = new InputChannelId(channelId);
|
InputChannelId inputChannelId = new InputChannelId(channelId);
|
||||||
return AdminHttpUtils.httpJsonPost(path, inputChannelId, Void.class);
|
return AdminHttpUtils.httpJsonPost(path, inputChannelId, Void.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated 请使用 {@link cn.wildfirechat.sdk.ChannelAdmin#getChannelInfo(String channelId)} 代替此方法,因为它将在未来的版本中被移除。
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public static IMResult<OutputGetChannelInfo> getChannelInfo(String channelId) throws Exception {
|
public static IMResult<OutputGetChannelInfo> getChannelInfo(String channelId) throws Exception {
|
||||||
String path = APIPath.Get_Channel_Info;
|
String path = APIPath.Get_Channel_Info;
|
||||||
InputChannelId inputChannelId = new InputChannelId(channelId);
|
InputChannelId inputChannelId = new InputChannelId(channelId);
|
||||||
return AdminHttpUtils.httpJsonPost(path, inputChannelId, OutputGetChannelInfo.class);
|
return AdminHttpUtils.httpJsonPost(path, inputChannelId, OutputGetChannelInfo.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated 请使用 {@link cn.wildfirechat.sdk.ChannelAdmin#subscribeChannel(String userId, String channelId)} 代替此方法,因为它将在未来的版本中被移除。
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public static IMResult<Void> subscribeChannel(String channelId, String userId) throws Exception {
|
public static IMResult<Void> subscribeChannel(String channelId, String userId) throws Exception {
|
||||||
String path = APIPath.Subscribe_Channel;
|
String path = APIPath.Subscribe_Channel;
|
||||||
InputSubscribeChannel input = new InputSubscribeChannel(channelId, userId, 1);
|
InputSubscribeChannel input = new InputSubscribeChannel(channelId, userId, 1);
|
||||||
return AdminHttpUtils.httpJsonPost(path, input, Void.class);
|
return AdminHttpUtils.httpJsonPost(path, input, Void.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated 请使用 {@link cn.wildfirechat.sdk.ChannelAdmin#unsubscribeChannel(String userId, String channelId)} 代替此方法,因为它将在未来的版本中被移除。
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public static IMResult<Void> unsubscribeChannel(String channelId, String userId) throws Exception {
|
public static IMResult<Void> unsubscribeChannel(String channelId, String userId) throws Exception {
|
||||||
String path = APIPath.Subscribe_Channel;
|
String path = APIPath.Subscribe_Channel;
|
||||||
InputSubscribeChannel input = new InputSubscribeChannel(channelId, userId, 0);
|
InputSubscribeChannel input = new InputSubscribeChannel(channelId, userId, 0);
|
||||||
return AdminHttpUtils.httpJsonPost(path, input, Void.class);
|
return AdminHttpUtils.httpJsonPost(path, input, Void.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated 请使用 {@link cn.wildfirechat.sdk.ChannelAdmin#isUserSubscribedChannel(String userId, String channelId)} 代替此方法,因为它将在未来的版本中被移除。
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
public static IMResult<OutputBooleanValue> isUserSubscribedChannel(String userId, String channelId) throws Exception {
|
public static IMResult<OutputBooleanValue> isUserSubscribedChannel(String userId, String channelId) throws Exception {
|
||||||
String path = APIPath.Check_User_Subscribe_Channel;
|
String path = APIPath.Check_User_Subscribe_Channel;
|
||||||
InputSubscribeChannel input = new InputSubscribeChannel(channelId, userId, 0);
|
InputSubscribeChannel input = new InputSubscribeChannel(channelId, userId, 0);
|
||||||
|
|||||||
@@ -31,6 +31,11 @@ public class GroupAdmin {
|
|||||||
return AdminHttpUtils.httpJsonPost(path, input, PojoGroupInfo.class);
|
return AdminHttpUtils.httpJsonPost(path, input, PojoGroupInfo.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static IMResult<PojoGroupInfoList> batchGroupInfos(List<String> groupIds) throws Exception {
|
||||||
|
String path = APIPath.Group_Batch_Info;
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, groupIds, PojoGroupInfoList.class);
|
||||||
|
}
|
||||||
|
|
||||||
public static IMResult<Void> dismissGroup(String operator, String groupId, List<Integer> to_lines, MessagePayload notify_message) throws Exception {
|
public static IMResult<Void> dismissGroup(String operator, String groupId, List<Integer> to_lines, MessagePayload notify_message) throws Exception {
|
||||||
String path = APIPath.Group_Dismiss;
|
String path = APIPath.Group_Dismiss;
|
||||||
InputDismissGroup dismissGroup = new InputDismissGroup();
|
InputDismissGroup dismissGroup = new InputDismissGroup();
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,229 @@
|
|||||||
|
package cn.wildfirechat.sdk;
|
||||||
|
|
||||||
|
import cn.wildfirechat.common.APIPath;
|
||||||
|
import cn.wildfirechat.pojos.*;
|
||||||
|
import cn.wildfirechat.pojos.mesh.*;
|
||||||
|
import cn.wildfirechat.sdk.model.IMResult;
|
||||||
|
import cn.wildfirechat.sdk.utilities.AdminHttpUtils;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class MeshAdmin {
|
||||||
|
public static IMResult<Void> createDomain(InputOutputDomainInfo domainInfo) throws Exception {
|
||||||
|
String path = APIPath.Create_Domain;
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, domainInfo, Void.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<InputOutputDomainInfo> getDomain(String domainId) throws Exception {
|
||||||
|
String path = APIPath.Get_Domain;
|
||||||
|
InputStringValue inputId = new InputStringValue();
|
||||||
|
inputId.setValue(domainId);
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, inputId, InputOutputDomainInfo.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<Void> deleteDomain(String domainId) throws Exception {
|
||||||
|
String path = APIPath.Destroy_Domain;
|
||||||
|
InputStringValue inputId = new InputStringValue();
|
||||||
|
inputId.setValue(domainId);
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, inputId, Void.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<InputOutputDomainInfoList> getAllDomain() throws Exception {
|
||||||
|
String path = APIPath.List_Domain;
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, null, InputOutputDomainInfoList.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<OutputUserInfoList> getBatchUserInfos(List<String> userIds) throws Exception {
|
||||||
|
String path = APIPath.User_Batch_Get_Infos;
|
||||||
|
OutputStringList getUserInfo = new OutputStringList(userIds);
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, getUserInfo, OutputUserInfoList.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<PojoSearchUserRes> searchUser(String keyword, int searchType, int page) throws Exception {
|
||||||
|
String path = APIPath.Search_User;
|
||||||
|
PojoSearchUserReq req = new PojoSearchUserReq();
|
||||||
|
req.keyword = keyword;
|
||||||
|
req.searchType = searchType;
|
||||||
|
req.page = page;
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, req, PojoSearchUserRes.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<Void> sendFriendRequest(String userId, String targetId, String reason) throws Exception {
|
||||||
|
String path = APIPath.Friend_Send_Request;
|
||||||
|
InputAddFriendRequest input = new InputAddFriendRequest();
|
||||||
|
input.setUserId(userId);
|
||||||
|
input.setFriendUid(targetId);
|
||||||
|
input.setReason(reason);
|
||||||
|
input.setForce(false);
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, input, Void.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<Void> handleFriendRequest(String userId, String targetId, int status) throws Exception {
|
||||||
|
String path = APIPath.Handle_Friend_Send_Request;
|
||||||
|
InputHandleFriendRequest input = new InputHandleFriendRequest();
|
||||||
|
input.setUserId(userId);
|
||||||
|
input.setFriendUid(targetId);
|
||||||
|
input.setStatus(status);
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, input, Void.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<SendMessageResult> sendMessage(String sender, Conversation conversation, MessagePayload payload, List<String> toUsers) throws Exception {
|
||||||
|
String path = APIPath.Msg_Send;
|
||||||
|
SendMessageData messageData = new SendMessageData();
|
||||||
|
messageData.setSender(sender);
|
||||||
|
messageData.setConv(conversation);
|
||||||
|
messageData.setPayload(payload);
|
||||||
|
messageData.setToUsers(toUsers);
|
||||||
|
messageData.setMeshMessage(true);
|
||||||
|
if (payload.getType() == 1 && (payload.getSearchableContent() == null || payload.getSearchableContent().isEmpty())) {
|
||||||
|
System.out.println("Payload错误,Payload格式应该跟客户端消息encode出来的Payload对齐,这样客户端才能正确识别。比如文本消息,文本需要放到searchableContent属性。请与客户端同事确认Payload的格式,或则去 https://gitee.com/wfchat/android-chat/tree/master/client/src/main/java/cn/wildfirechat/message 找到消息encode的实现方法!");
|
||||||
|
}
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, messageData, SendMessageResult.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<SendMessageResult> publishMessage(SendMessageData messageData, List<String> receivers) throws Exception {
|
||||||
|
String path = APIPath.Msg_Publish;
|
||||||
|
PojoPublishMessageReq req = new PojoPublishMessageReq();
|
||||||
|
req.messageData = messageData;
|
||||||
|
req.receivers = receivers;
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, req, SendMessageResult.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<String> recallMessage(String operator, long messageId) throws Exception {
|
||||||
|
String path = APIPath.Msg_Recall;
|
||||||
|
RecallMessageData req = new RecallMessageData();
|
||||||
|
req.setOperator(operator);
|
||||||
|
req.setMessageUid(messageId);
|
||||||
|
req.setUserRecall(true);
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, req, String.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<Void> updateMessageContent(String operator, long messageUid, MessagePayload payload, boolean distribute) throws Exception {
|
||||||
|
String path = APIPath.Msg_Update;
|
||||||
|
UpdateMessageContentData updateMessageContentData = new UpdateMessageContentData();
|
||||||
|
updateMessageContentData.setOperator(operator);
|
||||||
|
updateMessageContentData.setMessageUid(messageUid);
|
||||||
|
updateMessageContentData.setPayload(payload);
|
||||||
|
updateMessageContentData.setDistribute(distribute?1:0);
|
||||||
|
updateMessageContentData.setUpdateTimestamp(0);
|
||||||
|
updateMessageContentData.setMeshLocal(1);
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, updateMessageContentData, Void.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<Void> syncGroup(PojoGroupInfo group_info, List<PojoGroupMember> members) throws Exception {
|
||||||
|
String path = APIPath.Sync_Group;
|
||||||
|
PojoGroup pojoGroup = new PojoGroup();
|
||||||
|
pojoGroup.setGroup_info(group_info);
|
||||||
|
pojoGroup.setMembers(members);
|
||||||
|
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, pojoGroup, Void.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<PojoGroupInfo> getGroupInfo(String groupId) throws Exception {
|
||||||
|
return GroupAdmin.getGroupInfo(groupId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<OutputGroupMemberList> getGroupMembers(String groupId) throws Exception {
|
||||||
|
return GroupAdmin.getGroupMembers(groupId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<Void> addGroupMembers(String operator, String groupId, List<PojoGroupMember> groupMembers, List<Integer> to_lines, MessagePayload notify_message) throws Exception {
|
||||||
|
String path = APIPath.Group_Member_Add;
|
||||||
|
InputAddGroupMember addGroupMember = new InputAddGroupMember();
|
||||||
|
addGroupMember.setGroup_id(groupId);
|
||||||
|
addGroupMember.setMembers(groupMembers);
|
||||||
|
addGroupMember.setOperator(operator);
|
||||||
|
addGroupMember.setTo_lines(to_lines);
|
||||||
|
addGroupMember.setNotify_message(notify_message);
|
||||||
|
addGroupMember.setMeshMessage(true);
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, addGroupMember, Void.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<PojoGroupInfoList> batchGroupInfos(List<String> groupIds) throws Exception {
|
||||||
|
return GroupAdmin.batchGroupInfos(groupIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<Void> quitGroup(String operator, String groupId, List<Integer> to_lines, MessagePayload notify_message) throws Exception {
|
||||||
|
String path = APIPath.Group_Member_Quit;
|
||||||
|
InputQuitGroup quitGroup = new InputQuitGroup();
|
||||||
|
quitGroup.setGroup_id(groupId);
|
||||||
|
quitGroup.setOperator(operator);
|
||||||
|
quitGroup.setTo_lines(to_lines);
|
||||||
|
quitGroup.setNotify_message(notify_message);
|
||||||
|
quitGroup.setMeshMessage(true);
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, quitGroup, Void.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static IMResult<Void> dismissGroup(String operator, String groupId, List<Integer> to_lines, MessagePayload notify_message) throws Exception {
|
||||||
|
String path = APIPath.Group_Dismiss;
|
||||||
|
InputDismissGroup dismissGroup = new InputDismissGroup();
|
||||||
|
dismissGroup.setOperator(operator);
|
||||||
|
dismissGroup.setGroup_id(groupId);
|
||||||
|
dismissGroup.setTo_lines(to_lines);
|
||||||
|
dismissGroup.setNotify_message(notify_message);
|
||||||
|
dismissGroup.setMeshMessage(true);
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, dismissGroup, Void.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<Void> kickoffGroupMembers(String operator, String groupId, List<String> groupMemberIds, List<Integer> to_lines, MessagePayload notify_message) throws Exception {
|
||||||
|
String path = APIPath.Group_Member_Kickoff;
|
||||||
|
InputKickoffGroupMember kickoffGroupMember = new InputKickoffGroupMember();
|
||||||
|
kickoffGroupMember.setGroup_id(groupId);
|
||||||
|
kickoffGroupMember.setMembers(groupMemberIds);
|
||||||
|
kickoffGroupMember.setOperator(operator);
|
||||||
|
kickoffGroupMember.setTo_lines(to_lines);
|
||||||
|
kickoffGroupMember.setMeshMessage(true);
|
||||||
|
kickoffGroupMember.setNotify_message(notify_message);
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, kickoffGroupMember, Void.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<Void> transferGroup(String operator, String groupId, String newOwner, List<Integer> to_lines, MessagePayload notify_message) throws Exception {
|
||||||
|
String path = APIPath.Group_Transfer;
|
||||||
|
InputTransferGroup transferGroup = new InputTransferGroup();
|
||||||
|
transferGroup.setGroup_id(groupId);
|
||||||
|
transferGroup.setNew_owner(newOwner);
|
||||||
|
transferGroup.setOperator(operator);
|
||||||
|
transferGroup.setTo_lines(to_lines);
|
||||||
|
transferGroup.setNotify_message(notify_message);
|
||||||
|
transferGroup.setMeshMessage(true);
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, transferGroup, Void.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<Void> modifyGroupInfo(String operator, String groupId, /*ModifyGroupInfoType*/int type, String value, List<Integer> to_lines, MessagePayload notify_message) throws Exception {
|
||||||
|
String path = APIPath.Group_Modify_Info;
|
||||||
|
InputModifyGroupInfo modifyGroupInfo = new InputModifyGroupInfo();
|
||||||
|
modifyGroupInfo.setGroup_id(groupId);
|
||||||
|
modifyGroupInfo.setOperator(operator);
|
||||||
|
modifyGroupInfo.setTo_lines(to_lines);
|
||||||
|
modifyGroupInfo.setType(type);
|
||||||
|
modifyGroupInfo.setValue(value);
|
||||||
|
modifyGroupInfo.setNotify_message(notify_message);
|
||||||
|
modifyGroupInfo.setMeshMessage(true);
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, modifyGroupInfo, Void.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<PojoUserConferenceResponse> userConferenceRequest(String clientID, String fromUser, String request, long sessionId, String roomId, String data, boolean advanced) throws Exception {
|
||||||
|
String path = APIPath.Conference_User_Request;
|
||||||
|
PojoUserConferenceRequest conferenceRequest = new PojoUserConferenceRequest();
|
||||||
|
conferenceRequest.clientID = clientID;
|
||||||
|
conferenceRequest.fromUser = fromUser;
|
||||||
|
conferenceRequest.request = request;
|
||||||
|
conferenceRequest.sessionId = sessionId;
|
||||||
|
conferenceRequest.roomId = roomId;
|
||||||
|
conferenceRequest.data = data;
|
||||||
|
conferenceRequest.advanced = advanced;
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, conferenceRequest, PojoUserConferenceResponse.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IMResult<Void> userConferenceEvent(String data, String userId, String clientId, boolean isRobot) throws Exception {
|
||||||
|
String path = APIPath.Conference_User_Event;
|
||||||
|
PojoUserConferenceEvent event = new PojoUserConferenceEvent();
|
||||||
|
event.data = data;
|
||||||
|
event.userId = userId;
|
||||||
|
event.clientId = clientId;
|
||||||
|
event.isRobot = isRobot;
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, event, Void.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2022 WildFireChat. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
import org.json.simple.parser.ParseException;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Base64;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
public class ArticlesMessageContent extends MessageContent {
|
||||||
|
public Article topArticle;
|
||||||
|
public ArrayList<Article> subArticles;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getContentType() {
|
||||||
|
return ProtoConstants.ContentType.Articles;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPersistFlag() {
|
||||||
|
return ProtoConstants.PersistFlag.Persist_And_Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessagePayload encode() {
|
||||||
|
MessagePayload payload = super.encodeBase();
|
||||||
|
payload.setSearchableContent(topArticle.title);
|
||||||
|
JSONObject object = new JSONObject();
|
||||||
|
|
||||||
|
object.put("top", topArticle.toJson());
|
||||||
|
if (subArticles != null) {
|
||||||
|
JSONArray jsonArray = new JSONArray();
|
||||||
|
object.put("subArticles", jsonArray);
|
||||||
|
for (Article article : subArticles) {
|
||||||
|
jsonArray.add(article.toJson());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
payload.setBase64edData(Base64.getEncoder().encodeToString(object.toString().getBytes()));
|
||||||
|
|
||||||
|
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decode(MessagePayload payload) {
|
||||||
|
try {
|
||||||
|
JSONObject object = (JSONObject) new JSONParser().parse(new String(Base64.getDecoder().decode(payload.getBase64edData())));
|
||||||
|
JSONObject topObj = (JSONObject) object.get("top");
|
||||||
|
this.topArticle = Article.fromJson(topObj);
|
||||||
|
JSONArray jsonArray = (JSONArray) object.get("subArticles");
|
||||||
|
if (jsonArray != null && jsonArray.size() > 0) {
|
||||||
|
this.subArticles = new ArrayList<>();
|
||||||
|
for (int i = 0; i < jsonArray.size(); i++) {
|
||||||
|
subArticles.add(Article.fromJson((JSONObject) jsonArray.get(i)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (ParseException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public List<LinkMessageContent> toLinkMessageContent() {
|
||||||
|
List<LinkMessageContent> contents = new ArrayList<>();
|
||||||
|
contents.add(this.topArticle.toLinkMessageContent());
|
||||||
|
if (this.subArticles != null) {
|
||||||
|
for (Article article : subArticles) {
|
||||||
|
contents.add(article.toLinkMessageContent());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return contents;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Article {
|
||||||
|
public String articleId;
|
||||||
|
public String cover;
|
||||||
|
public String title;
|
||||||
|
public String digest;
|
||||||
|
public String url;
|
||||||
|
boolean readReport;
|
||||||
|
|
||||||
|
JSONObject toJson() {
|
||||||
|
JSONObject obj = new JSONObject();
|
||||||
|
obj.put("id", articleId);
|
||||||
|
obj.put("cover", cover);
|
||||||
|
obj.put("title", title);
|
||||||
|
obj.put("digest", digest);
|
||||||
|
obj.put("url", url);
|
||||||
|
obj.put("rr", readReport);
|
||||||
|
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Article fromJson(JSONObject obj) {
|
||||||
|
Article article = new Article();
|
||||||
|
article.articleId = (String) obj.get("id");
|
||||||
|
article.cover = (String) obj.get("cover");
|
||||||
|
article.title = (String) obj.get("title");
|
||||||
|
article.digest = (String) obj.get("digest");
|
||||||
|
article.url = (String) obj.get("url");
|
||||||
|
article.readReport = (boolean) obj.get("rr");
|
||||||
|
return article;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LinkMessageContent toLinkMessageContent() {
|
||||||
|
LinkMessageContent content = new LinkMessageContent(this.title, this.url);
|
||||||
|
content.setContentDigest(this.digest);
|
||||||
|
content.setThumbnailUrl(this.cover);
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Article() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,205 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2020 WildFireChat. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
|
import io.netty.util.internal.StringUtil;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
import org.json.simple.parser.ParseException;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Base64;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by heavyrain lee on 2017/12/6.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class CallStartMessageContent extends MessageContent {
|
||||||
|
private String callId;
|
||||||
|
// 多人视音频是有效,不包含自己,一对一忽略此参数
|
||||||
|
private List<String> targetIds;
|
||||||
|
private long connectTime;
|
||||||
|
private long endTime;
|
||||||
|
private boolean audioOnly;
|
||||||
|
private String pin;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 0, UnKnown,
|
||||||
|
* 1, Busy,
|
||||||
|
* 2, SignalError,
|
||||||
|
* 3, Hangup,
|
||||||
|
* 4, MediaError,
|
||||||
|
* 5, RemoteHangup,
|
||||||
|
* 6, OpenCameraFailure,
|
||||||
|
* 7, Timeout,
|
||||||
|
* 8, AcceptByOtherClient
|
||||||
|
*/
|
||||||
|
private int status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 0,未知;1,多人版音视频;2,高级版音视频
|
||||||
|
*/
|
||||||
|
private int type;
|
||||||
|
|
||||||
|
public CallStartMessageContent() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public CallStartMessageContent(String callId, List<String> targetIds, boolean audioOnly) {
|
||||||
|
this.callId = callId;
|
||||||
|
this.audioOnly = audioOnly;
|
||||||
|
this.targetIds = targetIds;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCallId() {
|
||||||
|
return callId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCallId(String callId) {
|
||||||
|
this.callId = callId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getConnectTime() {
|
||||||
|
return connectTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConnectTime(long connectTime) {
|
||||||
|
this.connectTime = connectTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getEndTime() {
|
||||||
|
return endTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEndTime(long endTime) {
|
||||||
|
this.endTime = endTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(int status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAudioOnly() {
|
||||||
|
return audioOnly;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAudioOnly(boolean audioOnly) {
|
||||||
|
this.audioOnly = audioOnly;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getTargetIds() {
|
||||||
|
return targetIds;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTargetIds(List<String> targetIds) {
|
||||||
|
this.targetIds = targetIds;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPin() {
|
||||||
|
return pin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPin(String pin) {
|
||||||
|
this.pin = pin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(int type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getContentType() {
|
||||||
|
return ProtoConstants.ContentType.Call_Start;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPersistFlag() {
|
||||||
|
return ProtoConstants.PersistFlag.Persist_And_Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessagePayload encode() {
|
||||||
|
MessagePayload payload = super.encodeBase();
|
||||||
|
payload.setContent(callId);
|
||||||
|
payload.setPushContent("音视频通话邀请");
|
||||||
|
|
||||||
|
JSONObject objWrite = new JSONObject();
|
||||||
|
if (connectTime > 0) {
|
||||||
|
objWrite.put("c", connectTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (endTime > 0) {
|
||||||
|
objWrite.put("e", endTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (status > 0) {
|
||||||
|
objWrite.put("s", status);
|
||||||
|
}
|
||||||
|
|
||||||
|
objWrite.put("t", targetIds.get(0));
|
||||||
|
JSONArray ts = new JSONArray();
|
||||||
|
ts.addAll(targetIds);
|
||||||
|
objWrite.put("ts", ts);
|
||||||
|
objWrite.put("a", audioOnly ? 1 : 0);
|
||||||
|
objWrite.put("p", pin);
|
||||||
|
if (this.type > 0) {
|
||||||
|
objWrite.put("ty", this.type);
|
||||||
|
}
|
||||||
|
|
||||||
|
payload.setBase64edData(Base64.getEncoder().encodeToString(objWrite.toString().getBytes()));
|
||||||
|
|
||||||
|
JSONObject pushDataWrite = new JSONObject();
|
||||||
|
pushDataWrite.put("callId", callId);
|
||||||
|
pushDataWrite.put("audioOnly", audioOnly);
|
||||||
|
if (targetIds != null && targetIds.size() > 0) {
|
||||||
|
pushDataWrite.put("participants", targetIds);
|
||||||
|
}
|
||||||
|
payload.setPushData(pushDataWrite.toString());
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decode(MessagePayload payload) {
|
||||||
|
callId = payload.getContent();
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (!StringUtil.isNullOrEmpty(payload.getBase64edData())) {
|
||||||
|
JSONObject jsonObject = (JSONObject) new JSONParser().parse(new String(Base64.getDecoder().decode(payload.getBase64edData())));
|
||||||
|
connectTime = (long) jsonObject.get("c");
|
||||||
|
endTime = (long) jsonObject.get("e");
|
||||||
|
status = (int) jsonObject.get("s");
|
||||||
|
pin = (String) jsonObject.get("p");
|
||||||
|
type = (int) jsonObject.get("ty");
|
||||||
|
JSONArray array = (JSONArray) jsonObject.get("ts");
|
||||||
|
targetIds = new ArrayList<>();
|
||||||
|
if (array == null) {
|
||||||
|
targetIds.add((String) jsonObject.get("t"));
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < array.size(); i++) {
|
||||||
|
if (array.get(i) instanceof String) {
|
||||||
|
targetIds.add((String) array.get(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
audioOnly = (int)jsonObject.get("a") > 0;
|
||||||
|
}
|
||||||
|
} catch (ParseException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,133 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2020 WildFireChat. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020 WildFireChat. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
|
import io.netty.util.internal.StringUtil;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
import org.json.simple.parser.ParseException;
|
||||||
|
|
||||||
|
import java.util.Base64;
|
||||||
|
|
||||||
|
public class CardMessageContent extends MessageContent {
|
||||||
|
/**
|
||||||
|
* 0,用户;1,群组;2,聊天室;3,频道
|
||||||
|
*/
|
||||||
|
private int type;
|
||||||
|
private String target;
|
||||||
|
// 用户名,一般是type为用户时使用
|
||||||
|
private String name;
|
||||||
|
private String displayName;
|
||||||
|
private String portrait;
|
||||||
|
private String from;
|
||||||
|
|
||||||
|
public CardMessageContent() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public CardMessageContent(int type, String target, String displayName, String portrait, String from) {
|
||||||
|
this.type = type;
|
||||||
|
this.target = target;
|
||||||
|
this.displayName = displayName;
|
||||||
|
this.portrait = portrait;
|
||||||
|
this.from = from;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTarget() {
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTarget(String target) {
|
||||||
|
this.target = target;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDisplayName() {
|
||||||
|
return displayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDisplayName(String displayName) {
|
||||||
|
this.displayName = displayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPortrait() {
|
||||||
|
return portrait;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPortrait(String portrait) {
|
||||||
|
this.portrait = portrait;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getType() {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(int type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFrom() {
|
||||||
|
return from;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFrom(String from) {
|
||||||
|
this.from = from;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getContentType() {
|
||||||
|
return ProtoConstants.ContentType.Name_Card;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPersistFlag() {
|
||||||
|
return ProtoConstants.PersistFlag.Persist_And_Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessagePayload encode() {
|
||||||
|
MessagePayload payload = super.encodeBase();
|
||||||
|
payload.setContent(target);
|
||||||
|
JSONObject objWrite = new JSONObject();
|
||||||
|
objWrite.put("t", type);
|
||||||
|
objWrite.put("n", name);
|
||||||
|
objWrite.put("d", displayName);
|
||||||
|
objWrite.put("p", portrait);
|
||||||
|
objWrite.put("f", from);
|
||||||
|
|
||||||
|
payload.setBase64edData(Base64.getEncoder().encodeToString(objWrite.toString().getBytes()));
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decode(MessagePayload payload) {
|
||||||
|
target = payload.getContent();
|
||||||
|
try {
|
||||||
|
if (!StringUtil.isNullOrEmpty(payload.getBase64edData())) {
|
||||||
|
JSONObject jsonObject = (JSONObject) new JSONParser().parse(new String(Base64.getDecoder().decode(payload.getBase64edData())));
|
||||||
|
type = (int) jsonObject.get("t");
|
||||||
|
name = (String) jsonObject.get("n");
|
||||||
|
displayName = (String) jsonObject.get("d");
|
||||||
|
portrait = (String) jsonObject.get("p");
|
||||||
|
from = (String) jsonObject.get("f");
|
||||||
|
}
|
||||||
|
} catch (ParseException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2020 WildFireChat. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
|
|
||||||
|
public class FileMessageContent extends MediaMessageContent {
|
||||||
|
private String name;
|
||||||
|
private int size;
|
||||||
|
private static final String FILE_NAME_PREFIX = "[文件] ";
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getContentType() {
|
||||||
|
return ProtoConstants.ContentType.File;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPersistFlag() {
|
||||||
|
return ProtoConstants.PersistFlag.Persist_And_Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessagePayload encode() {
|
||||||
|
MessagePayload payload = super.encodeBase();
|
||||||
|
payload.setSearchableContent(name);
|
||||||
|
payload.setContent(size + "");
|
||||||
|
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSize() {
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSize(int size) {
|
||||||
|
this.size = size;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decode(MessagePayload payload) {
|
||||||
|
super.decodeBase(payload);
|
||||||
|
|
||||||
|
if (payload.getSearchableContent().startsWith(FILE_NAME_PREFIX)) {
|
||||||
|
name = payload.getSearchableContent().substring(payload.getSearchableContent().indexOf(FILE_NAME_PREFIX) + FILE_NAME_PREFIX.length());
|
||||||
|
} else {
|
||||||
|
name = payload.getSearchableContent();
|
||||||
|
}
|
||||||
|
size = Integer.parseInt(payload.getContent());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getMediaType() {
|
||||||
|
return ProtoConstants.MessageMediaType.FILE;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2020 WildFireChat. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
|
|
||||||
|
import java.util.Base64;
|
||||||
|
|
||||||
|
public class ImageMessageContent extends MediaMessageContent {
|
||||||
|
private byte[] thumbnailBytes;
|
||||||
|
|
||||||
|
|
||||||
|
public void setThumbnailBytes(byte[] thumbnailBytes) {
|
||||||
|
this.thumbnailBytes = thumbnailBytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] getThumbnailBytes() {
|
||||||
|
return thumbnailBytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getContentType() {
|
||||||
|
return ProtoConstants.ContentType.Image;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPersistFlag() {
|
||||||
|
return ProtoConstants.PersistFlag.Persist_And_Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessagePayload encode() {
|
||||||
|
MessagePayload payload = super.encodeBase();
|
||||||
|
payload.setSearchableContent("[图片]");
|
||||||
|
payload.setBase64edData(Base64.getEncoder().encodeToString(thumbnailBytes));
|
||||||
|
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decode(MessagePayload payload) {
|
||||||
|
super.decodeBase(payload);
|
||||||
|
thumbnailBytes = Base64.getDecoder().decode(payload.getBase64edData());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getMediaType() {
|
||||||
|
return ProtoConstants.MessageMediaType.IMAGE;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2020 WildFireChat. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
|
import io.netty.util.internal.StringUtil;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
import org.json.simple.parser.ParseException;
|
||||||
|
|
||||||
|
import java.util.Base64;
|
||||||
|
|
||||||
|
public class LinkMessageContent extends MessageContent {
|
||||||
|
private String title;
|
||||||
|
private String contentDigest;
|
||||||
|
private String url;
|
||||||
|
private String thumbnailUrl;
|
||||||
|
|
||||||
|
public LinkMessageContent() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public LinkMessageContent(String title, String url) {
|
||||||
|
this.title = title;
|
||||||
|
this.url = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContentDigest() {
|
||||||
|
return contentDigest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContentDigest(String contentDigest) {
|
||||||
|
this.contentDigest = contentDigest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTitle(String title) {
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUrl() {
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUrl(String url) {
|
||||||
|
this.url = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getThumbnailUrl() {
|
||||||
|
return thumbnailUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setThumbnailUrl(String thumbnailUrl) {
|
||||||
|
this.thumbnailUrl = thumbnailUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getContentType() {
|
||||||
|
return ProtoConstants.ContentType.Link;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPersistFlag() {
|
||||||
|
return ProtoConstants.PersistFlag.Persist_And_Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessagePayload encode() {
|
||||||
|
MessagePayload payload = super.encodeBase();
|
||||||
|
|
||||||
|
|
||||||
|
payload.setSearchableContent(title);
|
||||||
|
JSONObject objWrite = new JSONObject();
|
||||||
|
objWrite.put("d", contentDigest);
|
||||||
|
objWrite.put("u", url);
|
||||||
|
objWrite.put("t", thumbnailUrl);
|
||||||
|
payload.setBase64edData(Base64.getEncoder().encodeToString(objWrite.toString().getBytes()));
|
||||||
|
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decode(MessagePayload payload) {
|
||||||
|
title = payload.getSearchableContent();
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (!StringUtil.isNullOrEmpty(payload.getBase64edData())) {
|
||||||
|
JSONObject jsonObject = (JSONObject) new JSONParser().parse(new String(Base64.getDecoder().decode(payload.getBase64edData())));
|
||||||
|
contentDigest = (String) jsonObject.get("d");
|
||||||
|
url = (String) jsonObject.get("u");
|
||||||
|
thumbnailUrl = (String) jsonObject.get("t");
|
||||||
|
}
|
||||||
|
} catch (ParseException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2020 WildFireChat. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
|
import io.netty.util.internal.StringUtil;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
import org.json.simple.parser.ParseException;
|
||||||
|
|
||||||
|
import java.util.Base64;
|
||||||
|
|
||||||
|
public class LocationMessageContent extends MessageContent {
|
||||||
|
private String title;
|
||||||
|
public byte[] thumbnailByte;
|
||||||
|
private double longitude;
|
||||||
|
private double latitude;
|
||||||
|
|
||||||
|
public LocationMessageContent() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTitle(String title) {
|
||||||
|
this.title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] getThumbnailByte() {
|
||||||
|
return thumbnailByte;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setThumbnailByte(byte[] thumbnailByte) {
|
||||||
|
this.thumbnailByte = thumbnailByte;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getLongitude() {
|
||||||
|
return longitude;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLongitude(double longitude) {
|
||||||
|
this.longitude = longitude;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getLatitude() {
|
||||||
|
return latitude;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLatitude(double latitude) {
|
||||||
|
this.latitude = latitude;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getContentType() {
|
||||||
|
return ProtoConstants.ContentType.Location;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPersistFlag() {
|
||||||
|
return ProtoConstants.PersistFlag.Persist_And_Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessagePayload encode() {
|
||||||
|
MessagePayload payload = super.encodeBase();
|
||||||
|
payload.setSearchableContent(title);
|
||||||
|
payload.setBase64edData(Base64.getEncoder().encodeToString(this.thumbnailByte));
|
||||||
|
|
||||||
|
JSONObject objWrite = new JSONObject();
|
||||||
|
objWrite.put("lat", latitude);
|
||||||
|
objWrite.put("long", longitude);
|
||||||
|
|
||||||
|
payload.setContent(objWrite.toString());
|
||||||
|
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decode(MessagePayload payload) {
|
||||||
|
if (!StringUtil.isNullOrEmpty(payload.getBase64edData())) {
|
||||||
|
this.thumbnailByte = Base64.getDecoder().decode(payload.getBase64edData());
|
||||||
|
}
|
||||||
|
title = payload.getSearchableContent();
|
||||||
|
try {
|
||||||
|
if (payload.getContent() != null) {
|
||||||
|
JSONObject jsonObject = (JSONObject) new JSONParser().parse(payload.getContent());
|
||||||
|
latitude = (double) jsonObject.get("lat");
|
||||||
|
longitude = (double) jsonObject.get("long");
|
||||||
|
}
|
||||||
|
} catch (ParseException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
|
|
||||||
|
abstract public class MediaMessageContent extends MessageContent {
|
||||||
|
private String remoteMediaUrl;
|
||||||
|
|
||||||
|
public String getRemoteMediaUrl() {
|
||||||
|
return remoteMediaUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRemoteMediaUrl(String remoteMediaUrl) {
|
||||||
|
this.remoteMediaUrl = remoteMediaUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected MessagePayload encodeBase() {
|
||||||
|
MessagePayload payload = super.encodeBase();
|
||||||
|
payload.setRemoteMediaUrl(remoteMediaUrl);
|
||||||
|
payload.setMediaType(getMediaType());
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract int getMediaType();
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public abstract class MessageContent {
|
||||||
|
private int mentionedType;
|
||||||
|
private List<String> mentionedTargets;
|
||||||
|
private String extra;
|
||||||
|
public MessageContent mentionedType(int mentionedType) {
|
||||||
|
this.mentionedType = mentionedType;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
public MessageContent mentionedTargets(List<String> mentionedTargets) {
|
||||||
|
this.mentionedTargets = mentionedTargets;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MessageContent extra(String extra) {
|
||||||
|
this.extra = extra;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected MessagePayload encodeBase() {
|
||||||
|
MessagePayload payload = new MessagePayload();
|
||||||
|
payload.setType(getContentType());
|
||||||
|
payload.setPersistFlag(getPersistFlag());
|
||||||
|
payload.setMentionedType(mentionedType);
|
||||||
|
payload.setMentionedTarget(mentionedTargets);
|
||||||
|
payload.setExtra(extra);
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void decodeBase(MessagePayload payload) {
|
||||||
|
this.mentionedType = payload.getMentionedType();
|
||||||
|
this.mentionedTargets = payload.getMentionedTarget();
|
||||||
|
this.extra = payload.getExtra();
|
||||||
|
}
|
||||||
|
abstract public int getContentType();
|
||||||
|
abstract public int getPersistFlag();
|
||||||
|
abstract public MessagePayload encode();
|
||||||
|
abstract public void decode(MessagePayload payload);
|
||||||
|
}
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.Conversation;
|
||||||
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
|
import cn.wildfirechat.proto.WFCMessage;
|
||||||
|
import cn.wildfirechat.sdk.model.Message;
|
||||||
|
import cn.wildfirechat.sdk.utilities.ClassUtil;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.lang.reflect.Modifier;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
public class MessageContentFactory {
|
||||||
|
private static final Map<Integer, Class<MessageContent>> contentClassMap = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
static {
|
||||||
|
registerAllMessageContent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Message decodeMessage(WFCMessage.Message protoMessage) {
|
||||||
|
Message message = new Message();
|
||||||
|
message.content = decodeMessageContent(protoMessage.getContent());
|
||||||
|
WFCMessage.Conversation protoConversation = protoMessage.getConversation();
|
||||||
|
message.conversation = new Conversation(protoConversation.getType(), protoConversation.getTarget(), protoConversation.getLine());
|
||||||
|
message.messageUid = protoMessage.getMessageId();
|
||||||
|
message.sender = protoMessage.getFromUser();
|
||||||
|
message.serverTime = protoMessage.getServerTimestamp();
|
||||||
|
message.toUsers = protoMessage.getToList();
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MessageContent decodeMessageContent(WFCMessage.MessageContent protoMessageContent) {
|
||||||
|
MessagePayload payload = MessagePayload.fromProtoMessageContent(protoMessageContent);
|
||||||
|
return decodeMessageContent(payload);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MessageContent decodeMessageContent(MessagePayload messagePayload) {
|
||||||
|
Class<MessageContent> cls = contentClassMap.get(messagePayload.getType());
|
||||||
|
MessageContent messageContent;
|
||||||
|
if(cls != null) {
|
||||||
|
try {
|
||||||
|
messageContent = cls.newInstance();
|
||||||
|
} catch (InstantiationException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
messageContent = new UnknownMessageContent();
|
||||||
|
}
|
||||||
|
messageContent.decodeBase(messagePayload);
|
||||||
|
messageContent.decode(messagePayload);
|
||||||
|
return messageContent;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void registerAllMessageContent() {
|
||||||
|
try {
|
||||||
|
for (Class cls : ClassUtil.getAllAssignedClass(MessageContent.class)) {
|
||||||
|
if(!Modifier.isAbstract(cls.getModifiers())) {
|
||||||
|
try {
|
||||||
|
MessageContent content = (MessageContent)cls.newInstance();
|
||||||
|
contentClassMap.put(content.getContentType(), cls);
|
||||||
|
} catch (InstantiationException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+111
@@ -0,0 +1,111 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2022 WildFireChat. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
import org.json.simple.parser.ParseException;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Base64;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class MultiCallOngoingMessageContent extends MessageContent {
|
||||||
|
private String callId;
|
||||||
|
private String initiator;
|
||||||
|
private boolean audioOnly;
|
||||||
|
private List<String> targets;
|
||||||
|
|
||||||
|
public MultiCallOngoingMessageContent() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public MultiCallOngoingMessageContent(String callId, String initiator, boolean audioOnly, List<String> targets) {
|
||||||
|
this.callId = callId;
|
||||||
|
this.initiator = initiator;
|
||||||
|
this.audioOnly = audioOnly;
|
||||||
|
this.targets = targets;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getContentType() {
|
||||||
|
return ProtoConstants.ContentType.Call_Multi_Call_Ongoing;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPersistFlag() {
|
||||||
|
return ProtoConstants.PersistFlag.Transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessagePayload encode() {
|
||||||
|
MessagePayload payload = super.encodeBase();
|
||||||
|
payload.setContent(callId);
|
||||||
|
JSONObject object = new JSONObject();
|
||||||
|
object.put("initiator", this.initiator);
|
||||||
|
JSONArray arr = new JSONArray();
|
||||||
|
for (int i = 0; i < targets.size(); i++) {
|
||||||
|
arr.add(i, targets.get(i));
|
||||||
|
}
|
||||||
|
object.put("targets", arr);
|
||||||
|
object.put("audioOnly", this.audioOnly ? 1 : 0);
|
||||||
|
payload.setBase64edData(Base64.getEncoder().encodeToString(object.toString().getBytes()));
|
||||||
|
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decode(MessagePayload payload) {
|
||||||
|
this.callId = payload.getContent();
|
||||||
|
try {
|
||||||
|
JSONObject object = (JSONObject) new JSONParser().parse(new String(Base64.getDecoder().decode(payload.getBase64edData())));
|
||||||
|
this.initiator = (String) object.get("initiator");
|
||||||
|
this.targets = new ArrayList<>();
|
||||||
|
JSONArray array = (JSONArray) object.get("targets");
|
||||||
|
if (array != null) {
|
||||||
|
for (int i = 0; i < array.size(); i++) {
|
||||||
|
targets.add((String) array.get(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.audioOnly = (int)object.get("audioOnly") == 1;
|
||||||
|
} catch (ParseException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCallId() {
|
||||||
|
return callId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCallId(String callId) {
|
||||||
|
this.callId = callId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getInitiator() {
|
||||||
|
return initiator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInitiator(String initiator) {
|
||||||
|
this.initiator = initiator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAudioOnly() {
|
||||||
|
return audioOnly;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAudioOnly(boolean audioOnly) {
|
||||||
|
this.audioOnly = audioOnly;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getTargets() {
|
||||||
|
return targets;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTargets(List<String> targets) {
|
||||||
|
this.targets = targets;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2024 WildFireChat. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
import org.json.simple.parser.ParseException;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Base64;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class NotDeliveredMessageContent extends MessageContent {
|
||||||
|
// 请求的类型,1 发送消息,2 撤回消息,3 删除消息
|
||||||
|
private int type;
|
||||||
|
|
||||||
|
// 发送的消息 uid
|
||||||
|
private long messageUid;
|
||||||
|
|
||||||
|
// 是全部失败,还是部分失败
|
||||||
|
private boolean allFailure;
|
||||||
|
|
||||||
|
// 部分失败时,失败的用户 id 列表
|
||||||
|
private List<String> userIds;
|
||||||
|
|
||||||
|
// 归属IM服务请求桥接服务出现的错误,有可能是桥接服务没有配置,或者不可用。
|
||||||
|
private int localImErrorCode;
|
||||||
|
|
||||||
|
// 归属桥接服务出现的错误
|
||||||
|
private int localBridgeErrorCode;
|
||||||
|
|
||||||
|
// 远端桥接服务出现的错误
|
||||||
|
private int remoteBridgeErrorCode;
|
||||||
|
|
||||||
|
// 远端IM服务出现的错误
|
||||||
|
private int remoteServerErrorCode;
|
||||||
|
|
||||||
|
// 错误提示信息
|
||||||
|
private String errorMessage;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getContentType() {
|
||||||
|
return ProtoConstants.ContentType.Not_Delivered;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPersistFlag() {
|
||||||
|
return ProtoConstants.PersistFlag.Persist;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessagePayload encode() {
|
||||||
|
MessagePayload payload = super.encodeBase();
|
||||||
|
JSONObject obj = new JSONObject();
|
||||||
|
obj.put("mid", this.messageUid);
|
||||||
|
obj.put("all", this.allFailure);
|
||||||
|
obj.put("us", this.userIds);
|
||||||
|
obj.put("lme", this.localImErrorCode);
|
||||||
|
obj.put("lbe", this.localBridgeErrorCode);
|
||||||
|
obj.put("rbe", this.remoteBridgeErrorCode);
|
||||||
|
obj.put("rme", this.remoteServerErrorCode);
|
||||||
|
obj.put("em", this.errorMessage);
|
||||||
|
payload.setBase64edData(Base64.getEncoder().encodeToString(obj.toString().getBytes()));
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decode(MessagePayload payload) {
|
||||||
|
try {
|
||||||
|
|
||||||
|
JSONObject obj = (JSONObject) new JSONParser().parse(new String(Base64.getDecoder().decode(payload.getBase64edData())));
|
||||||
|
this.messageUid = (long) obj.get("mid");
|
||||||
|
this.allFailure = (boolean) obj.get("all");
|
||||||
|
this.userIds = new ArrayList<>();
|
||||||
|
JSONArray arr = (JSONArray) obj.get("us");
|
||||||
|
if (arr != null) {
|
||||||
|
for (int i = 0; i < arr.size(); i++) {
|
||||||
|
this.userIds.add((String) arr.get(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.localImErrorCode = (int) obj.get("lme");
|
||||||
|
this.localBridgeErrorCode = (int) obj.get("lbe");
|
||||||
|
this.remoteBridgeErrorCode = (int) obj.get("rbe");
|
||||||
|
this.remoteServerErrorCode = (int) obj.get("rme");
|
||||||
|
this.errorMessage = (String) obj.get("em");
|
||||||
|
} catch (ParseException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2021 WildFireChat. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
|
public class PTTSoundMessageContent extends SoundMessageContent {
|
||||||
|
|
||||||
|
public PTTSoundMessageContent() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessagePayload encode() {
|
||||||
|
MessagePayload payload = super.encode();
|
||||||
|
payload.setSearchableContent("[对讲语音]");
|
||||||
|
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getContentType() {
|
||||||
|
return ProtoConstants.ContentType.Ptt_Voice;
|
||||||
|
}
|
||||||
|
}
|
||||||
+46
-17
@@ -1,4 +1,4 @@
|
|||||||
package cn.wildfirechat.messagecontentbuilder;
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
import cn.wildfirechat.pojos.MessagePayload;
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
import cn.wildfirechat.proto.ProtoConstants;
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
@@ -9,7 +9,7 @@ import org.json.simple.JSONObject;
|
|||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
|
|
||||||
public class RichNotificationContentBuilder extends MessageContentBuilder{
|
public class RichNotificationMessageContent extends MessageContent {
|
||||||
private String title;
|
private String title;
|
||||||
private String desc;
|
private String desc;
|
||||||
private String remark;
|
private String remark;
|
||||||
@@ -19,34 +19,51 @@ public class RichNotificationContentBuilder extends MessageContentBuilder{
|
|||||||
private String exUrl;
|
private String exUrl;
|
||||||
private String appId;
|
private String appId;
|
||||||
|
|
||||||
public static RichNotificationContentBuilder newBuilder(String title, String desc, String exUrl) {
|
//必须有个空的构造函数
|
||||||
RichNotificationContentBuilder builder = new RichNotificationContentBuilder();
|
public RichNotificationMessageContent() {
|
||||||
builder.title = title;
|
|
||||||
builder.desc = desc;
|
|
||||||
builder.exUrl = exUrl;
|
|
||||||
return builder;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public RichNotificationContentBuilder remark(String remark) {
|
public RichNotificationMessageContent(String title, String desc, String exUrl) {
|
||||||
|
this.title = title;
|
||||||
|
this.desc = desc;
|
||||||
|
this.exUrl = exUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RichNotificationMessageContent title(String title) {
|
||||||
|
this.title = title;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RichNotificationMessageContent desc(String desc) {
|
||||||
|
this.desc = desc;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RichNotificationMessageContent exUrl(String exUrl) {
|
||||||
|
this.exUrl = exUrl;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RichNotificationMessageContent remark(String remark) {
|
||||||
this.remark = remark;
|
this.remark = remark;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
public RichNotificationContentBuilder exName(String exName) {
|
public RichNotificationMessageContent exName(String exName) {
|
||||||
this.exName = exName;
|
this.exName = exName;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
public RichNotificationContentBuilder exPortrait(String exPortrait) {
|
public RichNotificationMessageContent exPortrait(String exPortrait) {
|
||||||
this.exPortrait = exPortrait;
|
this.exPortrait = exPortrait;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
public RichNotificationContentBuilder appId(String appId) {
|
public RichNotificationMessageContent appId(String appId) {
|
||||||
this.appId = appId;
|
this.appId = appId;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
public RichNotificationContentBuilder addItem(String key, String value) {
|
public RichNotificationMessageContent addItem(String key, String value) {
|
||||||
return addItem(key, value, null);
|
return addItem(key, value, null);
|
||||||
}
|
}
|
||||||
public RichNotificationContentBuilder addItem(String key, String value, String color) {
|
public RichNotificationMessageContent addItem(String key, String value, String color) {
|
||||||
if(this.datas == null) {
|
if(this.datas == null) {
|
||||||
this.datas = new JSONArray();
|
this.datas = new JSONArray();
|
||||||
}
|
}
|
||||||
@@ -61,10 +78,18 @@ public class RichNotificationContentBuilder extends MessageContentBuilder{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MessagePayload build() {
|
public int getContentType() {
|
||||||
|
return ProtoConstants.ContentType.Rich_Notification;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPersistFlag() {
|
||||||
|
return ProtoConstants.PersistFlag.Persist_And_Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessagePayload encode() {
|
||||||
MessagePayload payload = encodeBase();
|
MessagePayload payload = encodeBase();
|
||||||
payload.setType(ProtoConstants.ContentType.Rich_Notification);
|
|
||||||
payload.setPersistFlag(ProtoConstants.PersistFlag.Persist_And_Count);
|
|
||||||
payload.setPushContent(title);
|
payload.setPushContent(title);
|
||||||
payload.setContent(desc);
|
payload.setContent(desc);
|
||||||
JSONObject jsonObject = new JSONObject();
|
JSONObject jsonObject = new JSONObject();
|
||||||
@@ -85,4 +110,8 @@ public class RichNotificationContentBuilder extends MessageContentBuilder{
|
|||||||
|
|
||||||
return payload;
|
return payload;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decode(MessagePayload payload) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
|
public class SoundMessageContent extends MediaMessageContent {
|
||||||
|
private int duration;
|
||||||
|
|
||||||
|
//必须有个空的构造函数
|
||||||
|
public SoundMessageContent() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public SoundMessageContent(int duration) {
|
||||||
|
this.duration = duration;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDuration() {
|
||||||
|
return duration;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDuration(int duration) {
|
||||||
|
this.duration = duration;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getContentType() {
|
||||||
|
return ProtoConstants.ContentType.Voice;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPersistFlag() {
|
||||||
|
return ProtoConstants.PersistFlag.Persist_And_Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decode(MessagePayload payload) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessagePayload encode() {
|
||||||
|
MessagePayload payload = encodeBase();
|
||||||
|
JSONObject jsonObject = new JSONObject();
|
||||||
|
jsonObject.put("duration", duration);
|
||||||
|
payload.setContent(jsonObject.toJSONString());
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getMediaType() {
|
||||||
|
return ProtoConstants.MessageMediaType.VOICE;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2020 WildFireChat. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
import org.json.simple.parser.ParseException;
|
||||||
|
|
||||||
|
import java.util.Base64;
|
||||||
|
|
||||||
|
public class StickerMessageContent extends MediaMessageContent {
|
||||||
|
public int width;
|
||||||
|
public int height;
|
||||||
|
|
||||||
|
public int getWidth() {
|
||||||
|
return width;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWidth(int width) {
|
||||||
|
this.width = width;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getHeight() {
|
||||||
|
return height;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHeight(int height) {
|
||||||
|
this.height = height;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessagePayload encode() {
|
||||||
|
MessagePayload payload = super.encodeBase();
|
||||||
|
payload.setSearchableContent("[动态表情]");
|
||||||
|
JSONObject objWrite = new JSONObject();
|
||||||
|
objWrite.put("x", width);
|
||||||
|
objWrite.put("y", height);
|
||||||
|
payload.setBase64edData(Base64.getEncoder().encodeToString(objWrite.toString().getBytes()));
|
||||||
|
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decode(MessagePayload payload) {
|
||||||
|
super.decodeBase(payload);
|
||||||
|
|
||||||
|
try {
|
||||||
|
JSONObject jsonObject = (JSONObject) new JSONParser().parse(new String(Base64.getDecoder().decode(payload.getBase64edData())));
|
||||||
|
width = (int) jsonObject.get("x");
|
||||||
|
height = (int) jsonObject.get("y");
|
||||||
|
} catch (ParseException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getMediaType() {
|
||||||
|
return ProtoConstants.MessageMediaType.STICKER;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getContentType() {
|
||||||
|
return ProtoConstants.ContentType.Sticker;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPersistFlag() {
|
||||||
|
return ProtoConstants.PersistFlag.Persist_And_Count;
|
||||||
|
}
|
||||||
|
}
|
||||||
+52
@@ -0,0 +1,52 @@
|
|||||||
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
|
|
||||||
|
public class StreamTextGeneratedMessageContent extends MessageContent {
|
||||||
|
private String text;
|
||||||
|
private String streamId;
|
||||||
|
|
||||||
|
//必须有个空的构造函数
|
||||||
|
public StreamTextGeneratedMessageContent() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public StreamTextGeneratedMessageContent(String text, String streamId) {
|
||||||
|
this.text = text;
|
||||||
|
this.streamId = streamId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StreamTextGeneratedMessageContent text(String text) {
|
||||||
|
this.text = text;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StreamTextGeneratedMessageContent streamId(String streamId) {
|
||||||
|
this.streamId = streamId;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getContentType() {
|
||||||
|
return ProtoConstants.ContentType.StreamingText_Generated;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPersistFlag() {
|
||||||
|
return ProtoConstants.PersistFlag.Persist_And_Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decode(MessagePayload payload) {
|
||||||
|
this.streamId = payload.getContent();
|
||||||
|
this.text = payload.getSearchableContent();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessagePayload encode() {
|
||||||
|
MessagePayload payload = encodeBase();
|
||||||
|
payload.setSearchableContent(text);
|
||||||
|
payload.setContent(streamId);
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
}
|
||||||
+52
@@ -0,0 +1,52 @@
|
|||||||
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
|
|
||||||
|
public class StreamTextGeneratingMessageContent extends MessageContent {
|
||||||
|
private String text;
|
||||||
|
private String streamId;
|
||||||
|
|
||||||
|
//必须有个空的构造函数
|
||||||
|
public StreamTextGeneratingMessageContent() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public StreamTextGeneratingMessageContent(String text, String streamId) {
|
||||||
|
this.text = text;
|
||||||
|
this.streamId = streamId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StreamTextGeneratingMessageContent text(String text) {
|
||||||
|
this.text = text;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StreamTextGeneratingMessageContent streamId(String streamId) {
|
||||||
|
this.streamId = streamId;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getContentType() {
|
||||||
|
return ProtoConstants.ContentType.StreamingText_Generationg;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPersistFlag() {
|
||||||
|
return ProtoConstants.PersistFlag.Transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decode(MessagePayload payload) {
|
||||||
|
streamId = payload.getContent();
|
||||||
|
text = payload.getSearchableContent();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessagePayload encode() {
|
||||||
|
MessagePayload payload = encodeBase();
|
||||||
|
payload.setSearchableContent(text);
|
||||||
|
payload.setContent(streamId);
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
|
import cn.wildfirechat.sdk.model.QuoteInfo;
|
||||||
|
import org.apache.http.util.TextUtils;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
import org.json.simple.parser.ParseException;
|
||||||
|
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.Base64;
|
||||||
|
|
||||||
|
public class TextMessageContent extends MessageContent {
|
||||||
|
private String text;
|
||||||
|
private QuoteInfo quoteInfo;
|
||||||
|
|
||||||
|
//必须有个空的构造函数
|
||||||
|
public TextMessageContent() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public TextMessageContent(String text) {
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TextMessageContent text(String text) {
|
||||||
|
this.text = text;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getText() {
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setText(String text) {
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public QuoteInfo getQuoteInfo() {
|
||||||
|
return quoteInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setQuoteInfo(QuoteInfo quoteInfo) {
|
||||||
|
this.quoteInfo = quoteInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getContentType() {
|
||||||
|
return ProtoConstants.ContentType.Text;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPersistFlag() {
|
||||||
|
return ProtoConstants.PersistFlag.Persist_And_Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessagePayload encode() {
|
||||||
|
MessagePayload payload = encodeBase();
|
||||||
|
payload.setSearchableContent(text);
|
||||||
|
if(quoteInfo != null) {
|
||||||
|
payload.setBase64edData(Base64.getEncoder().encodeToString(quoteInfo.encode().toJSONString().getBytes(StandardCharsets.UTF_8)));
|
||||||
|
}
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decode(MessagePayload payload) {
|
||||||
|
text = payload.getSearchableContent();
|
||||||
|
if(!TextUtils.isEmpty(payload.getBase64edData())) {
|
||||||
|
String jsonStr = new String(Base64.getDecoder().decode(payload.getBase64edData()), StandardCharsets.UTF_8);
|
||||||
|
try {
|
||||||
|
JSONObject jsonObject = (JSONObject) new JSONParser().parse(jsonStr);
|
||||||
|
quoteInfo = new QuoteInfo();
|
||||||
|
quoteInfo.decode(jsonObject);
|
||||||
|
} catch (ParseException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+48
@@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2020 WildFireChat. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
|
|
||||||
|
public class TipNotificationMessageContent extends MessageContent {
|
||||||
|
public String tip;
|
||||||
|
|
||||||
|
public TipNotificationMessageContent() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTip() {
|
||||||
|
return tip;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTip(String tip) {
|
||||||
|
this.tip = tip;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessagePayload encode() {
|
||||||
|
MessagePayload payload = super.encodeBase();
|
||||||
|
payload.setContent(tip);
|
||||||
|
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decode(MessagePayload payload) {
|
||||||
|
super.decodeBase(payload);
|
||||||
|
tip = payload.getContent();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getContentType() {
|
||||||
|
return ProtoConstants.ContentType.Tip;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPersistFlag() {
|
||||||
|
return ProtoConstants.PersistFlag.Persist;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2020 WildFireChat. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
|
|
||||||
|
public class TypingMessageContent extends MessageContent {
|
||||||
|
public static final int TYPING_TEXT = 0;
|
||||||
|
public static final int TYPING_VOICE = 1;
|
||||||
|
public static final int TYPING_CAMERA = 2;
|
||||||
|
public static final int TYPING_LOCATION = 3;
|
||||||
|
public static final int TYPING_FILE = 4;
|
||||||
|
|
||||||
|
private int typingType;
|
||||||
|
|
||||||
|
public TypingMessageContent() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public TypingMessageContent(int typingType) {
|
||||||
|
this.typingType = typingType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTypingType() {
|
||||||
|
return typingType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTypingType(int typingType) {
|
||||||
|
this.typingType = typingType;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getContentType() {
|
||||||
|
return ProtoConstants.ContentType.Typing;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPersistFlag() {
|
||||||
|
return ProtoConstants.PersistFlag.Transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessagePayload encode() {
|
||||||
|
MessagePayload payload = super.encodeBase();
|
||||||
|
payload.setContent(typingType + "");
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decode(MessagePayload payload) {
|
||||||
|
super.decodeBase(payload);
|
||||||
|
typingType = Integer.parseInt(payload.getContent());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
|
|
||||||
|
public class UnknownMessageContent extends MessageContent {
|
||||||
|
private MessagePayload orignalPayload;
|
||||||
|
|
||||||
|
//必须有个空的构造函数
|
||||||
|
public UnknownMessageContent() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getContentType() {
|
||||||
|
return ProtoConstants.ContentType.Text;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPersistFlag() {
|
||||||
|
return ProtoConstants.PersistFlag.Persist_And_Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessagePayload encode() {
|
||||||
|
return orignalPayload;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decode(MessagePayload payload) {
|
||||||
|
this.orignalPayload = payload;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2020 WildFireChat. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cn.wildfirechat.sdk.messagecontent;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.MessagePayload;
|
||||||
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
import org.json.simple.parser.ParseException;
|
||||||
|
|
||||||
|
import java.util.Base64;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by heavyrain lee on 2017/12/6.
|
||||||
|
*
|
||||||
|
* @refactor dhl
|
||||||
|
* 添加小视频的宽高,时长
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
public class VideoMessageContent extends MediaMessageContent {
|
||||||
|
private byte[] thumbnailBytes;
|
||||||
|
private long duration ;
|
||||||
|
|
||||||
|
//必须有个空的构造函数
|
||||||
|
public VideoMessageContent() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public VideoMessageContent setThumbnailBytes(byte[] thumbnailBytes) {
|
||||||
|
this.thumbnailBytes = thumbnailBytes;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] getThumbnailBytes() {
|
||||||
|
return thumbnailBytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDuration(long duration) {
|
||||||
|
this.duration = duration;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getDuration() {
|
||||||
|
return duration;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getContentType() {
|
||||||
|
return ProtoConstants.ContentType.Video;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPersistFlag() {
|
||||||
|
return ProtoConstants.PersistFlag.Persist_And_Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessagePayload encode() {
|
||||||
|
MessagePayload payload = super.encodeBase();
|
||||||
|
payload.setSearchableContent("[视频]");
|
||||||
|
|
||||||
|
payload.setBase64edData(Base64.getEncoder().encodeToString(thumbnailBytes));
|
||||||
|
|
||||||
|
JSONObject objWrite = new JSONObject();
|
||||||
|
objWrite.put("d", duration);
|
||||||
|
objWrite.put("duration", duration);
|
||||||
|
payload.setContent(objWrite.toJSONString());
|
||||||
|
|
||||||
|
return payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void decode(MessagePayload payload) {
|
||||||
|
super.decodeBase(payload);
|
||||||
|
thumbnailBytes = Base64.getDecoder().decode(payload.getBase64edData());
|
||||||
|
try {
|
||||||
|
JSONObject jsonObject = (JSONObject) new JSONParser().parse(payload.getContent());
|
||||||
|
if(jsonObject.containsKey("d")) {
|
||||||
|
duration = (long) jsonObject.get("d");
|
||||||
|
} else {
|
||||||
|
duration = (long) jsonObject.get("duration");
|
||||||
|
}
|
||||||
|
} catch (ParseException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getMediaType() {
|
||||||
|
return ProtoConstants.MessageMediaType.VIDEO;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package cn.wildfirechat.sdk.model;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.Conversation;
|
||||||
|
import cn.wildfirechat.sdk.messagecontent.MessageContent;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Message {
|
||||||
|
public Conversation conversation;
|
||||||
|
public MessageContent content;
|
||||||
|
public long messageUid;
|
||||||
|
public String sender;
|
||||||
|
public long serverTime;
|
||||||
|
public List<String> toUsers;
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2020 WildFireChat. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cn.wildfirechat.sdk.model;
|
||||||
|
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
|
||||||
|
public class QuoteInfo {
|
||||||
|
private long messageUid;
|
||||||
|
private String userId;
|
||||||
|
private String userDisplayName;
|
||||||
|
private String messageDigest;
|
||||||
|
|
||||||
|
public long getMessageUid() {
|
||||||
|
return messageUid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMessageUid(long messageUid) {
|
||||||
|
this.messageUid = messageUid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUserId() {
|
||||||
|
return userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserId(String userId) {
|
||||||
|
this.userId = userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUserDisplayName() {
|
||||||
|
return userDisplayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserDisplayName(String userDisplayName) {
|
||||||
|
this.userDisplayName = userDisplayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMessageDigest() {
|
||||||
|
return messageDigest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMessageDigest(String messageDigest) {
|
||||||
|
this.messageDigest = messageDigest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public JSONObject encode() {
|
||||||
|
JSONObject object = new JSONObject();
|
||||||
|
object.put("u", messageUid);
|
||||||
|
object.put("i", userId);
|
||||||
|
object.put("n", userDisplayName);
|
||||||
|
object.put("d", messageDigest);
|
||||||
|
return object;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void decode(JSONObject object) {
|
||||||
|
messageUid = (long) object.get("u");
|
||||||
|
userId = (String) object.get("i");
|
||||||
|
userDisplayName = (String) object.get("n");
|
||||||
|
messageDigest = (String) object.get("d");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,234 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of the Wildfire Chat package.
|
||||||
|
* (c) Heavyrain2012 <heavyrain.lee@gmail.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cn.wildfirechat.sdk.utilities;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.net.URLClassLoader;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Enumeration;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.jar.JarEntry;
|
||||||
|
import java.util.jar.JarFile;
|
||||||
|
|
||||||
|
public class ClassUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取同一路径下所有子类或接口实现类
|
||||||
|
*
|
||||||
|
* @param cls
|
||||||
|
* @return
|
||||||
|
* @throws IOException
|
||||||
|
* @throws ClassNotFoundException
|
||||||
|
*/
|
||||||
|
public static List<Class<?>> getAllAssignedClass(Class<?> cls) throws IOException,
|
||||||
|
ClassNotFoundException {
|
||||||
|
List<Class<?>> classes = new ArrayList<Class<?>>();
|
||||||
|
for (Class<?> c : getClasses(cls)) {
|
||||||
|
if (cls.isAssignableFrom(c) && !cls.equals(c)) {
|
||||||
|
classes.add(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return classes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 取得当前类路径下的所有类
|
||||||
|
*
|
||||||
|
* @param cls
|
||||||
|
* @return
|
||||||
|
* @throws IOException
|
||||||
|
* @throws ClassNotFoundException
|
||||||
|
*/
|
||||||
|
public static List<Class<?>> getClasses(Class<?> cls) throws IOException,
|
||||||
|
ClassNotFoundException {
|
||||||
|
String pk = cls.getPackage().getName();
|
||||||
|
// String path = pk.replace('.', '/');
|
||||||
|
// ClassLoader classloader = Thread.currentThread().getContextClassLoader();
|
||||||
|
// URL url = classloader.getResource(path);
|
||||||
|
// String type = url.getProtocol();
|
||||||
|
//
|
||||||
|
// System.out.println("the type is " + type);
|
||||||
|
// System.out.println(url.getPath());
|
||||||
|
//
|
||||||
|
// return getClasses(new File(url.getFile()), pk);
|
||||||
|
List<String> classNames = getClassName(pk, true);
|
||||||
|
List<Class<?>> classes = new ArrayList<>();
|
||||||
|
for (String className :
|
||||||
|
classNames) {
|
||||||
|
if (className.endsWith(".class")) {
|
||||||
|
className = className.substring(0, className.length() - 6);
|
||||||
|
className = className.substring(className.lastIndexOf("/")+1, className.length());
|
||||||
|
}
|
||||||
|
|
||||||
|
classes.add(Class.forName(className));
|
||||||
|
}
|
||||||
|
return classes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 迭代查找类
|
||||||
|
*
|
||||||
|
* @param dir
|
||||||
|
* @param pk
|
||||||
|
* @return
|
||||||
|
* @throws ClassNotFoundException
|
||||||
|
*/
|
||||||
|
private static List<Class<?>> getClasses(File dir, String pk) throws ClassNotFoundException {
|
||||||
|
System.out.println(dir.getAbsolutePath());
|
||||||
|
List<Class<?>> classes = new ArrayList<Class<?>>();
|
||||||
|
if (!dir.exists()) {
|
||||||
|
return classes;
|
||||||
|
}
|
||||||
|
for (File f : dir.listFiles()) {
|
||||||
|
if (f.isDirectory()) {
|
||||||
|
classes.addAll(getClasses(f, pk + "." + f.getName()));
|
||||||
|
}
|
||||||
|
String name = f.getName();
|
||||||
|
if (name.endsWith(".class")) {
|
||||||
|
classes.add(Class.forName(pk + "." + name.substring(0, name.length() - 6)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return classes;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取某包下所有类
|
||||||
|
* @param packageName 包名
|
||||||
|
* @param childPackage 是否遍历子包
|
||||||
|
* @return 类的完整名称
|
||||||
|
*/
|
||||||
|
public static List<String> getClassName(String packageName, boolean childPackage) {
|
||||||
|
List<String> fileNames = null;
|
||||||
|
ClassLoader loader = Thread.currentThread().getContextClassLoader();
|
||||||
|
String packagePath = packageName.replace(".", "/");
|
||||||
|
URL url = loader.getResource(packagePath);
|
||||||
|
if (url != null) {
|
||||||
|
String type = url.getProtocol();
|
||||||
|
if (type.equals("file")) {
|
||||||
|
fileNames = getClassNameByFile(url.getPath(), null, childPackage);
|
||||||
|
} else if (type.equals("jar")) {
|
||||||
|
fileNames = getClassNameByJar(url.getPath(), childPackage);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fileNames = getClassNameByJars(((URLClassLoader) loader).getURLs(), packagePath, childPackage);
|
||||||
|
}
|
||||||
|
return fileNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从项目文件获取某包下所有类
|
||||||
|
* @param filePath 文件路径
|
||||||
|
* @param className 类名集合
|
||||||
|
* @param childPackage 是否遍历子包
|
||||||
|
* @return 类的完整名称
|
||||||
|
*/
|
||||||
|
private static List<String> getClassNameByFile(String filePath, List<String> className, boolean childPackage) {
|
||||||
|
List<String> myClassName = new ArrayList<String>();
|
||||||
|
File file = new File(filePath);
|
||||||
|
File[] childFiles = file.listFiles();
|
||||||
|
for (File childFile : childFiles) {
|
||||||
|
if (childFile.isDirectory()) {
|
||||||
|
if (childPackage) {
|
||||||
|
myClassName.addAll(getClassNameByFile(childFile.getPath(), myClassName, childPackage));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
String childFilePath = childFile.getPath();
|
||||||
|
if (childFilePath.endsWith(".class")) {
|
||||||
|
if (childFilePath.indexOf("\\classes") >= 0 || childFilePath.indexOf("/classes") >= 0) {
|
||||||
|
int start = childFilePath.indexOf("\\classes");
|
||||||
|
if (start == -1) {
|
||||||
|
start = childFilePath.indexOf("/classes");
|
||||||
|
}
|
||||||
|
childFilePath = childFilePath.substring(start + 9, childFilePath.lastIndexOf("."));
|
||||||
|
}
|
||||||
|
childFilePath = childFilePath.replace("\\", ".");
|
||||||
|
childFilePath = childFilePath.replace("/", ".");
|
||||||
|
myClassName.add(childFilePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return myClassName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从jar获取某包下所有类
|
||||||
|
* @param jarPath jar文件路径
|
||||||
|
* @param childPackage 是否遍历子包
|
||||||
|
* @return 类的完整名称
|
||||||
|
*/
|
||||||
|
private static List<String> getClassNameByJar(String jarPath, boolean childPackage) {
|
||||||
|
List<String> myClassName = new ArrayList<String>();
|
||||||
|
String[] jarInfo = jarPath.split("!");
|
||||||
|
String jarFilePath = jarInfo[0].substring(jarInfo[0].indexOf("/"));
|
||||||
|
String packagePath = jarInfo[1].substring(1);
|
||||||
|
try {
|
||||||
|
JarFile jarFile = new JarFile(jarFilePath);
|
||||||
|
Enumeration<JarEntry> entrys = jarFile.entries();
|
||||||
|
while (entrys.hasMoreElements()) {
|
||||||
|
JarEntry jarEntry = entrys.nextElement();
|
||||||
|
String entryName = jarEntry.getName();
|
||||||
|
|
||||||
|
if (entryName.endsWith(".class")) {
|
||||||
|
if (childPackage) {
|
||||||
|
if (entryName.startsWith(packagePath)) {
|
||||||
|
entryName = entryName.replace("/", ".").substring(0, entryName.lastIndexOf("."));
|
||||||
|
myClassName.add(entryName);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
int index = entryName.lastIndexOf("/");
|
||||||
|
String myPackagePath;
|
||||||
|
if (index != -1) {
|
||||||
|
myPackagePath = entryName.substring(0, index);
|
||||||
|
} else {
|
||||||
|
myPackagePath = entryName;
|
||||||
|
}
|
||||||
|
if (myPackagePath.equals(packagePath)) {
|
||||||
|
entryName = entryName.replace("/", ".").substring(0, entryName.lastIndexOf("."));
|
||||||
|
myClassName.add(entryName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return myClassName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从所有jar中搜索该包,并获取该包下所有类
|
||||||
|
* @param urls URL集合
|
||||||
|
* @param packagePath 包路径
|
||||||
|
* @param childPackage 是否遍历子包
|
||||||
|
* @return 类的完整名称
|
||||||
|
*/
|
||||||
|
private static List<String> getClassNameByJars(URL[] urls, String packagePath, boolean childPackage) {
|
||||||
|
List<String> myClassName = new ArrayList<String>();
|
||||||
|
if (urls != null) {
|
||||||
|
for (int i = 0; i < urls.length; i++) {
|
||||||
|
URL url = urls[i];
|
||||||
|
String urlPath = url.getPath();
|
||||||
|
// 不必搜索classes文件夹
|
||||||
|
if (urlPath.endsWith("classes/")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
String jarPath = urlPath + "!/" + packagePath;
|
||||||
|
myClassName.addAll(getClassNameByJar(jarPath, childPackage));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return myClassName;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package cn.wildfirechat.sdk.utilities;
|
package cn.wildfirechat.sdk.utilities;
|
||||||
|
|
||||||
|
import cn.wildfirechat.pojos.mesh.MeshRestResult;
|
||||||
import cn.wildfirechat.sdk.model.IMResult;
|
import cn.wildfirechat.sdk.model.IMResult;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
@@ -15,6 +16,22 @@ public class JsonUtils {
|
|||||||
return gson.fromJson(content, builder.build());
|
return gson.fromJson(content, builder.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static <T> MeshRestResult<T> fromJsonObject2(String content, Class<T> clazz) {
|
||||||
|
TypeBuilder builder = TypeBuilder.newInstance(MeshRestResult.class);
|
||||||
|
if (!clazz.equals(Void.class)) {
|
||||||
|
builder.addTypeParam(clazz);
|
||||||
|
}
|
||||||
|
return gson.fromJson(content, builder.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T, K> T fromJsonObject3(String content, Class<T> cls, Class<K> clazz) {
|
||||||
|
TypeBuilder builder = TypeBuilder.newInstance(cls);
|
||||||
|
if (!clazz.equals(Void.class)) {
|
||||||
|
builder.addTypeParam(clazz);
|
||||||
|
}
|
||||||
|
return gson.fromJson(content, builder.build());
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean isNullOrEmpty(String str) {
|
public static boolean isNullOrEmpty(String str) {
|
||||||
return str == null || str.isEmpty();
|
return str == null || str.isEmpty();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user