Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5a213704c5 | ||
|
|
5a52a7d553 | ||
|
|
d751a7080b | ||
|
|
68ae7dbd58 | ||
|
|
10fce4baad | ||
|
|
c69906e249 | ||
|
|
1aed4b1d37 | ||
|
|
f2601fc65d | ||
|
|
4895f03a68 | ||
|
|
1d234a3575 | ||
|
|
386d0b9c57 | ||
|
|
3ab1c7553d | ||
|
|
85a4c806c1 | ||
|
|
9aac87b7a1 | ||
|
|
ce21441772 | ||
|
|
0a3516cdf2 | ||
|
|
135a9ed0a8 | ||
|
|
73e3447b39 | ||
|
|
394b9119fa | ||
|
|
ebb05351a8 | ||
|
|
c4421fc9ed | ||
|
|
a906bf352d | ||
|
|
37f1772705 | ||
|
|
0a05503c78 | ||
|
|
a702602758 |
@@ -119,6 +119,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版本添加了是否允许客户端发送群操作通知的配置。如果您在客户端自定义群通知,需要在服务器端配置允许,没有使用自定义群操作通知的不受影响。***
|
||||||
|
|||||||
@@ -126,6 +126,12 @@ message.global_mute_exception_types 401,402,403,404,405,407,408,410,411
|
|||||||
## 离线用户推送过期天数,0是永不过期,建议配置为7天。
|
## 离线用户推送过期天数,0是永不过期,建议配置为7天。
|
||||||
message.push_expired_days 7
|
message.push_expired_days 7
|
||||||
|
|
||||||
|
## 当会话静音/全局静音/PC在线静音时,普通消息都不会有推送,如果有某些消息类型需要此时保持推送,可以配置到这里。此配置对消息免打扰时段无效。
|
||||||
|
## 此配置只影响远程推送,需要客户端处理客户端在线且在后台收到此消息的处理,需要针对这些消息类型加上本地通知。
|
||||||
|
## 强制推送消息的MessagePayload中pushContent和pushData至少要存在一个才可以推送。
|
||||||
|
## 消息类型以英文逗号分割。
|
||||||
|
#message.force_push_types 401,402
|
||||||
|
|
||||||
## 群发消息(包括server api群发和全局频道群发)时,目标用户是否来自于t_user表。如果使用野火托管用户信息,请设置为true,否则设置为false。
|
## 群发消息(包括server api群发和全局频道群发)时,目标用户是否来自于t_user表。如果使用野火托管用户信息,请设置为true,否则设置为false。
|
||||||
message.broadcast.target_from_user_table true
|
message.broadcast.target_from_user_table true
|
||||||
|
|
||||||
@@ -142,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
|
||||||
|
|
||||||
@@ -204,6 +214,9 @@ group.visible_quit_or_kickoff_notification 0
|
|||||||
## 是否禁止陌生人拉人入群,默认为false
|
## 是否禁止陌生人拉人入群,默认为false
|
||||||
group.disable_stranger_invite false
|
group.disable_stranger_invite false
|
||||||
|
|
||||||
|
## 群组信息是否标记删除
|
||||||
|
group.enable_mark_deletion true
|
||||||
|
|
||||||
## 隐藏用户信息属性类型,2是性别,3是电话号码,4是邮箱,5是地址,6是公司信息,7是社交账号,8是Extra信息。当需要隐藏多个时以英文逗号分开;
|
## 隐藏用户信息属性类型,2是性别,3是电话号码,4是邮箱,5是地址,6是公司信息,7是社交账号,8是Extra信息。当需要隐藏多个时以英文逗号分开;
|
||||||
## 本配置是为了提高安全性,避免把对应信息同步到客户端,这样就能防止程序被破解从而拿到用户关键信息。仅对客户端有效,server api不受影响。
|
## 本配置是为了提高安全性,避免把对应信息同步到客户端,这样就能防止程序被破解从而拿到用户关键信息。仅对客户端有效,server api不受影响。
|
||||||
## 注意,修改本配置不会对已经同步的信息产生影响。
|
## 注意,修改本配置不会对已经同步的信息产生影响。
|
||||||
|
|||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
alter table `t_group` add column `_deleted` tinyint NOT NULL DEFAULT 0;
|
||||||
|
|
||||||
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;
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
alter table `t_group` add column `_deleted` tinyint NOT NULL 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.3</version>
|
<version>1.2.7</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>
|
||||||
|
|||||||
@@ -48,10 +48,6 @@ public class CreateChatroomAction extends AdminAction {
|
|||||||
inputCreateChatroom.setChatroomId(messagesStore.getShortUUID());
|
inputCreateChatroom.setChatroomId(messagesStore.getShortUUID());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inputCreateChatroom.getPortrait() == null || inputCreateChatroom.getPortrait().length() == 0) {
|
|
||||||
inputCreateChatroom.setPortrait("https://avatars.io/gravatar/" + inputCreateChatroom.getChatroomId());
|
|
||||||
}
|
|
||||||
|
|
||||||
WFCMessage.ChatroomInfo info = inputCreateChatroom.toChatroomInfo();
|
WFCMessage.ChatroomInfo info = inputCreateChatroom.toChatroomInfo();
|
||||||
messagesStore.createChatroom(inputCreateChatroom.getChatroomId(), info);
|
messagesStore.createChatroom(inputCreateChatroom.getChatroomId(), info);
|
||||||
setResponseContent(RestResult.ok(new OutputCreateChatroom(inputCreateChatroom.getChatroomId())), response);
|
setResponseContent(RestResult.ok(new OutputCreateChatroom(inputCreateChatroom.getChatroomId())), response);
|
||||||
|
|||||||
@@ -45,23 +45,13 @@ public class CreateRobotAction extends AdminAction {
|
|||||||
if (inputCreateRobot != null
|
if (inputCreateRobot != null
|
||||||
&& !StringUtil.isNullOrEmpty(inputCreateRobot.getName())) {
|
&& !StringUtil.isNullOrEmpty(inputCreateRobot.getName())) {
|
||||||
|
|
||||||
if(StringUtil.isNullOrEmpty(inputCreateRobot.getPassword())) {
|
|
||||||
inputCreateRobot.setPassword(UUIDGenerator.getUUID());
|
|
||||||
}
|
|
||||||
|
|
||||||
if(StringUtil.isNullOrEmpty(inputCreateRobot.getUserId())) {
|
if(StringUtil.isNullOrEmpty(inputCreateRobot.getUserId())) {
|
||||||
inputCreateRobot.setUserId(messagesStore.getShortUUID());
|
inputCreateRobot.setUserId(messagesStore.getShortUUID());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inputCreateRobot.getPortrait() == null || inputCreateRobot.getPortrait().length() == 0) {
|
|
||||||
inputCreateRobot.setPortrait("https://avatars.io/gravatar/" + inputCreateRobot.getUserId());
|
|
||||||
}
|
|
||||||
|
|
||||||
WFCMessage.User newUser = inputCreateRobot.toUser();
|
WFCMessage.User newUser = inputCreateRobot.toUser();
|
||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
messagesStore.addUserInfo(newUser, inputCreateRobot.getPassword());
|
messagesStore.addUserInfo(newUser);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
Utility.printExecption(LOG, e, IMExceptionEvent.EventType.ADMIN_API_Exception);
|
Utility.printExecption(LOG, e, IMExceptionEvent.EventType.ADMIN_API_Exception);
|
||||||
|
|||||||
@@ -47,10 +47,6 @@ public class CreateUserAction extends AdminAction {
|
|||||||
&& !StringUtil.isNullOrEmpty(inputCreateUser.getName())
|
&& !StringUtil.isNullOrEmpty(inputCreateUser.getName())
|
||||||
&& (inputCreateUser.getType() == ProtoConstants.UserType.UserType_Normal || inputCreateUser.getType() == ProtoConstants.UserType.UserType_Admin || inputCreateUser.getType() == ProtoConstants.UserType.UserType_Super_Admin)) {
|
&& (inputCreateUser.getType() == ProtoConstants.UserType.UserType_Normal || inputCreateUser.getType() == ProtoConstants.UserType.UserType_Admin || inputCreateUser.getType() == ProtoConstants.UserType.UserType_Super_Admin)) {
|
||||||
|
|
||||||
if(StringUtil.isNullOrEmpty(inputCreateUser.getPassword())) {
|
|
||||||
inputCreateUser.setPassword(UUIDGenerator.getUUID());
|
|
||||||
}
|
|
||||||
|
|
||||||
if(StringUtil.isNullOrEmpty(inputCreateUser.getUserId())) {
|
if(StringUtil.isNullOrEmpty(inputCreateUser.getUserId())) {
|
||||||
inputCreateUser.setUserId(messagesStore.getShortUUID());
|
inputCreateUser.setUserId(messagesStore.getShortUUID());
|
||||||
}
|
}
|
||||||
@@ -85,7 +81,7 @@ public class CreateUserAction extends AdminAction {
|
|||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
messagesStore.addUserInfo(newUserBuilder.build(), inputCreateUser.getPassword());
|
messagesStore.addUserInfo(newUserBuilder.build());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
Utility.printExecption(LOG, e, IMExceptionEvent.EventType.ADMIN_API_Exception);
|
Utility.printExecption(LOG, e, IMExceptionEvent.EventType.ADMIN_API_Exception);
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ public class GetGroupInfoAction extends AdminAction {
|
|||||||
pojoGroupInfo.setMax_member_count(groupInfo.getMemberCount());
|
pojoGroupInfo.setMax_member_count(groupInfo.getMemberCount());
|
||||||
pojoGroupInfo.setHistory_message(groupInfo.getHistoryMessage());
|
pojoGroupInfo.setHistory_message(groupInfo.getHistoryMessage());
|
||||||
pojoGroupInfo.setSuper_group(groupInfo.getSuperGroup()>0);
|
pojoGroupInfo.setSuper_group(groupInfo.getSuperGroup()>0);
|
||||||
|
pojoGroupInfo.setDeleted(groupInfo.getDeleted()>0);
|
||||||
result = RestResult.ok(pojoGroupInfo);
|
result = RestResult.ok(pojoGroupInfo);
|
||||||
}
|
}
|
||||||
setResponseContent(result, response);
|
setResponseContent(result, response);
|
||||||
|
|||||||
+66
@@ -0,0 +1,66 @@
|
|||||||
|
/*
|
||||||
|
* 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 com.xiaoleilu.loServer.action.admin;
|
||||||
|
|
||||||
|
import cn.wildfirechat.common.APIPath;
|
||||||
|
import cn.wildfirechat.common.ErrorCode;
|
||||||
|
import cn.wildfirechat.pojos.InputGetUserInfo;
|
||||||
|
import cn.wildfirechat.pojos.InputOutputUserInfo;
|
||||||
|
import cn.wildfirechat.pojos.OutputUserInfoList;
|
||||||
|
import cn.wildfirechat.proto.WFCMessage;
|
||||||
|
import com.xiaoleilu.loServer.RestResult;
|
||||||
|
import com.xiaoleilu.loServer.annotation.HttpMethod;
|
||||||
|
import com.xiaoleilu.loServer.annotation.Route;
|
||||||
|
import com.xiaoleilu.loServer.handler.Request;
|
||||||
|
import com.xiaoleilu.loServer.handler.Response;
|
||||||
|
import io.netty.handler.codec.http.FullHttpRequest;
|
||||||
|
import io.netty.util.internal.StringUtil;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Route(APIPath.User_Get_Email_Info)
|
||||||
|
@HttpMethod("POST")
|
||||||
|
public class GetUsersByEmailAction extends AdminAction {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isTransactionAction() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean action(Request request, Response response) {
|
||||||
|
if (request.getNettyRequest() instanceof FullHttpRequest) {
|
||||||
|
String email = getRequestBody(request.getNettyRequest(), String.class);
|
||||||
|
if (!StringUtil.isNullOrEmpty(email)) {
|
||||||
|
|
||||||
|
List<WFCMessage.User> users = messagesStore.getUserInfosByEmail(email);
|
||||||
|
List<InputOutputUserInfo> list = new ArrayList<>();
|
||||||
|
for (WFCMessage.User user : users) {
|
||||||
|
list.add(InputOutputUserInfo.fromPbUser(user));
|
||||||
|
}
|
||||||
|
|
||||||
|
RestResult result;
|
||||||
|
if (list.isEmpty()) {
|
||||||
|
result = RestResult.resultOf(ErrorCode.ERROR_CODE_NOT_EXIST);
|
||||||
|
} else {
|
||||||
|
OutputUserInfoList outputUserInfoList = new OutputUserInfoList();
|
||||||
|
outputUserInfoList.userInfos = list;
|
||||||
|
result = RestResult.ok(outputUserInfoList);
|
||||||
|
}
|
||||||
|
|
||||||
|
setResponseContent(result, response);
|
||||||
|
} else {
|
||||||
|
setResponseContent(RestResult.resultOf(ErrorCode.INVALID_PARAMETER), response);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -56,6 +56,10 @@ public class GetGroupInfoAction extends RobotAction {
|
|||||||
pojoGroupInfo.setJoin_type(groupInfo.getJoinType());
|
pojoGroupInfo.setJoin_type(groupInfo.getJoinType());
|
||||||
pojoGroupInfo.setPrivate_chat(groupInfo.getPrivateChat());
|
pojoGroupInfo.setPrivate_chat(groupInfo.getPrivateChat());
|
||||||
pojoGroupInfo.setSearchable(groupInfo.getSearchable());
|
pojoGroupInfo.setSearchable(groupInfo.getSearchable());
|
||||||
|
pojoGroupInfo.setMax_member_count(groupInfo.getMemberCount());
|
||||||
|
pojoGroupInfo.setHistory_message(groupInfo.getHistoryMessage());
|
||||||
|
pojoGroupInfo.setSuper_group(groupInfo.getSuperGroup()>0);
|
||||||
|
pojoGroupInfo.setDeleted(groupInfo.getDeleted()>0);
|
||||||
result = RestResult.ok(pojoGroupInfo);
|
result = RestResult.ok(pojoGroupInfo);
|
||||||
}
|
}
|
||||||
setResponseContent(result, response);
|
setResponseContent(result, response);
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -155,6 +155,7 @@ public final class BrokerConstants {
|
|||||||
public static final String MESSAGE_NO_Forward_Admin_Message = "message.no_forward_admin_message";
|
public static final String MESSAGE_NO_Forward_Admin_Message = "message.no_forward_admin_message";
|
||||||
|
|
||||||
public static final String MESSAGE_Push_Expired_Days = "message.push_expired_days";
|
public static final String MESSAGE_Push_Expired_Days = "message.push_expired_days";
|
||||||
|
public static final String MESSAGE_Force_Push_Types = "message.force_push_types";
|
||||||
|
|
||||||
public static final String MESSAGE_Forward_With_Client_Info = "message.forward_with_client_info";
|
public static final String MESSAGE_Forward_With_Client_Info = "message.forward_with_client_info";
|
||||||
|
|
||||||
@@ -162,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";
|
||||||
@@ -188,6 +191,8 @@ public final class BrokerConstants {
|
|||||||
|
|
||||||
public static final String GROUP_Disable_Stranger_Invite = "group.disable_stranger_invite";
|
public static final String GROUP_Disable_Stranger_Invite = "group.disable_stranger_invite";
|
||||||
|
|
||||||
|
public static final String GROUP_INFO_MARK_DELETION = "group.enable_mark_deletion";
|
||||||
|
|
||||||
public static final String USER_HIDE_PROPERTIES = "user.hide_properties";
|
public static final String USER_HIDE_PROPERTIES = "user.hide_properties";
|
||||||
public static final String USER_KEEP_DISPLAY_NAME_WHEN_DESTROY = "user.keep_display_name_when_destroy";
|
public static final String USER_KEEP_DISPLAY_NAME_WHEN_DESTROY = "user.keep_display_name_when_destroy";
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ public class CreateGroupHandler extends GroupHandler<WFCMessage.CreateGroupReque
|
|||||||
|
|
||||||
if (!StringUtil.isNullOrEmpty(request.getGroup().getGroupInfo().getTargetId())) {
|
if (!StringUtil.isNullOrEmpty(request.getGroup().getGroupInfo().getTargetId())) {
|
||||||
WFCMessage.GroupInfo existGroupInfo = m_messagesStore.getGroupInfo(request.getGroup().getGroupInfo().getTargetId());
|
WFCMessage.GroupInfo existGroupInfo = m_messagesStore.getGroupInfo(request.getGroup().getGroupInfo().getTargetId());
|
||||||
if (existGroupInfo != null) {
|
if (existGroupInfo != null && existGroupInfo.getDeleted() == 0) {
|
||||||
return ErrorCode.ERROR_CODE_GROUP_ALREADY_EXIST;
|
return ErrorCode.ERROR_CODE_GROUP_ALREADY_EXIST;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -59,7 +59,7 @@ public class CreateGroupHandler extends GroupHandler<WFCMessage.CreateGroupReque
|
|||||||
}
|
}
|
||||||
|
|
||||||
WFCMessage.GroupInfo groupInfo = m_messagesStore.createGroup(fromUser, request.getGroup().getGroupInfo(), request.getGroup().getMembersList(), request.getMemberExtra(), isAdmin);
|
WFCMessage.GroupInfo groupInfo = m_messagesStore.createGroup(fromUser, request.getGroup().getGroupInfo(), request.getGroup().getMembersList(), request.getMemberExtra(), isAdmin);
|
||||||
if (groupInfo != null) {
|
if (groupInfo != null && groupInfo.getDeleted() == 0) {
|
||||||
if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0) {
|
if(request.hasNotifyContent() && request.getNotifyContent().getType() > 0) {
|
||||||
sendGroupNotification(fromUser, groupInfo.getTargetId(), request.getToLineList(), request.getNotifyContent());
|
sendGroupNotification(fromUser, groupInfo.getTargetId(), request.getToLineList(), request.getNotifyContent());
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import java.util.function.Function;
|
|||||||
|
|
||||||
import static cn.wildfirechat.common.IMExceptionEvent.EventType.RDBS_Exception;
|
import static cn.wildfirechat.common.IMExceptionEvent.EventType.RDBS_Exception;
|
||||||
import static cn.wildfirechat.proto.ProtoConstants.PersistFlag.Transparent;
|
import static cn.wildfirechat.proto.ProtoConstants.PersistFlag.Transparent;
|
||||||
|
import static io.moquette.BrokerConstants.GROUP_INFO_MARK_DELETION;
|
||||||
import static io.moquette.server.Constants.MAX_MESSAGE_QUEUE;
|
import static io.moquette.server.Constants.MAX_MESSAGE_QUEUE;
|
||||||
import static cn.wildfirechat.proto.ProtoConstants.SearchUserType.*;
|
import static cn.wildfirechat.proto.ProtoConstants.SearchUserType.*;
|
||||||
import static win.liyufan.im.UserSettingScope.kUserSettingPrivacySearchable;
|
import static win.liyufan.im.UserSettingScope.kUserSettingPrivacySearchable;
|
||||||
@@ -45,6 +46,7 @@ public class DatabaseStore {
|
|||||||
private final ThreadPoolExecutorWrapper mScheduler;
|
private final ThreadPoolExecutorWrapper mScheduler;
|
||||||
private boolean disableRemoteMessageSearch = false;
|
private boolean disableRemoteMessageSearch = false;
|
||||||
private boolean encryptMessage = false;
|
private boolean encryptMessage = false;
|
||||||
|
private boolean keepGroupInfo = false;
|
||||||
public void setDisableRemoteMessageSearch(boolean disableRemoteMessageSearch) {
|
public void setDisableRemoteMessageSearch(boolean disableRemoteMessageSearch) {
|
||||||
this.disableRemoteMessageSearch = disableRemoteMessageSearch;
|
this.disableRemoteMessageSearch = disableRemoteMessageSearch;
|
||||||
}
|
}
|
||||||
@@ -55,6 +57,11 @@ public class DatabaseStore {
|
|||||||
|
|
||||||
public DatabaseStore(ThreadPoolExecutorWrapper scheduler) {
|
public DatabaseStore(ThreadPoolExecutorWrapper scheduler) {
|
||||||
this.mScheduler = scheduler;
|
this.mScheduler = scheduler;
|
||||||
|
try {
|
||||||
|
keepGroupInfo = Boolean.parseBoolean(Server.getServer().getConfig().getProperty(GROUP_INFO_MARK_DELETION, "false"));
|
||||||
|
} catch (Exception e) {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TreeMap<Long, Long> reloadUserMessageMaps(String userId) {
|
TreeMap<Long, Long> reloadUserMessageMaps(String userId) {
|
||||||
@@ -1129,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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1425,7 +1441,8 @@ public class DatabaseStore {
|
|||||||
", `_join_type`" +
|
", `_join_type`" +
|
||||||
", `_private_chat`" +
|
", `_private_chat`" +
|
||||||
", `_searchable`" +
|
", `_searchable`" +
|
||||||
", `_member_dt`) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" +
|
", `_deleted`" +
|
||||||
|
", `_member_dt`) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" +
|
||||||
" ON DUPLICATE KEY UPDATE " +
|
" ON DUPLICATE KEY UPDATE " +
|
||||||
"`_name` = ?," +
|
"`_name` = ?," +
|
||||||
"`_portrait` = ?," +
|
"`_portrait` = ?," +
|
||||||
@@ -1436,8 +1453,9 @@ public class DatabaseStore {
|
|||||||
"`_mute` = ?" +
|
"`_mute` = ?" +
|
||||||
", `_join_type` = ?" +
|
", `_join_type` = ?" +
|
||||||
", `_private_chat` = ?" +
|
", `_private_chat` = ?" +
|
||||||
", `_searchable` = ?, " +
|
", `_searchable` = ?" +
|
||||||
"`_member_dt` = ?";
|
", `_deleted` = ?" +
|
||||||
|
", `_member_dt` = ?";
|
||||||
|
|
||||||
|
|
||||||
statement = connection.prepareStatement(sql);
|
statement = connection.prepareStatement(sql);
|
||||||
@@ -1455,6 +1473,7 @@ public class DatabaseStore {
|
|||||||
statement.setInt(index++, groupInfo.getJoinType());
|
statement.setInt(index++, groupInfo.getJoinType());
|
||||||
statement.setInt(index++, groupInfo.getPrivateChat());
|
statement.setInt(index++, groupInfo.getPrivateChat());
|
||||||
statement.setInt(index++, groupInfo.getSearchable());
|
statement.setInt(index++, groupInfo.getSearchable());
|
||||||
|
statement.setInt(index++, groupInfo.getDeleted());
|
||||||
statement.setLong(index++, groupInfo.getMemberUpdateDt() == 0 ? System.currentTimeMillis() : groupInfo.getUpdateDt());
|
statement.setLong(index++, groupInfo.getMemberUpdateDt() == 0 ? System.currentTimeMillis() : groupInfo.getUpdateDt());
|
||||||
|
|
||||||
statement.setString(index++, groupInfo.getName());
|
statement.setString(index++, groupInfo.getName());
|
||||||
@@ -1467,6 +1486,7 @@ public class DatabaseStore {
|
|||||||
statement.setInt(index++, groupInfo.getJoinType());
|
statement.setInt(index++, groupInfo.getJoinType());
|
||||||
statement.setInt(index++, groupInfo.getPrivateChat());
|
statement.setInt(index++, groupInfo.getPrivateChat());
|
||||||
statement.setInt(index++, groupInfo.getSearchable());
|
statement.setInt(index++, groupInfo.getSearchable());
|
||||||
|
statement.setInt(index++, groupInfo.getDeleted());
|
||||||
statement.setLong(index++, groupInfo.getMemberUpdateDt() == 0 ? System.currentTimeMillis() : groupInfo.getUpdateDt());
|
statement.setLong(index++, groupInfo.getMemberUpdateDt() == 0 ? System.currentTimeMillis() : groupInfo.getUpdateDt());
|
||||||
int count = statement.executeUpdate();
|
int count = statement.executeUpdate();
|
||||||
LOG.info("Update rows {}", count);
|
LOG.info("Update rows {}", count);
|
||||||
@@ -2917,6 +2937,99 @@ public class DatabaseStore {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<WFCMessage.User> getUserInfosByEmail(String email) {
|
||||||
|
Connection connection = null;
|
||||||
|
PreparedStatement statement = null;
|
||||||
|
ResultSet rs = null;
|
||||||
|
List<WFCMessage.User> outList = new ArrayList<>();
|
||||||
|
try {
|
||||||
|
connection = DBUtil.getConnection();
|
||||||
|
String sql = "select `_uid`, `_name`" +
|
||||||
|
", `_display_name`" +
|
||||||
|
", `_portrait`" +
|
||||||
|
", `_mobile`" +
|
||||||
|
", `_gender`" +
|
||||||
|
", `_email`" +
|
||||||
|
", `_address`" +
|
||||||
|
", `_company`" +
|
||||||
|
", `_social`" +
|
||||||
|
", `_extra`" +
|
||||||
|
", `_type`" +
|
||||||
|
", `_deleted`" +
|
||||||
|
", `_dt` from t_user where `_deleted` = 0 and `_email` = ?";
|
||||||
|
statement = connection.prepareStatement(sql);
|
||||||
|
statement.setString(1, email);
|
||||||
|
|
||||||
|
rs = statement.executeQuery();
|
||||||
|
while (rs.next()) {
|
||||||
|
WFCMessage.User.Builder builder = WFCMessage.User.newBuilder();
|
||||||
|
int index = 1;
|
||||||
|
String value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setUid(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setName(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setDisplayName(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setPortrait(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setMobile(value);
|
||||||
|
|
||||||
|
int gender = rs.getInt(index++);
|
||||||
|
builder.setGender(gender);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setEmail(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setAddress(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setCompany(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setSocial(value);
|
||||||
|
|
||||||
|
value = rs.getString(index++);
|
||||||
|
value = (value == null ? "" : value);
|
||||||
|
builder.setExtra(value);
|
||||||
|
|
||||||
|
int type = rs.getInt(index++);
|
||||||
|
builder.setType(type);
|
||||||
|
|
||||||
|
int deleted = rs.getInt(index++);
|
||||||
|
builder.setDeleted(deleted);
|
||||||
|
|
||||||
|
long longValue = rs.getLong(index++);
|
||||||
|
if(longValue <= 0)
|
||||||
|
longValue = 1;
|
||||||
|
builder.setUpdateDt(longValue);
|
||||||
|
|
||||||
|
outList.add(builder.build());
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
Utility.printExecption(LOG, e, RDBS_Exception);
|
||||||
|
} finally {
|
||||||
|
DBUtil.closeDB(connection, statement, rs);
|
||||||
|
}
|
||||||
|
return outList;
|
||||||
|
}
|
||||||
|
|
||||||
List<WFCMessage.User> getAllUsers(int count, int offset) {
|
List<WFCMessage.User> getAllUsers(int count, int offset) {
|
||||||
Connection connection = null;
|
Connection connection = null;
|
||||||
PreparedStatement statement = null;
|
PreparedStatement statement = null;
|
||||||
@@ -3317,8 +3430,12 @@ public class DatabaseStore {
|
|||||||
PreparedStatement statement = null;
|
PreparedStatement statement = null;
|
||||||
try {
|
try {
|
||||||
connection = DBUtil.getConnection();
|
connection = DBUtil.getConnection();
|
||||||
String sql = "delete from t_group where _gid = ?";
|
String sql;
|
||||||
|
if(keepGroupInfo) {
|
||||||
|
sql = "update t_group set _deleted = 1, _dt = _dt+1, _member_count = 0, _member_dt = _member_dt+1 where _gid = ?";
|
||||||
|
} else {
|
||||||
|
sql = "delete from t_group where _gid = ?";
|
||||||
|
}
|
||||||
|
|
||||||
statement = connection.prepareStatement(sql);
|
statement = connection.prepareStatement(sql);
|
||||||
int index = 1;
|
int index = 1;
|
||||||
@@ -3650,7 +3767,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";
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import com.google.protobuf.ByteString;
|
|||||||
import com.hazelcast.core.*;
|
import com.hazelcast.core.*;
|
||||||
import com.hazelcast.util.StringUtil;
|
import com.hazelcast.util.StringUtil;
|
||||||
import com.xiaoleilu.loServer.RestResult;
|
import com.xiaoleilu.loServer.RestResult;
|
||||||
|
import com.xiaoleilu.loServer.action.Action;
|
||||||
import com.xiaoleilu.loServer.action.admin.AdminAction;
|
import com.xiaoleilu.loServer.action.admin.AdminAction;
|
||||||
import com.xiaoleilu.loServer.model.FriendData;
|
import com.xiaoleilu.loServer.model.FriendData;
|
||||||
import cn.wildfirechat.common.ErrorCode;
|
import cn.wildfirechat.common.ErrorCode;
|
||||||
@@ -49,6 +50,7 @@ import java.net.URL;
|
|||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.locks.Lock;
|
import java.util.concurrent.locks.Lock;
|
||||||
import java.util.concurrent.locks.ReadWriteLock;
|
import java.util.concurrent.locks.ReadWriteLock;
|
||||||
@@ -73,6 +75,7 @@ import static io.moquette.BrokerConstants.*;
|
|||||||
import static io.moquette.server.Constants.MAX_CHATROOM_MESSAGE_QUEUE;
|
import static io.moquette.server.Constants.MAX_CHATROOM_MESSAGE_QUEUE;
|
||||||
import static io.moquette.server.Constants.MAX_MESSAGE_QUEUE;
|
import static io.moquette.server.Constants.MAX_MESSAGE_QUEUE;
|
||||||
import static cn.wildfirechat.pojos.MyInfoType.*;
|
import static cn.wildfirechat.pojos.MyInfoType.*;
|
||||||
|
import static win.liyufan.im.UserSettingScope.kUserSettingAddFriendNoVerify;
|
||||||
import static win.liyufan.im.UserSettingScope.kUserSettingPCOnline;
|
import static win.liyufan.im.UserSettingScope.kUserSettingPCOnline;
|
||||||
|
|
||||||
public class MemoryMessagesStore implements IMessagesStore {
|
public class MemoryMessagesStore implements IMessagesStore {
|
||||||
@@ -155,6 +158,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
private boolean mFriendRobotAutoAccept = true;
|
private boolean mFriendRobotAutoAccept = true;
|
||||||
|
|
||||||
private long mPushExpiredTimes = 604800000L;
|
private long mPushExpiredTimes = 604800000L;
|
||||||
|
private Set<Integer> mForcePushTypes = new HashSet<>();
|
||||||
|
|
||||||
private boolean mMultiPlatformNotification = false;
|
private boolean mMultiPlatformNotification = false;
|
||||||
private boolean mMobileDefaultSilentWhenPCOnline = true;
|
private boolean mMobileDefaultSilentWhenPCOnline = true;
|
||||||
@@ -199,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<>();
|
||||||
|
|
||||||
@@ -257,6 +262,20 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
String forcePushTypes = m_Server.getConfig().getProperty(BrokerConstants.MESSAGE_Force_Push_Types);
|
||||||
|
if(!StringUtil.isNullOrEmptyAfterTrim(forcePushTypes)) {
|
||||||
|
forcePushTypes = forcePushTypes.replace(",", ",");
|
||||||
|
for (String s : forcePushTypes.split(",")) {
|
||||||
|
int type = Integer.parseInt(s.trim());
|
||||||
|
if(type > 0) {
|
||||||
|
mForcePushTypes.add(type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
mMultiPlatformNotification = Boolean.parseBoolean(m_Server.getConfig().getProperty(BrokerConstants.SERVER_MULTI_PLATFROM_NOTIFICATION, "false"));
|
mMultiPlatformNotification = Boolean.parseBoolean(m_Server.getConfig().getProperty(BrokerConstants.SERVER_MULTI_PLATFROM_NOTIFICATION, "false"));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -584,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) {
|
||||||
@@ -714,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);
|
||||||
@@ -744,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");
|
||||||
@@ -1368,7 +1391,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
event.type = type;
|
event.type = type;
|
||||||
PojoGroupInfo pojoGroupInfo = new PojoGroupInfo();
|
PojoGroupInfo pojoGroupInfo = new PojoGroupInfo();
|
||||||
event.groupInfo = pojoGroupInfo;
|
event.groupInfo = pojoGroupInfo;
|
||||||
if (groupInfo != null) {
|
if (groupInfo != null && groupInfo.getDeleted() == 0) {
|
||||||
pojoGroupInfo.setExtra(groupInfo.getExtra());
|
pojoGroupInfo.setExtra(groupInfo.getExtra());
|
||||||
pojoGroupInfo.setName(groupInfo.getName());
|
pojoGroupInfo.setName(groupInfo.getName());
|
||||||
pojoGroupInfo.setOwner(groupInfo.getOwner());
|
pojoGroupInfo.setOwner(groupInfo.getOwner());
|
||||||
@@ -1702,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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1900,7 +1934,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
WFCMessage.GroupInfo groupInfo = mIMap.get(groupId);
|
WFCMessage.GroupInfo groupInfo = mIMap.get(groupId);
|
||||||
if (groupInfo == null) {
|
if (groupInfo == null) {
|
||||||
groupInfo = databaseStore.getPersistGroupInfo(groupId);
|
groupInfo = databaseStore.getPersistGroupInfo(groupId);
|
||||||
if (groupInfo != null) {
|
if (groupInfo != null && groupInfo.getDeleted() == 0) {
|
||||||
mIMap.set(groupId, groupInfo);
|
mIMap.set(groupId, groupInfo);
|
||||||
} else {
|
} else {
|
||||||
return ErrorCode.ERROR_CODE_NOT_EXIST;
|
return ErrorCode.ERROR_CODE_NOT_EXIST;
|
||||||
@@ -1985,7 +2019,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
WFCMessage.GroupInfo groupInfo = mIMap.get(groupId);
|
WFCMessage.GroupInfo groupInfo = mIMap.get(groupId);
|
||||||
if (groupInfo == null) {
|
if (groupInfo == null) {
|
||||||
groupInfo = databaseStore.getPersistGroupInfo(groupId);
|
groupInfo = databaseStore.getPersistGroupInfo(groupId);
|
||||||
if (groupInfo != null) {
|
if (groupInfo != null && groupInfo.getDeleted() == 0) {
|
||||||
mIMap.set(groupId, groupInfo);
|
mIMap.set(groupId, groupInfo);
|
||||||
} else {
|
} else {
|
||||||
return ErrorCode.ERROR_CODE_NOT_EXIST;
|
return ErrorCode.ERROR_CODE_NOT_EXIST;
|
||||||
@@ -2069,16 +2103,12 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
ArrayList<WFCMessage.GroupInfo> out = new ArrayList<>();
|
ArrayList<WFCMessage.GroupInfo> out = new ArrayList<>();
|
||||||
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 = databaseStore.getPersistGroupInfo(request.getUid());
|
|
||||||
if (groupInfo != null) {
|
|
||||||
mIMap.set(request.getUid(), groupInfo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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) {
|
||||||
@@ -2306,7 +2336,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
IMap<String, WFCMessage.GroupInfo> groups = hzInstance.getMap(GROUPS_MAP);
|
IMap<String, WFCMessage.GroupInfo> groups = hzInstance.getMap(GROUPS_MAP);
|
||||||
WFCMessage.GroupInfo groupInfo = groups.get(groupId);
|
WFCMessage.GroupInfo groupInfo = groups.get(groupId);
|
||||||
boolean isMute = false;
|
boolean isMute = false;
|
||||||
if (groupInfo != null) {
|
if (groupInfo != null && groupInfo.getDeleted() == 0) {
|
||||||
if (groupInfo.getOwner().equals(memberId)) {
|
if (groupInfo.getOwner().equals(memberId)) {
|
||||||
return ErrorCode.ERROR_CODE_SUCCESS;
|
return ErrorCode.ERROR_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
@@ -2893,7 +2923,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addUserInfo(WFCMessage.User user, String password) throws Exception {
|
public void addUserInfo(WFCMessage.User user) throws Exception {
|
||||||
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
|
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
|
||||||
IMap<String, WFCMessage.User> mUserMap = hzInstance.getMap(USERS);
|
IMap<String, WFCMessage.User> mUserMap = hzInstance.getMap(USERS);
|
||||||
if (databaseStore.isUidAndNameConflict(user.getUid(), user.getName())) {
|
if (databaseStore.isUidAndNameConflict(user.getUid(), user.getName())) {
|
||||||
@@ -2901,7 +2931,6 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
}
|
}
|
||||||
databaseStore.updateUser(user);
|
databaseStore.updateUser(user);
|
||||||
mUserMap.put(user.getUid(), user);
|
mUserMap.put(user.getUid(), user);
|
||||||
databaseStore.updateUserPassword(user.getUid(), password);
|
|
||||||
|
|
||||||
callbackUserInfoEvent(user);
|
callbackUserInfoEvent(user);
|
||||||
}
|
}
|
||||||
@@ -2987,6 +3016,11 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
return getUserInfo(userId);
|
return getUserInfo(userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<WFCMessage.User> getUserInfosByEmail(String email) {
|
||||||
|
return databaseStore.getUserInfosByEmail(email);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<WFCMessage.User> getUserInfoList(int count, int offset) {
|
public List<WFCMessage.User> getUserInfoList(int count, int offset) {
|
||||||
return databaseStore.getAllUsers(count, offset);
|
return databaseStore.getAllUsers(count, offset);
|
||||||
@@ -3316,6 +3350,10 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
|
|
||||||
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
|
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
|
||||||
MultiMap<String, WFCMessage.FriendRequest> requestMap = hzInstance.getMultiMap(USER_FRIENDS_REQUEST);
|
MultiMap<String, WFCMessage.FriendRequest> requestMap = hzInstance.getMultiMap(USER_FRIENDS_REQUEST);
|
||||||
|
|
||||||
|
WFCMessage.UserSettingEntry userSettingData = getUserSetting(request.getTargetUid(), kUserSettingAddFriendNoVerify, "");
|
||||||
|
boolean noVerify = userSettingData != null && "1".equals(userSettingData.getValue());
|
||||||
|
|
||||||
Collection<WFCMessage.FriendRequest> requests = requestMap.get(userId);
|
Collection<WFCMessage.FriendRequest> requests = requestMap.get(userId);
|
||||||
if (requests == null || requests.size() == 0) {
|
if (requests == null || requests.size() == 0) {
|
||||||
requests = loadFriendRequest(requestMap, userId);
|
requests = loadFriendRequest(requestMap, userId);
|
||||||
@@ -3330,7 +3368,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (existRequest != null && existRequest.getStatus() != ProtoConstants.FriendRequestStatus.RequestStatus_Accepted && !isAdmin) {
|
if (!noVerify && existRequest != null && existRequest.getStatus() != ProtoConstants.FriendRequestStatus.RequestStatus_Accepted && !isAdmin) {
|
||||||
if (existRequest.getStatus() == ProtoConstants.FriendRequestStatus.RequestStatus_Rejected
|
if (existRequest.getStatus() == ProtoConstants.FriendRequestStatus.RequestStatus_Rejected
|
||||||
&& System.currentTimeMillis() - existRequest.getUpdateDt() < mFriendRejectDuration) {
|
&& System.currentTimeMillis() - existRequest.getUpdateDt() < mFriendRejectDuration) {
|
||||||
return ErrorCode.ERROR_CODE_FRIEND_REQUEST_BLOCKED;
|
return ErrorCode.ERROR_CODE_FRIEND_REQUEST_BLOCKED;
|
||||||
@@ -3372,7 +3410,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
.setReason(request.getReason())
|
.setReason(request.getReason())
|
||||||
.setExtra(request.getExtra())
|
.setExtra(request.getExtra())
|
||||||
.setStatus(ProtoConstants.FriendRequestStatus.RequestStatus_Sent)
|
.setStatus(ProtoConstants.FriendRequestStatus.RequestStatus_Sent)
|
||||||
.setToReadStatus(false)
|
.setToReadStatus(noVerify)
|
||||||
.setUpdateDt(System.currentTimeMillis())
|
.setUpdateDt(System.currentTimeMillis())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@@ -3380,6 +3418,12 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
requestMap.remove(userId);
|
requestMap.remove(userId);
|
||||||
requestMap.remove(request.getTargetUid());
|
requestMap.remove(request.getTargetUid());
|
||||||
|
|
||||||
|
|
||||||
|
if(noVerify) {
|
||||||
|
WFCMessage.HandleFriendRequest handleFriendRequest = WFCMessage.HandleFriendRequest.newBuilder().setTargetUid(userId).setStatus(ProtoConstants.FriendRequestStatus.RequestStatus_Accepted).build();
|
||||||
|
ServerAPIHelper.sendRequest(request.getTargetUid(), null, IMTopic.HandleFriendRequestTopic, handleFriendRequest.toByteArray(), null, ProtoConstants.RequestSourceType.Request_From_User);
|
||||||
|
}
|
||||||
|
|
||||||
head[0] = newRequest.getUpdateDt();
|
head[0] = newRequest.getUpdateDt();
|
||||||
return ErrorCode.ERROR_CODE_SUCCESS;
|
return ErrorCode.ERROR_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
@@ -4606,6 +4650,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;
|
||||||
@@ -4616,6 +4665,11 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
return mPushExpiredTimes;
|
return mPushExpiredTimes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<Integer> getForcePushTypes() {
|
||||||
|
return mForcePushTypes;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Integer> getClientForbiddenSendTypes() {
|
public List<Integer> getClientForbiddenSendTypes() {
|
||||||
return mForbiddenClientSendTypes;
|
return mForbiddenClientSendTypes;
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -147,12 +147,13 @@ public interface IMessagesStore {
|
|||||||
List<InputOutputUserBlockStatus> getUserStatusList();
|
List<InputOutputUserBlockStatus> getUserStatusList();
|
||||||
|
|
||||||
ErrorCode updateUserInfo(InputOutputUserInfo userInfo, int flag);
|
ErrorCode updateUserInfo(InputOutputUserInfo userInfo, int flag);
|
||||||
void addUserInfo(WFCMessage.User user, String password) throws Exception;
|
void addUserInfo(WFCMessage.User user) throws Exception;
|
||||||
void destroyUser(String userId);
|
void destroyUser(String userId);
|
||||||
void updateUserInfo(WFCMessage.User user) throws Exception;
|
void updateUserInfo(WFCMessage.User user) throws Exception;
|
||||||
WFCMessage.User getUserInfo(String userId);
|
WFCMessage.User getUserInfo(String userId);
|
||||||
WFCMessage.User getUserInfoByName(String name);
|
WFCMessage.User getUserInfoByName(String name);
|
||||||
WFCMessage.User getUserInfoByMobile(String mobile);
|
WFCMessage.User getUserInfoByMobile(String mobile);
|
||||||
|
List<WFCMessage.User> getUserInfosByEmail(String email);
|
||||||
List<WFCMessage.User> searchUser(String keyword, int searchType, int page);
|
List<WFCMessage.User> searchUser(String keyword, int searchType, int page);
|
||||||
|
|
||||||
List<WFCMessage.User> getUserInfoList(int count, int offset);
|
List<WFCMessage.User> getUserInfoList(int count, int offset);
|
||||||
@@ -242,10 +243,12 @@ public interface IMessagesStore {
|
|||||||
boolean isForwardMessageWithClientInfo();
|
boolean isForwardMessageWithClientInfo();
|
||||||
boolean isRobotCallbackWithClientInfo();
|
boolean isRobotCallbackWithClientInfo();
|
||||||
boolean isChannelCallbackWithClientInfo();
|
boolean isChannelCallbackWithClientInfo();
|
||||||
|
boolean isChannelNewCallbackFeature();
|
||||||
|
|
||||||
boolean isRobotAutoAcceptFriendRequest();
|
boolean isRobotAutoAcceptFriendRequest();
|
||||||
|
|
||||||
long getPushExpiredTimes();
|
long getPushExpiredTimes();
|
||||||
|
Set<Integer> getForcePushTypes();
|
||||||
|
|
||||||
List<Integer> getClientForbiddenSendTypes();
|
List<Integer> getClientForbiddenSendTypes();
|
||||||
List<Integer> getBlackListExceptionTypes();
|
List<Integer> getBlackListExceptionTypes();
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import cn.wildfirechat.pojos.OutputMessageData;
|
|||||||
import cn.wildfirechat.proto.ProtoConstants;
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
import cn.wildfirechat.proto.WFCMessage;
|
import cn.wildfirechat.proto.WFCMessage;
|
||||||
import cn.wildfirechat.push.PushServer;
|
import cn.wildfirechat.push.PushServer;
|
||||||
import com.google.gson.Gson;
|
|
||||||
import com.hazelcast.core.HazelcastInstance;
|
import com.hazelcast.core.HazelcastInstance;
|
||||||
import com.hazelcast.util.StringUtil;
|
import com.hazelcast.util.StringUtil;
|
||||||
import cn.wildfirechat.pojos.OutputNotifyChannelSubscribeStatus;
|
import cn.wildfirechat.pojos.OutputNotifyChannelSubscribeStatus;
|
||||||
@@ -271,6 +270,7 @@ public class MessagesPublisher {
|
|||||||
boolean isVoipSilent;
|
boolean isVoipSilent;
|
||||||
boolean isNoDisturb;
|
boolean isNoDisturb;
|
||||||
boolean isConvSilent = false;
|
boolean isConvSilent = false;
|
||||||
|
boolean isForcePush = false;
|
||||||
if (pullType == ProtoConstants.PullType.Pull_ChatRoom) {
|
if (pullType == ProtoConstants.PullType.Pull_ChatRoom) {
|
||||||
isSilent = true;
|
isSilent = true;
|
||||||
isConvSilent = true;
|
isConvSilent = true;
|
||||||
@@ -289,6 +289,11 @@ public class MessagesPublisher {
|
|||||||
conversation = WFCMessage.Conversation.newBuilder().setType(conversationType).setLine(line).setTarget(target).build();
|
conversation = WFCMessage.Conversation.newBuilder().setType(conversationType).setLine(line).setTarget(target).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(m_messagesStore.getForcePushTypes().contains(messageContentType)) {
|
||||||
|
LOG.info("The message type {} force push", messageContentType);
|
||||||
|
isForcePush = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (m_messagesStore.getUserConversationSilent(user, conversation)) {
|
if (m_messagesStore.getUserConversationSilent(user, conversation)) {
|
||||||
LOG.info("The conversation {}-{}-{} is slient", conversation.getType(), conversation.getTarget(), conversation.getLine());
|
LOG.info("The conversation {}-{}-{} is slient", conversation.getType(), conversation.getTarget(), conversation.getLine());
|
||||||
isConvSilent = true;
|
isConvSilent = true;
|
||||||
@@ -369,17 +374,17 @@ public class MessagesPublisher {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isConvSilent && !isVoip) {
|
if (isConvSilent && !isVoip && !isForcePush) {
|
||||||
LOG.info("Silent of user or conversation");
|
LOG.info("Silent of user or conversation");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isSilent && !isVoip) {
|
if (isSilent && !isVoip && !isForcePush) {
|
||||||
LOG.info("Silent of user");
|
LOG.info("Silent of user");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isVoip && isVoipSilent) {
|
if(isVoip && isVoipSilent && !isForcePush) {
|
||||||
LOG.info("voip silent of user");
|
LOG.info("voip silent of user");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -663,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);
|
||||||
@@ -762,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package io.moquette.spi.impl;
|
package io.moquette.spi.impl;
|
||||||
|
|
||||||
import cn.wildfirechat.common.ErrorCode;
|
import cn.wildfirechat.common.ErrorCode;
|
||||||
|
import cn.wildfirechat.pojos.OutputCheckUserOnline;
|
||||||
import cn.wildfirechat.pojos.UserOnlineStatus;
|
import cn.wildfirechat.pojos.UserOnlineStatus;
|
||||||
import cn.wildfirechat.proto.ProtoConstants;
|
import cn.wildfirechat.proto.ProtoConstants;
|
||||||
import cn.wildfirechat.proto.WFCMessage;
|
import cn.wildfirechat.proto.WFCMessage;
|
||||||
@@ -266,7 +267,27 @@ public class ProtocolProcessor {
|
|||||||
if (!StringUtil.isNullOrEmpty(mUserOnlineStatusCallback)) {
|
if (!StringUtil.isNullOrEmpty(mUserOnlineStatusCallback)) {
|
||||||
mServer.getCallbackScheduler().execute(() -> {
|
mServer.getCallbackScheduler().execute(() -> {
|
||||||
try {
|
try {
|
||||||
HttpUtils.httpJsonPost(mUserOnlineStatusCallback, GsonUtil.gson.toJson(new UserOnlineStatus(userId, clientId, platform, status, packageName)), HttpUtils.HttpPostType.POST_TYPE_User_Online_Event_Callback);
|
int sessionstatus;
|
||||||
|
Collection<MemorySessionStore.Session> useSessions = m_sessionsStore.sessionForUser(userId);
|
||||||
|
UserOnlineStatus userOnlineStatus = new UserOnlineStatus(userId, clientId, platform, status, packageName);
|
||||||
|
userOnlineStatus.sessions = new ArrayList<>();
|
||||||
|
|
||||||
|
for (MemorySessionStore.Session session : useSessions) {
|
||||||
|
if (session.getDeleted() > 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
ConnectionDescriptor descriptor = connectionDescriptors.getConnection(session.getClientID());
|
||||||
|
if (descriptor == null) {
|
||||||
|
sessionstatus = 1;
|
||||||
|
} else {
|
||||||
|
sessionstatus = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
userOnlineStatus.sessions.add(new OutputCheckUserOnline.Session(userId, session.getClientID(), session.getPlatform(), sessionstatus, session.getLastActiveTime(), session.getAppName()));
|
||||||
|
}
|
||||||
|
|
||||||
|
HttpUtils.httpJsonPost(mUserOnlineStatusCallback, GsonUtil.gson.toJson(userOnlineStatus), HttpUtils.HttpPostType.POST_TYPE_User_Online_Event_Callback);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
Utility.printExecption(LOG, e, EVENT_CALLBACK_Exception);
|
Utility.printExecption(LOG, e, EVENT_CALLBACK_Exception);
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ public class Qos1PublishHandler extends QosPublishHandler {
|
|||||||
status = 0;
|
status = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
out.addSession(userId, session.getClientID(), session.getPlatform(), status, session.getLastActiveTime());
|
out.addSession(userId, session.getClientID(), session.getPlatform(), status, session.getLastActiveTime(), session.getAppName());
|
||||||
}
|
}
|
||||||
|
|
||||||
callback.onRouteHandled(GsonUtil.gson.toJson(out).getBytes());
|
callback.onRouteHandled(GsonUtil.gson.toJson(out).getBytes());
|
||||||
|
|||||||
@@ -20,4 +20,5 @@ public interface UserSettingScope {
|
|||||||
int kUserSettingPttSilent = 25;
|
int kUserSettingPttSilent = 25;
|
||||||
int kUserSettingGroupRemark = 26;
|
int kUserSettingGroupRemark = 26;
|
||||||
int kUserSettingPrivacySearchable = 27;
|
int kUserSettingPrivacySearchable = 27;
|
||||||
|
int kUserSettingAddFriendNoVerify = 28;
|
||||||
}
|
}
|
||||||
|
|||||||
+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.3</version>
|
<version>1.2.7</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,8 @@ 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_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";
|
||||||
String User_Get_Blocked_List = "/admin/user/get_blocked_list";
|
String User_Get_Blocked_List = "/admin/user/get_blocked_list";
|
||||||
@@ -51,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";
|
||||||
@@ -69,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";
|
||||||
@@ -84,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";
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package cn.wildfirechat.pojos;
|
package cn.wildfirechat.pojos;
|
||||||
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -33,3 +34,4 @@ public class GetUserSessionResult {
|
|||||||
userSessions = new ArrayList<>();
|
userSessions = new ArrayList<>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Regular → Executable
+8
@@ -1,3 +1,11 @@
|
|||||||
|
/*
|
||||||
|
* 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;
|
package cn.wildfirechat.pojos;
|
||||||
|
|
||||||
public class InputConferenceRequest {
|
public class InputConferenceRequest {
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ public class InputCreateGroup extends InputGroupBase {
|
|||||||
if(group_info.isSuper_group()) {
|
if(group_info.isSuper_group()) {
|
||||||
groupInfoBuilder.setSuperGroup(1);
|
groupInfoBuilder.setSuperGroup(1);
|
||||||
}
|
}
|
||||||
|
groupInfoBuilder.setDeleted(0);
|
||||||
|
|
||||||
groupBuilder.setGroupInfo(groupInfoBuilder);
|
groupBuilder.setGroupInfo(groupInfoBuilder);
|
||||||
if(group.getMembers() != null) {
|
if(group.getMembers() != null) {
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* 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 InputGetUserSK {
|
||||||
|
private String uid;
|
||||||
|
private String cid;
|
||||||
|
|
||||||
|
public InputGetUserSK(String uid, String cid) {
|
||||||
|
this.uid = uid;
|
||||||
|
this.cid = cid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUid() {
|
||||||
|
return uid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUid(String uid) {
|
||||||
|
this.uid = uid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCid() {
|
||||||
|
return cid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCid(String cid) {
|
||||||
|
this.cid = cid;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,18 +19,23 @@ public class OutputCheckUserOnline {
|
|||||||
public int platform;
|
public int platform;
|
||||||
public int status; //0 online, 1 have session offline
|
public int status; //0 online, 1 have session offline
|
||||||
public long lastSeen;
|
public long lastSeen;
|
||||||
|
public String packageName;
|
||||||
|
|
||||||
public Session(String clientId, String userId, int platform, int status, long lastSeen) {
|
public Session() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Session(String clientId, String userId, int platform, int status, long lastSeen, String packageName) {
|
||||||
this.clientId = clientId;
|
this.clientId = clientId;
|
||||||
this.userId = userId;
|
this.userId = userId;
|
||||||
this.platform = platform;
|
this.platform = platform;
|
||||||
this.status = status;
|
this.status = status;
|
||||||
this.lastSeen = lastSeen;
|
this.lastSeen = lastSeen;
|
||||||
|
this.packageName = packageName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addSession(String userId, String clientId, int platform, int status, long lastSeen) {
|
public void addSession(String userId, String clientId, int platform, int status, long lastSeen, String packageName) {
|
||||||
Session session = new Session(clientId, userId, platform, status, lastSeen);
|
Session session = new Session(clientId, userId, platform, status, lastSeen, packageName);
|
||||||
sessions.add(session);
|
sessions.add(session);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,14 @@
|
|||||||
|
/*
|
||||||
|
* 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;
|
package cn.wildfirechat.pojos;
|
||||||
|
|
||||||
|
|
||||||
public class OutputReadData {
|
public class OutputReadData {
|
||||||
public String user;
|
public String user;
|
||||||
public Conversation conversation;
|
public Conversation conversation;
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* 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 cn.wildfirechat.proto.WFCMessage;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class OutputUserInfoList {
|
||||||
|
public List<InputOutputUserInfo> userInfos;
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
@@ -22,6 +23,9 @@ public class PojoGroupInfo {
|
|||||||
int max_member_count;
|
int max_member_count;
|
||||||
int history_message;
|
int history_message;
|
||||||
boolean super_group;
|
boolean super_group;
|
||||||
|
boolean deleted;
|
||||||
|
long update_dt;
|
||||||
|
long member_update_dt;
|
||||||
|
|
||||||
public String getTarget_id() {
|
public String getTarget_id() {
|
||||||
return target_id;
|
return target_id;
|
||||||
@@ -126,4 +130,36 @@ public class PojoGroupInfo {
|
|||||||
public void setSuper_group(boolean super_group) {
|
public void setSuper_group(boolean super_group) {
|
||||||
this.super_group = super_group;
|
this.super_group = super_group;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isDeleted() {
|
||||||
|
return deleted;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDeleted(boolean 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package cn.wildfirechat.pojos;
|
package cn.wildfirechat.pojos;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class UserOnlineStatus {
|
public class UserOnlineStatus {
|
||||||
public static final int ONLINE = 0;
|
public static final int ONLINE = 0;
|
||||||
public static final int OFFLINE = 1;
|
public static final int OFFLINE = 1;
|
||||||
@@ -11,6 +13,9 @@ public class UserOnlineStatus {
|
|||||||
public int status;
|
public int status;
|
||||||
public long timestamp;
|
public long timestamp;
|
||||||
public String packageName;
|
public String packageName;
|
||||||
|
public int customState;
|
||||||
|
public String customText;
|
||||||
|
public List<OutputCheckUserOnline.Session> sessions;
|
||||||
|
|
||||||
public UserOnlineStatus() {
|
public UserOnlineStatus() {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -1651,6 +1651,16 @@ public final class WFCMessage {
|
|||||||
* <code>optional int32 super_group = 16;</code>
|
* <code>optional int32 super_group = 16;</code>
|
||||||
*/
|
*/
|
||||||
int getSuperGroup();
|
int getSuperGroup();
|
||||||
|
|
||||||
|
// optional int32 deleted = 17;
|
||||||
|
/**
|
||||||
|
* <code>optional int32 deleted = 17;</code>
|
||||||
|
*/
|
||||||
|
boolean hasDeleted();
|
||||||
|
/**
|
||||||
|
* <code>optional int32 deleted = 17;</code>
|
||||||
|
*/
|
||||||
|
int getDeleted();
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Protobuf type {@code GroupInfo}
|
* Protobuf type {@code GroupInfo}
|
||||||
@@ -1783,6 +1793,11 @@ public final class WFCMessage {
|
|||||||
superGroup_ = input.readInt32();
|
superGroup_ = input.readInt32();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 136: {
|
||||||
|
bitField0_ |= 0x00010000;
|
||||||
|
deleted_ = input.readInt32();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
|
} catch (com.google.protobuf.InvalidProtocolBufferException e) {
|
||||||
@@ -2214,6 +2229,22 @@ public final class WFCMessage {
|
|||||||
return superGroup_;
|
return superGroup_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// optional int32 deleted = 17;
|
||||||
|
public static final int DELETED_FIELD_NUMBER = 17;
|
||||||
|
private int deleted_;
|
||||||
|
/**
|
||||||
|
* <code>optional int32 deleted = 17;</code>
|
||||||
|
*/
|
||||||
|
public boolean hasDeleted() {
|
||||||
|
return ((bitField0_ & 0x00010000) == 0x00010000);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional int32 deleted = 17;</code>
|
||||||
|
*/
|
||||||
|
public int getDeleted() {
|
||||||
|
return deleted_;
|
||||||
|
}
|
||||||
|
|
||||||
private void initFields() {
|
private void initFields() {
|
||||||
targetId_ = "";
|
targetId_ = "";
|
||||||
name_ = "";
|
name_ = "";
|
||||||
@@ -2231,6 +2262,7 @@ public final class WFCMessage {
|
|||||||
maxMemberCount_ = 0;
|
maxMemberCount_ = 0;
|
||||||
historyMessage_ = 0;
|
historyMessage_ = 0;
|
||||||
superGroup_ = 0;
|
superGroup_ = 0;
|
||||||
|
deleted_ = 0;
|
||||||
}
|
}
|
||||||
private byte memoizedIsInitialized = -1;
|
private byte memoizedIsInitialized = -1;
|
||||||
public final boolean isInitialized() {
|
public final boolean isInitialized() {
|
||||||
@@ -2300,6 +2332,9 @@ public final class WFCMessage {
|
|||||||
if (((bitField0_ & 0x00008000) == 0x00008000)) {
|
if (((bitField0_ & 0x00008000) == 0x00008000)) {
|
||||||
output.writeInt32(16, superGroup_);
|
output.writeInt32(16, superGroup_);
|
||||||
}
|
}
|
||||||
|
if (((bitField0_ & 0x00010000) == 0x00010000)) {
|
||||||
|
output.writeInt32(17, deleted_);
|
||||||
|
}
|
||||||
getUnknownFields().writeTo(output);
|
getUnknownFields().writeTo(output);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2373,6 +2408,10 @@ public final class WFCMessage {
|
|||||||
size += com.google.protobuf.CodedOutputStream
|
size += com.google.protobuf.CodedOutputStream
|
||||||
.computeInt32Size(16, superGroup_);
|
.computeInt32Size(16, superGroup_);
|
||||||
}
|
}
|
||||||
|
if (((bitField0_ & 0x00010000) == 0x00010000)) {
|
||||||
|
size += com.google.protobuf.CodedOutputStream
|
||||||
|
.computeInt32Size(17, deleted_);
|
||||||
|
}
|
||||||
size += getUnknownFields().getSerializedSize();
|
size += getUnknownFields().getSerializedSize();
|
||||||
memoizedSerializedSize = size;
|
memoizedSerializedSize = size;
|
||||||
return size;
|
return size;
|
||||||
@@ -2521,6 +2560,8 @@ public final class WFCMessage {
|
|||||||
bitField0_ = (bitField0_ & ~0x00004000);
|
bitField0_ = (bitField0_ & ~0x00004000);
|
||||||
superGroup_ = 0;
|
superGroup_ = 0;
|
||||||
bitField0_ = (bitField0_ & ~0x00008000);
|
bitField0_ = (bitField0_ & ~0x00008000);
|
||||||
|
deleted_ = 0;
|
||||||
|
bitField0_ = (bitField0_ & ~0x00010000);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2613,6 +2654,10 @@ public final class WFCMessage {
|
|||||||
to_bitField0_ |= 0x00008000;
|
to_bitField0_ |= 0x00008000;
|
||||||
}
|
}
|
||||||
result.superGroup_ = superGroup_;
|
result.superGroup_ = superGroup_;
|
||||||
|
if (((from_bitField0_ & 0x00010000) == 0x00010000)) {
|
||||||
|
to_bitField0_ |= 0x00010000;
|
||||||
|
}
|
||||||
|
result.deleted_ = deleted_;
|
||||||
result.bitField0_ = to_bitField0_;
|
result.bitField0_ = to_bitField0_;
|
||||||
onBuilt();
|
onBuilt();
|
||||||
return result;
|
return result;
|
||||||
@@ -2687,6 +2732,9 @@ public final class WFCMessage {
|
|||||||
if (other.hasSuperGroup()) {
|
if (other.hasSuperGroup()) {
|
||||||
setSuperGroup(other.getSuperGroup());
|
setSuperGroup(other.getSuperGroup());
|
||||||
}
|
}
|
||||||
|
if (other.hasDeleted()) {
|
||||||
|
setDeleted(other.getDeleted());
|
||||||
|
}
|
||||||
this.mergeUnknownFields(other.getUnknownFields());
|
this.mergeUnknownFields(other.getUnknownFields());
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
@@ -3455,6 +3503,39 @@ public final class WFCMessage {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// optional int32 deleted = 17;
|
||||||
|
private int deleted_ ;
|
||||||
|
/**
|
||||||
|
* <code>optional int32 deleted = 17;</code>
|
||||||
|
*/
|
||||||
|
public boolean hasDeleted() {
|
||||||
|
return ((bitField0_ & 0x00010000) == 0x00010000);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional int32 deleted = 17;</code>
|
||||||
|
*/
|
||||||
|
public int getDeleted() {
|
||||||
|
return deleted_;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional int32 deleted = 17;</code>
|
||||||
|
*/
|
||||||
|
public Builder setDeleted(int value) {
|
||||||
|
bitField0_ |= 0x00010000;
|
||||||
|
deleted_ = value;
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* <code>optional int32 deleted = 17;</code>
|
||||||
|
*/
|
||||||
|
public Builder clearDeleted() {
|
||||||
|
bitField0_ = (bitField0_ & ~0x00010000);
|
||||||
|
deleted_ = 0;
|
||||||
|
onChanged();
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
// @@protoc_insertion_point(builder_scope:GroupInfo)
|
// @@protoc_insertion_point(builder_scope:GroupInfo)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -41793,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}
|
||||||
@@ -41884,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) {
|
||||||
@@ -42015,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() {
|
||||||
@@ -42051,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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42077,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;
|
||||||
@@ -42204,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42249,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;
|
||||||
@@ -42283,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;
|
||||||
}
|
}
|
||||||
@@ -42577,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)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67305,7 +67467,7 @@ public final class WFCMessage {
|
|||||||
"dRequest\022\022\n\ntarget_uid\030\001 \002(\t\022\016\n\006reason\030\002" +
|
"dRequest\022\022\n\ntarget_uid\030\001 \002(\t\022\016\n\006reason\030\002" +
|
||||||
" \002(\t\022\r\n\005extra\030\003 \001(\t\":\n\014Conversation\022\014\n\004t" +
|
" \002(\t\022\r\n\005extra\030\003 \001(\t\":\n\014Conversation\022\014\n\004t" +
|
||||||
"ype\030\001 \002(\005\022\016\n\006target\030\002 \002(\t\022\014\n\004line\030\003 \002(\005\"" +
|
"ype\030\001 \002(\005\022\016\n\006target\030\002 \002(\t\022\014\n\004line\030\003 \002(\005\"" +
|
||||||
"\300\002\n\tGroupInfo\022\021\n\ttarget_id\030\001 \001(\t\022\014\n\004name" +
|
"\321\002\n\tGroupInfo\022\021\n\ttarget_id\030\001 \001(\t\022\014\n\004name" +
|
||||||
"\030\002 \002(\t\022\020\n\010portrait\030\003 \001(\t\022\r\n\005owner\030\004 \001(\t\022" +
|
"\030\002 \002(\t\022\020\n\010portrait\030\003 \001(\t\022\r\n\005owner\030\004 \001(\t\022" +
|
||||||
"\014\n\004type\030\005 \002(\005\022\024\n\014member_count\030\006 \001(\005\022\r\n\005e" +
|
"\014\n\004type\030\005 \002(\005\022\024\n\014member_count\030\006 \001(\005\022\r\n\005e" +
|
||||||
"xtra\030\007 \001(\t\022\021\n\tupdate_dt\030\010 \001(\003\022\030\n\020member_" +
|
"xtra\030\007 \001(\t\022\021\n\tupdate_dt\030\010 \001(\003\022\030\n\020member_" +
|
||||||
@@ -67313,172 +67475,173 @@ public final class WFCMessage {
|
|||||||
"pe\030\013 \001(\005\022\024\n\014private_chat\030\014 \001(\005\022\022\n\nsearch",
|
"pe\030\013 \001(\005\022\024\n\014private_chat\030\014 \001(\005\022\022\n\nsearch",
|
||||||
"able\030\r \001(\005\022\030\n\020max_member_count\030\016 \001(\005\022\027\n\017" +
|
"able\030\r \001(\005\022\030\n\020max_member_count\030\016 \001(\005\022\027\n\017" +
|
||||||
"history_message\030\017 \001(\005\022\023\n\013super_group\030\020 \001" +
|
"history_message\030\017 \001(\005\022\023\n\013super_group\030\020 \001" +
|
||||||
"(\005\"r\n\013GroupMember\022\021\n\tmember_id\030\001 \002(\t\022\r\n\005" +
|
"(\005\022\017\n\007deleted\030\021 \001(\005\"r\n\013GroupMember\022\021\n\tme" +
|
||||||
"alias\030\002 \001(\t\022\014\n\004type\030\003 \002(\005\022\021\n\tupdate_dt\030\004" +
|
"mber_id\030\001 \002(\t\022\r\n\005alias\030\002 \001(\t\022\014\n\004type\030\003 \002" +
|
||||||
" \001(\003\022\021\n\tcreate_dt\030\005 \001(\003\022\r\n\005extra\030\006 \001(\t\"F" +
|
"(\005\022\021\n\tupdate_dt\030\004 \001(\003\022\021\n\tcreate_dt\030\005 \001(\003" +
|
||||||
"\n\005Group\022\036\n\ngroup_info\030\001 \002(\0132\n.GroupInfo\022" +
|
"\022\r\n\005extra\030\006 \001(\t\"F\n\005Group\022\036\n\ngroup_info\030\001" +
|
||||||
"\035\n\007members\030\002 \003(\0132\014.GroupMember\"\313\001\n\013Chann" +
|
" \002(\0132\n.GroupInfo\022\035\n\007members\030\002 \003(\0132\014.Grou" +
|
||||||
"elMenu\022\014\n\004type\030\001 \002(\t\022\014\n\004name\030\002 \002(\t\022\013\n\003ke" +
|
"pMember\"\313\001\n\013ChannelMenu\022\014\n\004type\030\001 \002(\t\022\014\n" +
|
||||||
"y\030\003 \001(\t\022\013\n\003url\030\004 \001(\t\022\020\n\010media_id\030\005 \001(\t\022\022" +
|
"\004name\030\002 \002(\t\022\013\n\003key\030\003 \001(\t\022\013\n\003url\030\004 \001(\t\022\020\n" +
|
||||||
"\n\narticle_id\030\006 \001(\t\022\016\n\006app_id\030\007 \001(\t\022\020\n\010ap",
|
"\010media_id\030\005 \001(\t\022\022\n\narticle_id\030\006 \001(\t\022\016\n\006a",
|
||||||
"p_page\030\010 \001(\t\022\036\n\010sub_menu\030\t \003(\0132\014.Channel" +
|
"pp_id\030\007 \001(\t\022\020\n\010app_page\030\010 \001(\t\022\036\n\010sub_men" +
|
||||||
"Menu\022\017\n\007menu_id\030\n \001(\t\022\r\n\005extra\030\013 \001(\t\"-\n\017" +
|
"u\030\t \003(\0132\014.ChannelMenu\022\017\n\007menu_id\030\n \001(\t\022\r" +
|
||||||
"ChannelMenuList\022\032\n\004menu\030\001 \003(\0132\014.ChannelM" +
|
"\n\005extra\030\013 \001(\t\"-\n\017ChannelMenuList\022\032\n\004menu" +
|
||||||
"enu\"\340\001\n\013ChannelInfo\022\021\n\ttarget_id\030\001 \001(\t\022\014" +
|
"\030\001 \003(\0132\014.ChannelMenu\"\340\001\n\013ChannelInfo\022\021\n\t" +
|
||||||
"\n\004name\030\002 \002(\t\022\020\n\010portrait\030\003 \001(\t\022\r\n\005owner\030" +
|
"target_id\030\001 \001(\t\022\014\n\004name\030\002 \002(\t\022\020\n\010portrai" +
|
||||||
"\004 \001(\t\022\016\n\006status\030\005 \001(\005\022\014\n\004desc\030\006 \001(\t\022\r\n\005e" +
|
"t\030\003 \001(\t\022\r\n\005owner\030\004 \001(\t\022\016\n\006status\030\005 \001(\005\022\014" +
|
||||||
"xtra\030\007 \001(\t\022\021\n\tupdate_dt\030\010 \001(\003\022\016\n\006secret\030" +
|
"\n\004desc\030\006 \001(\t\022\r\n\005extra\030\007 \001(\t\022\021\n\tupdate_dt" +
|
||||||
"\t \001(\t\022\020\n\010callback\030\n \001(\t\022\021\n\tautomatic\030\013 \001" +
|
"\030\010 \001(\003\022\016\n\006secret\030\t \001(\t\022\020\n\010callback\030\n \001(\t" +
|
||||||
"(\005\022\032\n\004menu\030\014 \003(\0132\014.ChannelMenu\"D\n\021Modify" +
|
"\022\021\n\tautomatic\030\013 \001(\005\022\032\n\004menu\030\014 \003(\0132\014.Chan" +
|
||||||
"ChannelInfo\022\022\n\nchannel_id\030\001 \002(\t\022\014\n\004type\030",
|
"nelMenu\"D\n\021ModifyChannelInfo\022\022\n\nchannel_",
|
||||||
"\002 \002(\005\022\r\n\005value\030\003 \002(\t\"8\n\017TransferChannel\022" +
|
"id\030\001 \002(\t\022\014\n\004type\030\002 \002(\005\022\r\n\005value\030\003 \002(\t\"8\n" +
|
||||||
"\022\n\nchannel_id\030\001 \002(\t\022\021\n\tnew_owner\030\002 \002(\t\"3" +
|
"\017TransferChannel\022\022\n\nchannel_id\030\001 \002(\t\022\021\n\t" +
|
||||||
"\n\017PullChannelInfo\022\022\n\nchannel_id\030\001 \002(\t\022\014\n" +
|
"new_owner\030\002 \002(\t\"3\n\017PullChannelInfo\022\022\n\nch" +
|
||||||
"\004head\030\002 \002(\003\"H\n\023PullChannelListener\022\022\n\nch" +
|
"annel_id\030\001 \002(\t\022\014\n\004head\030\002 \002(\003\"H\n\023PullChan" +
|
||||||
"annel_id\030\001 \002(\t\022\016\n\006offset\030\002 \002(\005\022\r\n\005count\030" +
|
"nelListener\022\022\n\nchannel_id\030\001 \002(\t\022\016\n\006offse" +
|
||||||
"\003 \002(\005\"R\n\031PullChannelListenerResult\022\023\n\013to" +
|
"t\030\002 \002(\005\022\r\n\005count\030\003 \002(\005\"R\n\031PullChannelLis" +
|
||||||
"tal_count\030\001 \002(\005\022\016\n\006offset\030\002 \002(\005\022\020\n\010liste" +
|
"tenerResult\022\023\n\013total_count\030\001 \002(\005\022\016\n\006offs" +
|
||||||
"ner\030\003 \003(\t\"3\n\rListenChannel\022\022\n\nchannel_id" +
|
"et\030\002 \002(\005\022\020\n\010listener\030\003 \003(\t\"3\n\rListenChan" +
|
||||||
"\030\001 \002(\t\022\016\n\006listen\030\002 \002(\005\"E\n\023SearchChannelR" +
|
"nel\022\022\n\nchannel_id\030\001 \002(\t\022\016\n\006listen\030\002 \002(\005\"" +
|
||||||
"esult\022\035\n\007channel\030\001 \003(\0132\014.ChannelInfo\022\017\n\007",
|
"E\n\023SearchChannelResult\022\035\n\007channel\030\001 \003(\0132",
|
||||||
"keyword\030\002 \002(\t\"\235\002\n\016MessageContent\022\014\n\004type" +
|
"\014.ChannelInfo\022\017\n\007keyword\030\002 \002(\t\"\235\002\n\016Messa" +
|
||||||
"\030\001 \002(\005\022\032\n\022searchable_content\030\002 \001(\t\022\024\n\014pu" +
|
"geContent\022\014\n\004type\030\001 \002(\005\022\032\n\022searchable_co" +
|
||||||
"sh_content\030\003 \001(\t\022\017\n\007content\030\004 \001(\t\022\014\n\004dat" +
|
"ntent\030\002 \001(\t\022\024\n\014push_content\030\003 \001(\t\022\017\n\007con" +
|
||||||
"a\030\005 \001(\014\022\021\n\tmediaType\030\006 \001(\005\022\026\n\016remoteMedi" +
|
"tent\030\004 \001(\t\022\014\n\004data\030\005 \001(\014\022\021\n\tmediaType\030\006 " +
|
||||||
"aUrl\030\007 \001(\t\022\024\n\014persist_flag\030\010 \001(\005\022\027\n\017expi" +
|
"\001(\005\022\026\n\016remoteMediaUrl\030\007 \001(\t\022\024\n\014persist_f" +
|
||||||
"re_duration\030\t \001(\005\022\026\n\016mentioned_type\030\n \001(" +
|
"lag\030\010 \001(\005\022\027\n\017expire_duration\030\t \001(\005\022\026\n\016me" +
|
||||||
"\005\022\030\n\020mentioned_target\030\013 \003(\t\022\r\n\005extra\030\014 \001" +
|
"ntioned_type\030\n \001(\005\022\030\n\020mentioned_target\030\013" +
|
||||||
"(\t\022\021\n\tpush_data\030\r \001(\t\"\226\001\n\025AddGroupMember" +
|
" \003(\t\022\r\n\005extra\030\014 \001(\t\022\021\n\tpush_data\030\r \001(\t\"\226" +
|
||||||
"Request\022\020\n\010group_id\030\001 \002(\t\022\"\n\014added_membe" +
|
"\001\n\025AddGroupMemberRequest\022\020\n\010group_id\030\001 \002" +
|
||||||
"r\030\002 \003(\0132\014.GroupMember\022\017\n\007to_line\030\003 \003(\005\022\'",
|
"(\t\022\"\n\014added_member\030\002 \003(\0132\014.GroupMember\022\017",
|
||||||
"\n\016notify_content\030\004 \001(\0132\017.MessageContent\022" +
|
"\n\007to_line\030\003 \003(\005\022\'\n\016notify_content\030\004 \001(\0132" +
|
||||||
"\r\n\005extra\030\005 \001(\t\"{\n\022CreateGroupRequest\022\025\n\005" +
|
"\017.MessageContent\022\r\n\005extra\030\005 \001(\t\"{\n\022Creat" +
|
||||||
"group\030\001 \002(\0132\006.Group\022\017\n\007to_line\030\002 \003(\005\022\'\n\016" +
|
"eGroupRequest\022\025\n\005group\030\001 \002(\0132\006.Group\022\017\n\007" +
|
||||||
"notify_content\030\003 \001(\0132\017.MessageContent\022\024\n" +
|
"to_line\030\002 \003(\005\022\'\n\016notify_content\030\003 \001(\0132\017." +
|
||||||
"\014member_extra\030\004 \001(\t\"a\n\023DismissGroupReque" +
|
"MessageContent\022\024\n\014member_extra\030\004 \001(\t\"a\n\023" +
|
||||||
"st\022\020\n\010group_id\030\001 \002(\t\022\017\n\007to_line\030\002 \003(\005\022\'\n" +
|
"DismissGroupRequest\022\020\n\010group_id\030\001 \002(\t\022\017\n" +
|
||||||
"\016notify_content\030\003 \001(\0132\017.MessageContent\"\245" +
|
"\007to_line\030\002 \003(\005\022\'\n\016notify_content\030\003 \001(\0132\017" +
|
||||||
"\001\n\rFriendRequest\022\020\n\010from_uid\030\001 \001(\t\022\016\n\006to" +
|
".MessageContent\"\245\001\n\rFriendRequest\022\020\n\010fro" +
|
||||||
"_uid\030\002 \002(\t\022\016\n\006reason\030\003 \002(\t\022\016\n\006status\030\004 \001" +
|
"m_uid\030\001 \001(\t\022\016\n\006to_uid\030\002 \002(\t\022\016\n\006reason\030\003 " +
|
||||||
"(\005\022\021\n\tupdate_dt\030\005 \001(\003\022\030\n\020from_read_statu",
|
"\002(\t\022\016\n\006status\030\004 \001(\005\022\021\n\tupdate_dt\030\005 \001(\003\022\030",
|
||||||
"s\030\006 \001(\010\022\026\n\016to_read_status\030\007 \001(\010\022\r\n\005extra" +
|
"\n\020from_read_status\030\006 \001(\010\022\026\n\016to_read_stat" +
|
||||||
"\030\010 \001(\t\"#\n\rGeneralResult\022\022\n\nerror_code\030\001 " +
|
"us\030\007 \001(\010\022\r\n\005extra\030\010 \001(\t\"#\n\rGeneralResult" +
|
||||||
"\002(\005\"?\n\025GetUploadTokenRequest\022\022\n\nmedia_ty" +
|
"\022\022\n\nerror_code\030\001 \002(\005\"?\n\025GetUploadTokenRe" +
|
||||||
"pe\030\001 \002(\005\022\022\n\nmedia_path\030\002 \002(\t\"S\n\024GetUploa" +
|
"quest\022\022\n\nmedia_type\030\001 \002(\005\022\022\n\nmedia_path\030" +
|
||||||
"dTokenResult\022\016\n\006domain\030\001 \002(\t\022\r\n\005token\030\002 " +
|
"\002 \002(\t\"S\n\024GetUploadTokenResult\022\016\n\006domain\030" +
|
||||||
"\002(\t\022\016\n\006server\030\003 \002(\t\022\014\n\004port\030\004 \001(\005\"H\n\023Han" +
|
"\001 \002(\t\022\r\n\005token\030\002 \002(\t\022\016\n\006server\030\003 \002(\t\022\014\n\004" +
|
||||||
"dleFriendRequest\022\022\n\ntarget_uid\030\001 \002(\t\022\016\n\006" +
|
"port\030\004 \001(\005\"H\n\023HandleFriendRequest\022\022\n\ntar" +
|
||||||
"status\030\002 \002(\005\022\r\n\005extra\030\003 \001(\t\"\023\n\005IDBuf\022\n\n\002" +
|
"get_uid\030\001 \002(\t\022\016\n\006status\030\002 \002(\005\022\r\n\005extra\030\003" +
|
||||||
"id\030\001 \002(\t\"\027\n\tIDListBuf\022\n\n\002id\030\001 \003(\t\"\256\001\n\007Me" +
|
" \001(\t\"\023\n\005IDBuf\022\n\n\002id\030\001 \002(\t\"\027\n\tIDListBuf\022\n" +
|
||||||
"ssage\022#\n\014conversation\030\001 \002(\0132\r.Conversati",
|
"\n\002id\030\001 \003(\t\"\256\001\n\007Message\022#\n\014conversation\030\001",
|
||||||
"on\022\021\n\tfrom_user\030\002 \002(\t\022 \n\007content\030\003 \002(\0132\017" +
|
" \002(\0132\r.Conversation\022\021\n\tfrom_user\030\002 \002(\t\022 " +
|
||||||
".MessageContent\022\022\n\nmessage_id\030\004 \001(\003\022\030\n\020s" +
|
"\n\007content\030\003 \002(\0132\017.MessageContent\022\022\n\nmess" +
|
||||||
"erver_timestamp\030\005 \001(\003\022\017\n\007to_user\030\006 \001(\t\022\n" +
|
"age_id\030\004 \001(\003\022\030\n\020server_timestamp\030\005 \001(\003\022\017" +
|
||||||
"\n\002to\030\007 \003(\t\"\353\001\n\004User\022\013\n\003uid\030\001 \002(\t\022\014\n\004name" +
|
"\n\007to_user\030\006 \001(\t\022\n\n\002to\030\007 \003(\t\"\353\001\n\004User\022\013\n\003" +
|
||||||
"\030\002 \001(\t\022\024\n\014display_name\030\003 \001(\t\022\020\n\010portrait" +
|
"uid\030\001 \002(\t\022\014\n\004name\030\002 \001(\t\022\024\n\014display_name\030" +
|
||||||
"\030\004 \001(\t\022\016\n\006mobile\030\005 \001(\t\022\r\n\005email\030\006 \001(\t\022\017\n" +
|
"\003 \001(\t\022\020\n\010portrait\030\004 \001(\t\022\016\n\006mobile\030\005 \001(\t\022" +
|
||||||
"\007address\030\007 \001(\t\022\017\n\007company\030\010 \001(\t\022\r\n\005extra" +
|
"\r\n\005email\030\006 \001(\t\022\017\n\007address\030\007 \001(\t\022\017\n\007compa" +
|
||||||
"\030\t \001(\t\022\021\n\tupdate_dt\030\n \001(\003\022\016\n\006gender\030\013 \001(" +
|
"ny\030\010 \001(\t\022\r\n\005extra\030\t \001(\t\022\021\n\tupdate_dt\030\n \001" +
|
||||||
"\005\022\016\n\006social\030\014 \001(\t\022\014\n\004type\030\r \001(\005\022\017\n\007delet" +
|
"(\003\022\016\n\006gender\030\013 \001(\005\022\016\n\006social\030\014 \001(\t\022\014\n\004ty" +
|
||||||
"ed\030\016 \001(\005\"c\n\005Robot\022\013\n\003uid\030\001 \002(\t\022\r\n\005state\030",
|
"pe\030\r \001(\005\022\017\n\007deleted\030\016 \001(\005\"c\n\005Robot\022\013\n\003ui",
|
||||||
"\002 \002(\005\022\r\n\005owner\030\003 \001(\t\022\016\n\006secret\030\004 \001(\t\022\020\n\010" +
|
"d\030\001 \002(\t\022\r\n\005state\030\002 \002(\005\022\r\n\005owner\030\003 \001(\t\022\016\n" +
|
||||||
"callback\030\005 \001(\t\022\r\n\005extra\030\006 \001(\t\"(\n\017GetRobo" +
|
"\006secret\030\004 \001(\t\022\020\n\010callback\030\005 \001(\t\022\r\n\005extra" +
|
||||||
"tsResult\022\025\n\005entry\030\001 \003(\0132\006.Robot\"g\n\030Uploa" +
|
"\030\006 \001(\t\"(\n\017GetRobotsResult\022\025\n\005entry\030\001 \003(\013" +
|
||||||
"dDeviceTokenRequest\022\020\n\010platform\030\001 \002(\005\022\020\n" +
|
"2\006.Robot\"g\n\030UploadDeviceTokenRequest\022\020\n\010" +
|
||||||
"\010app_name\030\002 \002(\t\022\024\n\014device_token\030\003 \002(\t\022\021\n" +
|
"platform\030\001 \002(\005\022\020\n\010app_name\030\002 \002(\t\022\024\n\014devi" +
|
||||||
"\tpush_type\030\004 \002(\005\"\201\001\n\026ModifyGroupInfoRequ" +
|
"ce_token\030\003 \002(\t\022\021\n\tpush_type\030\004 \002(\005\"\201\001\n\026Mo" +
|
||||||
"est\022\020\n\010group_id\030\001 \002(\t\022\014\n\004type\030\002 \002(\005\022\r\n\005v" +
|
"difyGroupInfoRequest\022\020\n\010group_id\030\001 \002(\t\022\014" +
|
||||||
"alue\030\003 \002(\t\022\017\n\007to_line\030\004 \003(\005\022\'\n\016notify_co" +
|
"\n\004type\030\002 \002(\005\022\r\n\005value\030\003 \002(\t\022\017\n\007to_line\030\004" +
|
||||||
"ntent\030\005 \001(\0132\017.MessageContent\"\203\001\n\026SetGrou" +
|
" \003(\005\022\'\n\016notify_content\030\005 \001(\0132\017.MessageCo" +
|
||||||
"pManagerRequest\022\020\n\010group_id\030\001 \002(\t\022\014\n\004typ",
|
"ntent\"\203\001\n\026SetGroupManagerRequest\022\020\n\010grou",
|
||||||
"e\030\002 \002(\005\022\017\n\007user_id\030\003 \003(\t\022\017\n\007to_line\030\004 \003(" +
|
"p_id\030\001 \002(\t\022\014\n\004type\030\002 \002(\005\022\017\n\007user_id\030\003 \003(" +
|
||||||
"\005\022\'\n\016notify_content\030\005 \001(\0132\017.MessageConte" +
|
"\t\022\017\n\007to_line\030\004 \003(\005\022\'\n\016notify_content\030\005 \001" +
|
||||||
"nt\"(\n\tInfoEntry\022\014\n\004type\030\001 \002(\005\022\r\n\005value\030\002" +
|
"(\0132\017.MessageContent\"(\n\tInfoEntry\022\014\n\004type" +
|
||||||
" \002(\t\"0\n\023ModifyMyInfoRequest\022\031\n\005entry\030\001 \003" +
|
"\030\001 \002(\005\022\r\n\005value\030\002 \002(\t\"0\n\023ModifyMyInfoReq" +
|
||||||
"(\0132\n.InfoEntry\";\n\rNotifyMessage\022\014\n\004type\030" +
|
"uest\022\031\n\005entry\030\001 \003(\0132\n.InfoEntry\";\n\rNotif" +
|
||||||
"\001 \002(\005\022\014\n\004head\030\002 \002(\003\022\016\n\006target\030\003 \001(\t\"=\n\022P" +
|
"yMessage\022\014\n\004type\030\001 \002(\005\022\014\n\004head\030\002 \002(\003\022\016\n\006" +
|
||||||
"ullMessageRequest\022\n\n\002id\030\001 \002(\003\022\014\n\004type\030\002 " +
|
"target\030\003 \001(\t\"=\n\022PullMessageRequest\022\n\n\002id" +
|
||||||
"\002(\005\022\r\n\005delay\030\003 \001(\003\"M\n\021PullMessageResult\022" +
|
"\030\001 \002(\003\022\014\n\004type\030\002 \002(\005\022\r\n\005delay\030\003 \001(\003\"M\n\021P" +
|
||||||
"\031\n\007message\030\001 \003(\0132\010.Message\022\017\n\007current\030\002 " +
|
"ullMessageResult\022\031\n\007message\030\001 \003(\0132\010.Mess" +
|
||||||
"\002(\003\022\014\n\004head\030\003 \002(\003\"/\n\023PullGroupInfoResult",
|
"age\022\017\n\007current\030\002 \002(\003\022\014\n\004head\030\003 \002(\003\"/\n\023Pu",
|
||||||
"\022\030\n\004info\030\001 \003(\0132\n.GroupInfo\"6\n\026PullGroupM" +
|
"llGroupInfoResult\022\030\n\004info\030\001 \003(\0132\n.GroupI" +
|
||||||
"emberRequest\022\016\n\006target\030\001 \002(\t\022\014\n\004head\030\002 \002" +
|
"nfo\"6\n\026PullGroupMemberRequest\022\016\n\006target\030" +
|
||||||
"(\003\"5\n\025PullGroupMemberResult\022\034\n\006member\030\001 " +
|
"\001 \002(\t\022\014\n\004head\030\002 \002(\003\"5\n\025PullGroupMemberRe" +
|
||||||
"\003(\0132\014.GroupMember\"-\n\013UserRequest\022\013\n\003uid\030" +
|
"sult\022\034\n\006member\030\001 \003(\0132\014.GroupMember\"-\n\013Us" +
|
||||||
"\001 \002(\t\022\021\n\tupdate_dt\030\002 \001(\003\"0\n\017PullUserRequ" +
|
"erRequest\022\013\n\003uid\030\001 \002(\t\022\021\n\tupdate_dt\030\002 \001(" +
|
||||||
"est\022\035\n\007request\030\001 \003(\0132\014.UserRequest\"/\n\nUs" +
|
"\003\"0\n\017PullUserRequest\022\035\n\007request\030\001 \003(\0132\014." +
|
||||||
"erResult\022\023\n\004user\030\001 \002(\0132\005.User\022\014\n\004code\030\002 " +
|
"UserRequest\"/\n\nUserResult\022\023\n\004user\030\001 \002(\0132" +
|
||||||
"\002(\005\"-\n\016PullUserResult\022\033\n\006result\030\001 \003(\0132\013." +
|
"\005.User\022\014\n\004code\030\002 \002(\005\"-\n\016PullUserResult\022\033" +
|
||||||
"UserResult\"^\n\020QuitGroupRequest\022\020\n\010group_" +
|
"\n\006result\030\001 \003(\0132\013.UserResult\"p\n\020QuitGroup" +
|
||||||
"id\030\001 \002(\t\022\017\n\007to_line\030\002 \003(\005\022\'\n\016notify_cont",
|
"Request\022\020\n\010group_id\030\001 \002(\t\022\017\n\007to_line\030\002 \003",
|
||||||
"ent\030\003 \001(\0132\017.MessageContent\"~\n\030RemoveGrou" +
|
"(\005\022\'\n\016notify_content\030\003 \001(\0132\017.MessageCont" +
|
||||||
"pMemberRequest\022\020\n\010group_id\030\001 \002(\t\022\026\n\016remo" +
|
"ent\022\020\n\010keep_msg\030\004 \001(\005\"~\n\030RemoveGroupMemb" +
|
||||||
"ved_member\030\002 \003(\t\022\017\n\007to_line\030\003 \003(\005\022\'\n\016not" +
|
"erRequest\022\020\n\010group_id\030\001 \002(\t\022\026\n\016removed_m" +
|
||||||
"ify_content\030\004 \001(\0132\017.MessageContent\"u\n\024Tr" +
|
"ember\030\002 \003(\t\022\017\n\007to_line\030\003 \003(\005\022\'\n\016notify_c" +
|
||||||
"ansferGroupRequest\022\020\n\010group_id\030\001 \002(\t\022\021\n\t" +
|
"ontent\030\004 \001(\0132\017.MessageContent\"u\n\024Transfe" +
|
||||||
"new_owner\030\002 \002(\t\022\017\n\007to_line\030\003 \003(\005\022\'\n\016noti" +
|
"rGroupRequest\022\020\n\010group_id\030\001 \002(\t\022\021\n\tnew_o" +
|
||||||
"fy_content\030\004 \001(\0132\017.MessageContent\"\206\001\n\026Mo" +
|
"wner\030\002 \002(\t\022\017\n\007to_line\030\003 \003(\005\022\'\n\016notify_co" +
|
||||||
"difyGroupMemberAlias\022\020\n\010group_id\030\001 \002(\t\022\r" +
|
"ntent\030\004 \001(\0132\017.MessageContent\"\206\001\n\026ModifyG" +
|
||||||
"\n\005alias\030\002 \002(\t\022\017\n\007to_line\030\003 \003(\005\022\'\n\016notify" +
|
"roupMemberAlias\022\020\n\010group_id\030\001 \002(\t\022\r\n\005ali" +
|
||||||
"_content\030\004 \001(\0132\017.MessageContent\022\021\n\tmembe",
|
"as\030\002 \002(\t\022\017\n\007to_line\030\003 \003(\005\022\'\n\016notify_cont",
|
||||||
"r_id\030\005 \001(\t\"\206\001\n\026ModifyGroupMemberExtra\022\020\n" +
|
"ent\030\004 \001(\0132\017.MessageContent\022\021\n\tmember_id\030" +
|
||||||
"\010group_id\030\001 \002(\t\022\017\n\007to_line\030\002 \003(\005\022\'\n\016noti" +
|
"\005 \001(\t\"\206\001\n\026ModifyGroupMemberExtra\022\020\n\010grou" +
|
||||||
"fy_content\030\003 \001(\0132\017.MessageContent\022\r\n\005ext" +
|
"p_id\030\001 \002(\t\022\017\n\007to_line\030\002 \003(\005\022\'\n\016notify_co" +
|
||||||
"ra\030\004 \001(\t\022\021\n\tmember_id\030\005 \001(\t\"P\n\020UserSetti" +
|
"ntent\030\003 \001(\0132\017.MessageContent\022\r\n\005extra\030\004 " +
|
||||||
"ngEntry\022\r\n\005scope\030\001 \002(\005\022\013\n\003key\030\002 \002(\t\022\r\n\005v" +
|
"\001(\t\022\021\n\tmember_id\030\005 \001(\t\"P\n\020UserSettingEnt" +
|
||||||
"alue\030\003 \002(\t\022\021\n\tupdate_dt\030\004 \002(\003\"A\n\024ModifyU" +
|
"ry\022\r\n\005scope\030\001 \002(\005\022\013\n\003key\030\002 \002(\t\022\r\n\005value\030" +
|
||||||
"serSettingReq\022\r\n\005scope\030\001 \002(\005\022\013\n\003key\030\002 \002(" +
|
"\003 \002(\t\022\021\n\tupdate_dt\030\004 \002(\003\"A\n\024ModifyUserSe" +
|
||||||
"\t\022\r\n\005value\030\003 \002(\t\"\032\n\007Version\022\017\n\007version\030\001" +
|
"ttingReq\022\r\n\005scope\030\001 \002(\005\022\013\n\003key\030\002 \002(\t\022\r\n\005" +
|
||||||
" \002(\003\"8\n\024GetUserSettingResult\022 \n\005entry\030\001 " +
|
"value\030\003 \002(\t\"\032\n\007Version\022\017\n\007version\030\001 \002(\003\"" +
|
||||||
"\003(\0132\021.UserSettingEntry\"f\n\006Friend\022\013\n\003uid\030",
|
"8\n\024GetUserSettingResult\022 \n\005entry\030\001 \003(\0132\021",
|
||||||
"\001 \002(\t\022\r\n\005state\030\002 \002(\005\022\021\n\tupdate_dt\030\003 \002(\003\022" +
|
".UserSettingEntry\"f\n\006Friend\022\013\n\003uid\030\001 \002(\t" +
|
||||||
"\r\n\005alias\030\004 \001(\t\022\017\n\007blacked\030\005 \001(\005\022\r\n\005extra" +
|
"\022\r\n\005state\030\002 \002(\005\022\021\n\tupdate_dt\030\003 \002(\003\022\r\n\005al" +
|
||||||
"\030\006 \001(\t\"*\n\020GetFriendsResult\022\026\n\005entry\030\001 \003(" +
|
"ias\030\004 \001(\t\022\017\n\007blacked\030\005 \001(\005\022\r\n\005extra\030\006 \001(" +
|
||||||
"\0132\007.Friend\"7\n\026GetFriendRequestResult\022\035\n\005" +
|
"\t\"*\n\020GetFriendsResult\022\026\n\005entry\030\001 \003(\0132\007.F" +
|
||||||
"entry\030\001 \003(\0132\016.FriendRequest\"\243\001\n\021ConnectA" +
|
"riend\"7\n\026GetFriendRequestResult\022\035\n\005entry" +
|
||||||
"ckPayload\022\020\n\010msg_head\030\001 \001(\003\022\023\n\013friend_he" +
|
"\030\001 \003(\0132\016.FriendRequest\"\243\001\n\021ConnectAckPay" +
|
||||||
"ad\030\002 \001(\003\022\026\n\016friend_rq_head\030\003 \001(\003\022\024\n\014sett" +
|
"load\022\020\n\010msg_head\030\001 \001(\003\022\023\n\013friend_head\030\002 " +
|
||||||
"ing_head\030\004 \001(\003\022\021\n\tnode_addr\030\005 \001(\t\022\021\n\tnod" +
|
"\001(\003\022\026\n\016friend_rq_head\030\003 \001(\003\022\024\n\014setting_h" +
|
||||||
"e_port\030\006 \001(\005\022\023\n\013server_time\030\007 \001(\003\"P\n\rIMH" +
|
"ead\030\004 \001(\003\022\021\n\tnode_addr\030\005 \001(\t\022\021\n\tnode_por" +
|
||||||
"ttpWrapper\022\r\n\005token\030\001 \002(\t\022\021\n\tclient_id\030\002",
|
"t\030\006 \001(\005\022\023\n\013server_time\030\007 \001(\003\"P\n\rIMHttpWr",
|
||||||
" \002(\t\022\017\n\007request\030\003 \002(\t\022\014\n\004data\030\004 \001(\014\"A\n\021S" +
|
"apper\022\r\n\005token\030\001 \002(\t\022\021\n\tclient_id\030\002 \002(\t\022" +
|
||||||
"earchUserRequest\022\017\n\007keyword\030\001 \002(\t\022\r\n\005fuz" +
|
"\017\n\007request\030\003 \002(\t\022\014\n\004data\030\004 \001(\014\"A\n\021Search" +
|
||||||
"zy\030\002 \001(\005\022\014\n\004page\030\003 \001(\005\"(\n\020SearchUserResu" +
|
"UserRequest\022\017\n\007keyword\030\001 \002(\t\022\r\n\005fuzzy\030\002 " +
|
||||||
"lt\022\024\n\005entry\030\001 \003(\0132\005.User\"@\n\026GetChatroomI" +
|
"\001(\005\022\014\n\004page\030\003 \001(\005\"(\n\020SearchUserResult\022\024\n" +
|
||||||
"nfoRequest\022\023\n\013chatroom_id\030\001 \002(\t\022\021\n\tupdat" +
|
"\005entry\030\001 \003(\0132\005.User\"@\n\026GetChatroomInfoRe" +
|
||||||
"e_dt\030\002 \001(\003\"\227\001\n\014ChatroomInfo\022\r\n\005title\030\001 \002" +
|
"quest\022\023\n\013chatroom_id\030\001 \002(\t\022\021\n\tupdate_dt\030" +
|
||||||
"(\t\022\014\n\004desc\030\002 \001(\t\022\020\n\010portrait\030\003 \001(\t\022\024\n\014me" +
|
"\002 \001(\003\"\227\001\n\014ChatroomInfo\022\r\n\005title\030\001 \002(\t\022\014\n" +
|
||||||
"mber_count\030\004 \001(\005\022\021\n\tcreate_dt\030\005 \001(\003\022\021\n\tu" +
|
"\004desc\030\002 \001(\t\022\020\n\010portrait\030\003 \001(\t\022\024\n\014member_" +
|
||||||
"pdate_dt\030\006 \001(\003\022\r\n\005extra\030\007 \001(\t\022\r\n\005state\030\010" +
|
"count\030\004 \001(\005\022\021\n\tcreate_dt\030\005 \001(\003\022\021\n\tupdate" +
|
||||||
" \001(\005\"F\n\034GetChatroomMemberInfoRequest\022\023\n\013",
|
"_dt\030\006 \001(\003\022\r\n\005extra\030\007 \001(\t\022\r\n\005state\030\010 \001(\005\"",
|
||||||
"chatroom_id\030\001 \002(\t\022\021\n\tmax_count\030\002 \001(\005\";\n\022" +
|
"F\n\034GetChatroomMemberInfoRequest\022\023\n\013chatr" +
|
||||||
"ChatroomMemberInfo\022\024\n\014member_count\030\001 \001(\005" +
|
"oom_id\030\001 \002(\t\022\021\n\tmax_count\030\002 \001(\005\";\n\022Chatr" +
|
||||||
"\022\017\n\007members\030\002 \003(\t\"\026\n\010INT64Buf\022\n\n\002id\030\001 \002(" +
|
"oomMemberInfo\022\024\n\014member_count\030\001 \001(\005\022\017\n\007m" +
|
||||||
"\003\"4\n\023NotifyRecallMessage\022\n\n\002id\030\001 \002(\003\022\021\n\t" +
|
"embers\030\002 \003(\t\"\026\n\010INT64Buf\022\n\n\002id\030\001 \002(\003\"4\n\023" +
|
||||||
"from_user\030\002 \002(\t\"/\n\020BlackUserRequest\022\013\n\003u" +
|
"NotifyRecallMessage\022\n\n\002id\030\001 \002(\003\022\021\n\tfrom_" +
|
||||||
"id\030\001 \002(\t\022\016\n\006status\030\002 \002(\005\"\323\001\n\014RouteReques" +
|
"user\030\002 \002(\t\"/\n\020BlackUserRequest\022\013\n\003uid\030\001 " +
|
||||||
"t\022\013\n\003app\030\001 \001(\t\022\020\n\010platform\030\002 \001(\005\022\021\n\tpush" +
|
"\002(\t\022\016\n\006status\030\002 \002(\005\"\323\001\n\014RouteRequest\022\013\n\003" +
|
||||||
"_type\030\003 \001(\005\022\023\n\013device_name\030\004 \001(\t\022\026\n\016devi" +
|
"app\030\001 \001(\t\022\020\n\010platform\030\002 \001(\005\022\021\n\tpush_type" +
|
||||||
"ce_version\030\005 \001(\t\022\022\n\nphone_name\030\006 \001(\t\022\020\n\010" +
|
"\030\003 \001(\005\022\023\n\013device_name\030\004 \001(\t\022\026\n\016device_ve" +
|
||||||
"language\030\007 \001(\t\022\024\n\014carrier_name\030\010 \001(\t\022\023\n\013",
|
"rsion\030\005 \001(\t\022\022\n\nphone_name\030\006 \001(\t\022\020\n\010langu",
|
||||||
"app_version\030\t \001(\t\022\023\n\013sdk_version\030\n \001(\t\"D" +
|
"age\030\007 \001(\t\022\024\n\014carrier_name\030\010 \001(\t\022\023\n\013app_v" +
|
||||||
"\n\rRouteResponse\022\014\n\004host\030\001 \002(\t\022\021\n\tlong_po" +
|
"ersion\030\t \001(\t\022\023\n\013sdk_version\030\n \001(\t\"D\n\rRou" +
|
||||||
"rt\030\002 \002(\005\022\022\n\nshort_port\030\003 \002(\005\"G\n\017GetToken" +
|
"teResponse\022\014\n\004host\030\001 \002(\t\022\021\n\tlong_port\030\002 " +
|
||||||
"Request\022\017\n\007user_id\030\001 \002(\t\022\021\n\tclient_id\030\002 " +
|
"\002(\005\022\022\n\nshort_port\030\003 \002(\005\"G\n\017GetTokenReque" +
|
||||||
"\002(\t\022\020\n\010platform\030\003 \001(\005\"r\n\022LoadRemoteMessa" +
|
"st\022\017\n\007user_id\030\001 \002(\t\022\021\n\tclient_id\030\002 \002(\t\022\020" +
|
||||||
"ges\022#\n\014conversation\030\001 \002(\0132\r.Conversation" +
|
"\n\010platform\030\003 \001(\005\"r\n\022LoadRemoteMessages\022#" +
|
||||||
"\022\022\n\nbefore_uid\030\002 \002(\003\022\r\n\005count\030\003 \002(\005\022\024\n\014c" +
|
"\n\014conversation\030\001 \002(\0132\r.Conversation\022\022\n\nb" +
|
||||||
"ontent_type\030\004 \003(\005\"a\n\020MultiCastMessage\022\021\n" +
|
"efore_uid\030\002 \002(\003\022\r\n\005count\030\003 \002(\005\022\024\n\014conten" +
|
||||||
"\tfrom_user\030\001 \002(\t\022 \n\007content\030\002 \002(\0132\017.Mess" +
|
"t_type\030\004 \003(\005\"a\n\020MultiCastMessage\022\021\n\tfrom" +
|
||||||
"ageContent\022\n\n\002to\030\003 \003(\t\022\014\n\004line\030\004 \002(\005\"E\n\035",
|
"_user\030\001 \002(\t\022 \n\007content\030\002 \002(\0132\017.MessageCo",
|
||||||
"RecallMultiCastMessageRequest\022\022\n\nmessage" +
|
"ntent\022\n\n\002to\030\003 \003(\t\022\014\n\004line\030\004 \002(\005\"E\n\035Recal" +
|
||||||
"_id\030\001 \002(\003\022\020\n\010receiver\030\002 \003(\t\"@\n\017AuthCodeR" +
|
"lMultiCastMessageRequest\022\022\n\nmessage_id\030\001" +
|
||||||
"equest\022\021\n\ttarget_id\030\001 \002(\t\022\014\n\004type\030\002 \002(\005\022" +
|
" \002(\003\022\020\n\010receiver\030\002 \003(\t\"@\n\017AuthCodeReques" +
|
||||||
"\014\n\004host\030\003 \002(\t\"o\n\030ApplicationConfigReques" +
|
"t\022\021\n\ttarget_id\030\001 \002(\t\022\014\n\004type\030\002 \002(\005\022\014\n\004ho" +
|
||||||
"t\022\r\n\005appId\030\001 \002(\t\022\017\n\007appType\030\002 \002(\005\022\021\n\ttim" +
|
"st\030\003 \002(\t\"o\n\030ApplicationConfigRequest\022\r\n\005" +
|
||||||
"estamp\030\003 \002(\003\022\r\n\005nonce\030\004 \002(\t\022\021\n\tsignature" +
|
"appId\030\001 \002(\t\022\017\n\007appType\030\002 \002(\005\022\021\n\ttimestam" +
|
||||||
"\030\005 \002(\tB/\n\025cn.wildfirechat.protoB\nWFCMess" +
|
"p\030\003 \002(\003\022\r\n\005nonce\030\004 \002(\t\022\021\n\tsignature\030\005 \002(" +
|
||||||
"ageZ\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() {
|
||||||
@@ -67502,7 +67665,7 @@ public final class WFCMessage {
|
|||||||
internal_static_GroupInfo_fieldAccessorTable = new
|
internal_static_GroupInfo_fieldAccessorTable = new
|
||||||
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
|
com.google.protobuf.GeneratedMessage.FieldAccessorTable(
|
||||||
internal_static_GroupInfo_descriptor,
|
internal_static_GroupInfo_descriptor,
|
||||||
new java.lang.String[] { "TargetId", "Name", "Portrait", "Owner", "Type", "MemberCount", "Extra", "UpdateDt", "MemberUpdateDt", "Mute", "JoinType", "PrivateChat", "Searchable", "MaxMemberCount", "HistoryMessage", "SuperGroup", });
|
new java.lang.String[] { "TargetId", "Name", "Portrait", "Owner", "Type", "MemberCount", "Extra", "UpdateDt", "MemberUpdateDt", "Mute", "JoinType", "PrivateChat", "Searchable", "MaxMemberCount", "HistoryMessage", "SuperGroup", "Deleted", });
|
||||||
internal_static_GroupMember_descriptor =
|
internal_static_GroupMember_descriptor =
|
||||||
getDescriptor().getMessageTypes().get(3);
|
getDescriptor().getMessageTypes().get(3);
|
||||||
internal_static_GroupMember_fieldAccessorTable = new
|
internal_static_GroupMember_fieldAccessorTable = new
|
||||||
@@ -67760,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.3</version>
|
<version>1.2.7</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>distribution</artifactId>
|
<artifactId>distribution</artifactId>
|
||||||
|
|||||||
@@ -124,6 +124,12 @@ message.global_mute_exception_types 401,402,403,404,405,407,408,410,411
|
|||||||
## 离线用户推送过期天数,0是永不过期,建议配置为7天。
|
## 离线用户推送过期天数,0是永不过期,建议配置为7天。
|
||||||
message.push_expired_days 7
|
message.push_expired_days 7
|
||||||
|
|
||||||
|
## 当会话静音/全局静音/PC在线静音时,普通消息都不会有推送,如果有某些消息类型需要此时保持推送,可以配置到这里。此配置对消息免打扰时段无效。
|
||||||
|
## 此配置只影响远程推送,需要客户端处理客户端在线且在后台收到此消息的处理,需要针对这些消息类型加上本地通知。
|
||||||
|
## 强制推送消息的MessagePayload中pushContent和pushData至少要存在一个才可以推送。
|
||||||
|
## 消息类型以英文逗号分割。
|
||||||
|
#message.force_push_types 401,402
|
||||||
|
|
||||||
## 群发消息(包括server api群发和全局频道群发)时,目标用户是否来自于t_user表。如果使用野火托管用户信息,请设置为true,否则设置为false。
|
## 群发消息(包括server api群发和全局频道群发)时,目标用户是否来自于t_user表。如果使用野火托管用户信息,请设置为true,否则设置为false。
|
||||||
message.broadcast.target_from_user_table true
|
message.broadcast.target_from_user_table true
|
||||||
|
|
||||||
@@ -140,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
|
||||||
|
|
||||||
@@ -203,6 +213,9 @@ group.visible_quit_or_kickoff_notification 0
|
|||||||
## 是否禁止陌生人拉人入群,默认为false
|
## 是否禁止陌生人拉人入群,默认为false
|
||||||
group.disable_stranger_invite false
|
group.disable_stranger_invite false
|
||||||
|
|
||||||
|
## 群组信息是否标记删除
|
||||||
|
group.enable_mark_deletion false
|
||||||
|
|
||||||
## 隐藏用户信息属性类型,2是性别,3是电话号码,4是邮箱,5是地址,6是公司信息,7是社交账号,8是Extra信息。当需要隐藏多个时以英文逗号分开;
|
## 隐藏用户信息属性类型,2是性别,3是电话号码,4是邮箱,5是地址,6是公司信息,7是社交账号,8是Extra信息。当需要隐藏多个时以英文逗号分开;
|
||||||
## 本配置是为了提高安全性,避免把对应信息同步到客户端,这样就能防止程序被破解从而拿到用户关键信息。仅对客户端有效,server api不受影响。
|
## 本配置是为了提高安全性,避免把对应信息同步到客户端,这样就能防止程序被破解从而拿到用户关键信息。仅对客户端有效,server api不受影响。
|
||||||
## 注意,修改本配置不会对已经同步的信息产生影响。
|
## 注意,修改本配置不会对已经同步的信息产生影响。
|
||||||
@@ -389,7 +402,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.3</version>
|
<version>1.2.7</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,34 @@
|
|||||||
|
|
||||||
# 更新记录
|
# 更新记录
|
||||||
|
|
||||||
|
--------------
|
||||||
|
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:
|
||||||
|
1. Server API添加通过邮箱获取用户信息的接口。
|
||||||
|
2. 支持群组标记删除功能。
|
||||||
|
3. 添加配置,可以设置在静音时强制推送指定类型消息。
|
||||||
|
4. 支持用户设置添加好友是否验证功能
|
||||||
|
|
||||||
|
--------------
|
||||||
|
Release note 1.2.4:
|
||||||
|
1. 去掉用户的默认密码。
|
||||||
|
2. 去掉频道和机器人的默认头像。
|
||||||
|
3. 修改在线状态回调数据,返回此用户的所有端状态。
|
||||||
|
|
||||||
--------------
|
--------------
|
||||||
Release note 1.2.3:
|
Release note 1.2.3:
|
||||||
1. 同步专业版IM服务server SDK。
|
1. 同步专业版IM服务server SDK。
|
||||||
|
|||||||
+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.3</version>
|
<version>1.2.7</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();
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ public class Main {
|
|||||||
testGroup();
|
testGroup();
|
||||||
testChatroom();
|
testChatroom();
|
||||||
testMessage();
|
testMessage();
|
||||||
|
testChannelApi();
|
||||||
testGeneralApi();
|
testGeneralApi();
|
||||||
testSensitiveApi();
|
testSensitiveApi();
|
||||||
if (commercialServer) {
|
if (commercialServer) {
|
||||||
@@ -178,6 +179,15 @@ public class Main {
|
|||||||
System.out.println("get user info by userId failure");
|
System.out.println("get user info by userId failure");
|
||||||
System.exit(-1);
|
System.exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IMResult<OutputUserInfoList> userInfoListIMResult = UserAdmin.getUserByEmail("[email protected]");
|
||||||
|
if(userInfoListIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS || userInfoListIMResult.getErrorCode() == ErrorCode.ERROR_CODE_NOT_EXIST) {
|
||||||
|
System.out.println("getUserByEmail success");
|
||||||
|
} else {
|
||||||
|
System.out.println("getUserByEmail failure");
|
||||||
|
System.exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
InputOutputUserInfo updateUserInfo = new InputOutputUserInfo();
|
InputOutputUserInfo updateUserInfo = new InputOutputUserInfo();
|
||||||
updateUserInfo.setUserId(System.currentTimeMillis()+"");
|
updateUserInfo.setUserId(System.currentTimeMillis()+"");
|
||||||
updateUserInfo.setDisplayName("updatedUserName");
|
updateUserInfo.setDisplayName("updatedUserName");
|
||||||
@@ -871,6 +881,51 @@ public class Main {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//***********************************************
|
||||||
|
//**** 测试频道功能
|
||||||
|
//***********************************************
|
||||||
|
static void testChannelApi() throws Exception {
|
||||||
|
String channelName = "MyChannel";
|
||||||
|
String channelOwner = "user1";
|
||||||
|
InputCreateChannel inputCreateChannel = new InputCreateChannel();
|
||||||
|
inputCreateChannel.setName(channelName);
|
||||||
|
inputCreateChannel.setOwner(channelOwner);
|
||||||
|
IMResult<OutputCreateChannel> resultCreateChannel = ChannelAdmin.createChannel(inputCreateChannel);
|
||||||
|
if (resultCreateChannel != null && resultCreateChannel.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
||||||
|
System.out.println("success");
|
||||||
|
inputCreateChannel.setTargetId(resultCreateChannel.result.getTargetId());
|
||||||
|
} else {
|
||||||
|
System.out.println("create channel failure");
|
||||||
|
System.exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
IMResult<OutputGetChannelInfo> resultGetChannel = ChannelAdmin.getChannelInfo(inputCreateChannel.getTargetId());
|
||||||
|
if(resultGetChannel != null && resultGetChannel.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS
|
||||||
|
&& resultGetChannel.getResult().getName().equals(channelName)
|
||||||
|
&& resultGetChannel.getResult().getOwner().equals(channelOwner)) {
|
||||||
|
System.out.println("success");
|
||||||
|
} else {
|
||||||
|
System.out.println("get channel failure");
|
||||||
|
System.exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
IMResult<Void> voidIMResult = ChannelAdmin.destroyChannel(inputCreateChannel.getTargetId());
|
||||||
|
if(voidIMResult != null && voidIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
||||||
|
System.out.println("success");
|
||||||
|
} else {
|
||||||
|
System.out.println("destroy channel failure");
|
||||||
|
System.exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
resultGetChannel = ChannelAdmin.getChannelInfo(inputCreateChannel.getTargetId());
|
||||||
|
if(resultGetChannel != null && resultGetChannel.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS && (resultGetChannel.getResult().getState() & ProtoConstants.ChannelState.Channel_State_Mask_Deleted) > 0) {
|
||||||
|
System.out.println("success");
|
||||||
|
} else {
|
||||||
|
System.out.println("get channel failure");
|
||||||
|
System.exit(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//***********************************************
|
//***********************************************
|
||||||
//**** 一些其它的功能,比如创建频道,更新用户设置等
|
//**** 一些其它的功能,比如创建频道,更新用户设置等
|
||||||
//***********************************************
|
//***********************************************
|
||||||
@@ -899,46 +954,6 @@ public class Main {
|
|||||||
System.exit(-1);
|
System.exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
String channelName = "MyChannel";
|
|
||||||
String channelOwner = "user1";
|
|
||||||
InputCreateChannel inputCreateChannel = new InputCreateChannel();
|
|
||||||
inputCreateChannel.setName(channelName);
|
|
||||||
inputCreateChannel.setOwner(channelOwner);
|
|
||||||
IMResult<OutputCreateChannel> resultCreateChannel = GeneralAdmin.createChannel(inputCreateChannel);
|
|
||||||
if (resultCreateChannel != null && resultCreateChannel.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
|
||||||
System.out.println("success");
|
|
||||||
inputCreateChannel.setTargetId(resultCreateChannel.result.getTargetId());
|
|
||||||
} else {
|
|
||||||
System.out.println("create channel failure");
|
|
||||||
System.exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
IMResult<OutputGetChannelInfo> resultGetChannel = GeneralAdmin.getChannelInfo(inputCreateChannel.getTargetId());
|
|
||||||
if(resultGetChannel != null && resultGetChannel.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS
|
|
||||||
&& resultGetChannel.getResult().getName().equals(channelName)
|
|
||||||
&& resultGetChannel.getResult().getOwner().equals(channelOwner)) {
|
|
||||||
System.out.println("success");
|
|
||||||
} else {
|
|
||||||
System.out.println("get channel failure");
|
|
||||||
System.exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
IMResult<Void> voidIMResult = GeneralAdmin.destroyChannel(inputCreateChannel.getTargetId());
|
|
||||||
if(voidIMResult != null && voidIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
|
||||||
System.out.println("success");
|
|
||||||
} else {
|
|
||||||
System.out.println("destroy channel failure");
|
|
||||||
System.exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
resultGetChannel = GeneralAdmin.getChannelInfo(inputCreateChannel.getTargetId());
|
|
||||||
if(resultGetChannel != null && resultGetChannel.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS && (resultGetChannel.getResult().getState() & ProtoConstants.ChannelState.Channel_State_Mask_Deleted) > 0) {
|
|
||||||
System.out.println("success");
|
|
||||||
} else {
|
|
||||||
System.out.println("get channel failure");
|
|
||||||
System.exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
IMResult<HealthCheckResult> health = GeneralAdmin.healthCheck();
|
IMResult<HealthCheckResult> health = GeneralAdmin.healthCheck();
|
||||||
if(health != null && health.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
if(health != null && health.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
||||||
System.out.println(health.result);
|
System.out.println(health.result);
|
||||||
@@ -1497,7 +1512,7 @@ public class Main {
|
|||||||
inputCreateChannel.setAuto(1);
|
inputCreateChannel.setAuto(1);
|
||||||
inputCreateChannel.setCallback("http://192.168.1.81:8088/wf/channelId123");
|
inputCreateChannel.setCallback("http://192.168.1.81:8088/wf/channelId123");
|
||||||
inputCreateChannel.setState(Channel_State_Mask_FullInfo | Channel_State_Mask_Unsubscribed_User_Access | Channel_State_Mask_Active_Subscribe | Channel_State_Mask_Message_Unsubscribed);
|
inputCreateChannel.setState(Channel_State_Mask_FullInfo | Channel_State_Mask_Unsubscribed_User_Access | Channel_State_Mask_Active_Subscribe | Channel_State_Mask_Message_Unsubscribed);
|
||||||
IMResult<OutputCreateChannel> resultCreateChannel = GeneralAdmin.createChannel(inputCreateChannel);
|
IMResult<OutputCreateChannel> resultCreateChannel = ChannelAdmin.createChannel(inputCreateChannel);
|
||||||
if (resultCreateChannel != null && resultCreateChannel.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
if (resultCreateChannel != null && resultCreateChannel.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
||||||
System.out.println("create channel success");
|
System.out.println("create channel success");
|
||||||
} else {
|
} else {
|
||||||
@@ -1527,7 +1542,7 @@ public class Main {
|
|||||||
System.exit(-1);
|
System.exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
resultVoid = GeneralAdmin.subscribeChannel(channelId, "userId4");
|
resultVoid = ChannelAdmin.subscribeChannel(channelId, "userId4");
|
||||||
if (resultVoid != null && resultVoid.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
if (resultVoid != null && resultVoid.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
||||||
System.out.println("subscribe done");
|
System.out.println("subscribe done");
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -24,6 +24,11 @@ public class UserAdmin {
|
|||||||
return AdminHttpUtils.httpJsonPost(path, getUserInfo, InputOutputUserInfo.class);
|
return AdminHttpUtils.httpJsonPost(path, getUserInfo, InputOutputUserInfo.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static IMResult<OutputUserInfoList> getUserByEmail(String email) throws Exception {
|
||||||
|
String path = APIPath.User_Get_Email_Info;
|
||||||
|
return AdminHttpUtils.httpJsonPost(path, email, OutputUserInfoList.class);
|
||||||
|
}
|
||||||
|
|
||||||
public static IMResult<OutputGetUserList> getAllUsers(int count, int offset) throws Exception {
|
public static IMResult<OutputGetUserList> getAllUsers(int count, int offset) throws Exception {
|
||||||
String path = APIPath.User_Get_All;
|
String path = APIPath.User_Get_All;
|
||||||
InputGetUserList input = new InputGetUserList();
|
InputGetUserList input = new InputGetUserList();
|
||||||
|
|||||||
@@ -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