下面列出了org.apache.commons.lang3.StringUtils#isAnyEmpty ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
protected void msgStatusResponse(Command command, String msgId, long msgTime, int statusValue) {
if (command == null || StringUtils.isAnyEmpty(command.getDeviceId(), msgId)) {
return;
}
CoreProto.MsgStatus status = CoreProto.MsgStatus.newBuilder().setMsgId(msgId).setMsgStatus(statusValue)
.setMsgServerTime(msgTime).build();
ImStcMessageProto.MsgWithPointer statusMsg = ImStcMessageProto.MsgWithPointer.newBuilder()
.setType(MsgType.MSG_STATUS).setStatus(status).build();
ImStcMessageProto.ImStcMessageRequest request = ImStcMessageProto.ImStcMessageRequest.newBuilder()
.addList(statusMsg).build();
CoreProto.TransportPackageData data = CoreProto.TransportPackageData.newBuilder()
.setData(request.toByteString()).build();
ChannelWriter.writeByDeviceId(command.getDeviceId(), new RedisCommand().add(CommandConst.PROTOCOL_VERSION)
.add(CommandConst.IM_MSG_TOCLIENT).add(data.toByteArray()));
}
protected void msgStatusResponse(Command command, String msgId, long msgTime, int statusValue) {
if (command == null || StringUtils.isAnyEmpty(command.getDeviceId(), msgId)) {
return;
}
CoreProto.MsgStatus status = CoreProto.MsgStatus.newBuilder().setMsgId(msgId).setMsgStatus(statusValue)
.setMsgServerTime(msgTime).build();
ImStcMessageProto.MsgWithPointer statusMsg = ImStcMessageProto.MsgWithPointer.newBuilder()
.setType(MsgType.MSG_STATUS).setStatus(status).build();
ImStcMessageProto.ImStcMessageRequest request = ImStcMessageProto.ImStcMessageRequest.newBuilder()
.addList(statusMsg).build();
CoreProto.TransportPackageData data = CoreProto.TransportPackageData.newBuilder()
.setData(request.toByteString()).build();
ChannelWriter.writeByDeviceId(command.getDeviceId(), new RedisCommand().add(CommandConst.PROTOCOL_VERSION)
.add(CommandConst.IM_MSG_TOCLIENT).add(data.toByteArray()));
}
public static String buildQuery(Map<String, String> params, String charset) throws IOException {
if (params == null || params.isEmpty()) {
return null;
}
StringBuilder query = new StringBuilder();
Set<Entry<String, String>> entries = params.entrySet();
boolean hasParam = false;
for (Entry<String, String> entry : entries) {
String name = entry.getKey();
String value = entry.getValue();
// 忽略参数名或参数值为空的参数
if (StringUtils.isAnyEmpty(name, value)) {
if (hasParam) {
query.append("&");
} else {
hasParam = true;
}
query.append(name).append("=").append(URLEncoder.encode(value, charset));
}
}
return query.toString();
}
/**
* 初始化连接池主库
*
* @param pro
* @return
* @throws Exception
*/
public static String getJdbcUrl(Properties pro) throws Exception {
String host = trimToNull(pro, JdbcConst.MYSQL_HOST);
String port = trimToNull(pro, JdbcConst.MYSQL_PORT);
String dbName = trimToNull(pro, JdbcConst.MYSQL_DB);
// "jdbc:mysql://localhost:3306/mysql?";
String url = "jdbc:mysql://" + host + ":" + port + "/" + dbName;
if (StringUtils.isAnyEmpty(host, port, dbName)) {
throw new Exception("jdbc url=" + url + " is invalid");
}
String useUnicode = trimToNull(pro, JdbcConst.MYSQL_USE_UNICODE, "true");
String characterEncoding = trimToNull(pro, JdbcConst.MYSQL_CHARACTER_ENCODING, "utf-8");
String verifyServerCertificate = trimToNull(pro, JdbcConst.MYSQL_VERIFY_SERVER_CERTIFICATE, "false");
String useSSL = trimToNull(pro, JdbcConst.MYSQL_USE_SSL, "true");
StringBuilder sb = buildJdbcUrlWithParameters(url, useUnicode, characterEncoding, verifyServerCertificate,
useSSL);
return sb.toString();
}
public static void initPool(Properties pro) throws Exception {
List<String> jdbcUrlList = getSlaveJdbcUrl(pro);
String userName = trimToNull(pro, JdbcConst.MYSQL_SLAVE_USER_NAME);
String password = trimToNull(pro, JdbcConst.MYSQL_SLAVE_PASSWORD);
if (jdbcUrlList == null || jdbcUrlList.size() == 0 || StringUtils.isAnyEmpty(userName, password)) {
SqlLog.warn(
"load database slave for mysql fail, system will user mysql master connection pool.urls={} user={} passwd={}",
jdbcUrlList, userName, password);
return;
}
cpdsList = new ArrayList<ComboPooledDataSource>();
for (String jdbcUrl : jdbcUrlList) {
ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setDriverClass(MYSQL_JDBC_DRIVER); // loads the jdbc driver
cpds.setJdbcUrl(jdbcUrl);
cpds.setUser(userName);
cpds.setPassword(password);
int inititalSize = Integer.valueOf(trimToNull(pro, JdbcConst.MYSQL_SLAVE_INITIAL_SIZE, "10"));
int maxSize = Integer.valueOf(trimToNull(pro, JdbcConst.MYSQL_SLAVE_MAX_SIZE, "100"));
cpds.setInitialPoolSize(inititalSize);// 初始创建默认10个连接
cpds.setMaxPoolSize(maxSize);// 最大默认100个
int inc = (maxSize - inititalSize) / 5;
cpds.setAcquireIncrement(Integer.max(1, inc));// 每次创建个数
int maxIdle = Integer.valueOf(trimToNull(pro, JdbcConst.MYSQL_SLAVE_MAX_IDLE, "60"));
cpds.setMaxIdleTime(maxIdle);// 最大空闲时间
cpdsList.add(cpds);
SqlLog.info("windchat init mysql slave connection pool cpds={}", cpds.toString());
}
}
@Override
protected CloudTarget extractTarget(HttpServletRequest request) {
String organizationName = request.getParameter(ConfigurationEntriesResource.REQUEST_PARAM_ORGANIZATION);
String spaceName = request.getParameter(ConfigurationEntriesResource.REQUEST_PARAM_SPACE);
if (StringUtils.isAnyEmpty(organizationName, spaceName)) {
throw new SLException(Messages.ORG_AND_SPACE_MUST_BE_SPECIFIED);
}
return new CloudTarget(organizationName, spaceName);
}
public static void initPool(Properties pro) throws Exception {
List<String> jdbcUrlList = getSlaveDBUrl(pro);
String userName = trimToNull(pro, JdbcConst.MYSQL_SLAVE_USER_NAME);
String password = trimToNull(pro, JdbcConst.MYSQL_SLAVE_PASSWORD);
if (jdbcUrlList == null || jdbcUrlList.size() == 0 || StringUtils.isAnyEmpty(userName, password)) {
SqlLog.warn(
"load database slave for mysql fail, system will user mysql master connection pool.urls={} user={} passwd={}",
jdbcUrlList, userName, password);
return;
}
cpdsList = new ArrayList<ComboPooledDataSource>();
for (String jdbcUrl : jdbcUrlList) {
ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setDriverClass(MYSQL_JDBC_DRIVER); // loads the jdbc driver
cpds.setJdbcUrl(jdbcUrl);
cpds.setUser(userName);
cpds.setPassword(password);
int inititalSize = Integer.valueOf(trimToNull(pro, JdbcConst.MYSQL_SLAVE_INITIAL_SIZE, "10"));
int maxSize = Integer.valueOf(trimToNull(pro, JdbcConst.MYSQL_SLAVE_MAX_SIZE, "100"));
cpds.setInitialPoolSize(inititalSize);// 初始创建默认10个连接
cpds.setMaxPoolSize(maxSize);// 最大默认100个
int inc = (maxSize - inititalSize) / 5;
cpds.setAcquireIncrement(Integer.max(1, inc));// 每次创建个数
int maxIdle = Integer.valueOf(trimToNull(pro, JdbcConst.MYSQL_SLAVE_MAX_IDLE, "60"));
cpds.setMaxIdleTime(maxIdle);// 最大空闲时间
cpdsList.add(cpds);
SqlLog.info("openzaly init mysql slave connection pool cpds={}", cpds.toString());
}
}
private void storeTelemetryForStack(Stack stack) {
if (stack.getCluster() == null || StringUtils.isAnyEmpty(stack.getType().name(), stack.getResourceCrn(), stack.getCluster().getName())) {
return;
}
List<Component> enrichedComponents = stack.getComponents().stream()
.filter(component -> ComponentType.TELEMETRY.equals(component.getComponentType()))
.map(component -> {
LOGGER.debug("Found TELEMETRY component for stack, will enrich that with cluster data before saving it.");
FluentClusterType fluentClusterType = StackType.DATALAKE.equals(stack.getType())
? FluentClusterType.DATALAKE : FluentClusterType.DATAHUB;
try {
Telemetry telemetry = component.getAttributes().get(Telemetry.class);
if (telemetry != null) {
telemetry.setRules(accountTelemetryClientService.getAnonymizationRules());
}
cloudStorageFolderResolverService.updateStorageLocation(telemetry,
fluentClusterType.value(),
stack.getCluster().getName(), stack.getResourceCrn());
component.setAttributes(Json.silent(telemetry));
} catch (IOException e) {
LOGGER.info("Could not create Cloudbreak telemetry component.", e);
}
return component;
})
.collect(Collectors.toList());
componentConfigProviderService.store(enrichedComponents);
}
public static void initPool(Properties pro) throws Exception {
List<String> jdbcUrlList = getSlaveJdbcUrl(pro);
String userName = trimToNull(pro, JdbcConst.MYSQL_SLAVE_USER_NAME);
String password = trimToNull(pro, JdbcConst.MYSQL_SLAVE_PASSWORD);
if (jdbcUrlList == null || jdbcUrlList.size() == 0 || StringUtils.isAnyEmpty(userName, password)) {
SqlLog.warn(
"load database slave for mysql fail, system will user mysql master connection pool.urls={} user={} passwd={}",
jdbcUrlList, userName, password);
return;
}
cpdsList = new ArrayList<ComboPooledDataSource>();
for (String jdbcUrl : jdbcUrlList) {
ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setDriverClass(MYSQL_JDBC_DRIVER); // loads the jdbc driver
cpds.setJdbcUrl(jdbcUrl);
cpds.setUser(userName);
cpds.setPassword(password);
int inititalSize = Integer.valueOf(trimToNull(pro, JdbcConst.MYSQL_SLAVE_INITIAL_SIZE, "10"));
int maxSize = Integer.valueOf(trimToNull(pro, JdbcConst.MYSQL_SLAVE_MAX_SIZE, "100"));
cpds.setInitialPoolSize(inititalSize);// 初始创建默认10个连接
cpds.setMaxPoolSize(maxSize);// 最大默认100个
int inc = (maxSize - inititalSize) / 5;
cpds.setAcquireIncrement(Integer.max(1, inc));// 每次创建个数
int maxIdle = Integer.valueOf(trimToNull(pro, JdbcConst.MYSQL_SLAVE_MAX_IDLE, "60"));
cpds.setMaxIdleTime(maxIdle);// 最大空闲时间
cpdsList.add(cpds);
SqlLog.info("openzaly init mysql slave connection pool cpds={}", cpds.toString());
}
}
/**
* 初始化从库连接池
*
* @param pro
* @return
* @throws Exception
*/
public static List<String> getSlaveJdbcUrl(Properties pro) throws Exception {
String slaveHosts = trimToNull(pro, JdbcConst.MYSQL_SLAVE_HOST);// 192.168.3.4,192.168.3.5,192.168.3.6
if (StringUtils.isEmpty(slaveHosts)) {
return null;
}
List<String> urlList = new ArrayList<String>();
String[] hosts = slaveHosts.split(",");
for (String host : hosts) {
host = StringUtils.trimToNull(host);
String port = trimToNull(pro, JdbcConst.MYSQL_PORT);
String dbName = trimToNull(pro, JdbcConst.MYSQL_DB);
// "jdbc:mysql://localhost:3306/mysql?";
String url = "jdbc:mysql://" + host + ":" + port + "/" + dbName;
if (StringUtils.isAnyEmpty(host, port, dbName)) {
throw new Exception("mysql slave jdbc url=" + url + " is invalid");
}
String useUnicode = pro.getProperty(JdbcConst.MYSQL_SLAVE_USE_UNICODE, "true");
String characterEncoding = pro.getProperty(JdbcConst.MYSQL_SLAVE_CHARACTER_ENCODING, "utf-8");
String verifyServerCertificate = pro.getProperty(JdbcConst.MYSQL_SLAVE_VERIFY_SERVER_CERTIFICATE, "false");
String useSSL = pro.getProperty(JdbcConst.MYSQL_SLAVE_USE_SSL, "true");
StringBuilder sb = buildJdbcUrlWithParameters(url, useUnicode, characterEncoding, verifyServerCertificate,
useSSL);
urlList.add(sb.toString());
}
return urlList;
}
/**
* 获取用户群组中,不存在的好友用户
*
* @param command
* @return
*/
public CommandResponse nonMembers(Command command) {
CommandResponse commandResponse = new CommandResponse().setAction(CommandConst.ACTION_RES);
IErrorCode errCode = ErrorCode2.ERROR;
try {
ApiGroupNonMembersProto.ApiGroupNonMembersRequest request = ApiGroupNonMembersProto.ApiGroupNonMembersRequest
.parseFrom(command.getParams());
String siteUserId = command.getSiteUserId();
String groupId = request.getGroupId();
int pageNum = request.getPageNumber();
int pageSize = request.getPageSize();
if (pageNum == 0 && pageSize == 0) {
pageSize = 100;
}
LogUtils.requestDebugLog(logger, command, request.toString());
if (StringUtils.isAnyEmpty(siteUserId, groupId)) {
throw new ZalyException(ErrorCode2.ERROR_PARAMETER);
}
if (!checkGroupStatus(groupId)) {
throw new ZalyException(ErrorCode2.ERROR_GROUP_DELETED);
}
List<SimpleUserBean> userFriendList = UserGroupDao.getInstance().getUserFriendNonGroupMemberList(siteUserId,
groupId, pageNum, pageSize);
ApiGroupNonMembersProto.ApiGroupNonMembersResponse.Builder responseBuilder = ApiGroupNonMembersProto.ApiGroupNonMembersResponse
.newBuilder();
for (SimpleUserBean friendBean : userFriendList) {
UserProto.SimpleUserProfile friendProfile = UserProto.SimpleUserProfile.newBuilder()
.setSiteUserId(friendBean.getUserId()).setUserName(String.valueOf(friendBean.getUserName()))
.setUserPhoto(String.valueOf(friendBean.getUserPhoto())).build();
responseBuilder.addProfile(friendProfile);
}
commandResponse.setParams(responseBuilder.build().toByteArray());
errCode = ErrorCode2.SUCCESS;
} catch (Exception e) {
if (e instanceof ZalyException) {
errCode = ((ZalyException) e).getErrCode();
} else {
errCode = ErrorCode2.ERROR_SYSTEMERROR;
}
LogUtils.requestErrorLog(logger, command, e);
}
return commandResponse.setErrCode(errCode);
}
/**
* Uploads a file to S3 and triggers a MediaConvert job
*
* @param request the request
* @return the result of triggering the job
* @throws IOException if there is any error reading the content of the file
* @throws AwsException if there is any error uploading the file or triggering the job
* @throws InvalidParametersException if there is any error parsing the request
*/
@PostMapping("/upload")
public ResultOne<MediaConvertResult> uploadVideo(HttpServletRequest request)
throws IOException, AwsException, InvalidParametersException {
if (ServletFileUpload.isMultipartContent(request)) {
ResultOne<MediaConvertResult> result = new ResultOne<>();
try {
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iterator = upload.getItemIterator(request);
String siteId = null;
String inputProfileId = null;
String outputProfileId = null;
while (iterator.hasNext()) {
FileItemStream item = iterator.next();
String name = item.getFieldName();
try (InputStream stream = item.openStream()) {
if (item.isFormField()) {
switch (name) {
case REQUEST_PARAM_SITEID:
siteId = Streams.asString(stream);
break;
case INPUT_PROFILE_PARAM:
inputProfileId = Streams.asString(stream);
break;
case OUTPUT_PROFILE_PARAM:
outputProfileId = Streams.asString(stream);
break;
default:
// Unknown parameter, just skip it...
}
} else {
if (StringUtils.isAnyEmpty(siteId, inputProfileId, outputProfileId)) {
throw new InvalidParametersException("Missing one or more required parameters: "
+ "siteId, inputProfileId or outputProfileId");
}
String filename = item.getName();
if (StringUtils.isNotEmpty(filename)) {
filename = FilenameUtils.getName(filename);
}
result.setEntity(RESULT_KEY_ITEM,
mediaConvertService
.uploadVideo(siteId, inputProfileId, outputProfileId, filename, stream));
result.setResponse(ApiResponse.OK);
}
}
}
return result;
} catch (FileUploadException e) {
throw new InvalidParametersException("The request body is invalid");
}
} else {
throw new InvalidParametersException("The request is not multipart");
}
}
/**
* 获取群成员 <br>
* 无权限控制
*
* @param command
* @return
*/
public CommandResponse members(Command command) {
CommandResponse commandResponse = new CommandResponse().setAction(CommandConst.ACTION_RES);
IErrorCode errCode = ErrorCode2.ERROR;
try {
ApiGroupMembersProto.ApiGroupMembersRequest request = ApiGroupMembersProto.ApiGroupMembersRequest
.parseFrom(command.getParams());
String siteUserId = command.getSiteUserId();
String siteGroupId = request.getGroupId();
int pageNum = 1;
int pageSize = GroupConfig.GROUP_MAX_MEMBER_COUNT;
LogUtils.requestDebugLog(logger, command, request.toString());
if (StringUtils.isAnyEmpty(siteUserId, siteGroupId)) {
throw new ZalyException(ErrorCode2.ERROR_PARAMETER);
}
if (!checkGroupStatus(siteGroupId)) {
throw new ZalyException(ErrorCode2.ERROR_GROUP_DELETED);
}
List<GroupMemberBean> memberList = UserGroupDao.getInstance().getGroupMemberList(siteGroupId, pageNum,
pageSize);
ApiGroupMembersProto.ApiGroupMembersResponse.Builder responseBuilder = ApiGroupMembersProto.ApiGroupMembersResponse
.newBuilder();
for (GroupMemberBean member : memberList) {
GroupProto.GroupMemberRole memberRole = GroupProto.GroupMemberRole.forNumber(member.getUserRole());
UserProto.UserProfile memberProfile = UserProto.UserProfile.newBuilder()
.setSiteUserId(member.getUserId()).setUserName(String.valueOf(member.getUserName()))
.setUserPhoto(String.valueOf(member.getUserPhoto())).build();
GroupProto.GroupMemberProfile groupMember = GroupProto.GroupMemberProfile.newBuilder()
.setRole(memberRole).setProfile(memberProfile).build();
responseBuilder.addList(groupMember);
}
commandResponse.setParams(responseBuilder.build().toByteArray());
errCode = ErrorCode2.SUCCESS;
} catch (Exception e) {
if (e instanceof ZalyException) {
errCode = ((ZalyException) e).getErrCode();
} else {
errCode = ErrorCode2.ERROR_SYSTEMERROR;
}
LogUtils.requestErrorLog(logger, command, e);
}
return commandResponse.setErrCode(errCode);
}
/**
* 用户更新群资料<br>
* 群主/管理员权限限制
*
* @param command
* @return
*/
public CommandResponse updateProfile(Command command) {
CommandResponse commandResponse = new CommandResponse().setAction(CommandConst.ACTION_RES);
IErrorCode errCode = ErrorCode2.ERROR;
try {
ApiGroupUpdateProfileProto.ApiGroupUpdateProfileRequest request = ApiGroupUpdateProfileProto.ApiGroupUpdateProfileRequest
.parseFrom(command.getParams());
String siteUserId = command.getSiteUserId();
String groupId = request.getProfile().getId();
String photoId = request.getProfile().getIcon();
String groupName = request.getProfile().getName();
String groupNotice = request.getProfile().getGroupNotice();
// 新的群群主
String newGroupOwner = request.getNewGroupOwner();
// 是否可以邀请群聊(除了群主以外的其他群成员)
boolean closeInviteGroupChat = request.getCloseInviteGroupChat();
LogUtils.requestDebugLog(logger, command, request.toString());
if (StringUtils.isAnyEmpty(siteUserId, groupId)) {
throw new ZalyException(ErrorCode2.ERROR_PARAMETER);
}
if (!checkGroupStatus(groupId)) {
throw new ZalyException(ErrorCode2.ERROR_GROUP_DELETED);
}
// 判断是否具有权限,群主拥有权限
String groupMasterId = UserGroupDao.getInstance().getGroupMaster(groupId);
if (siteUserId.equals(groupMasterId)) {
GroupProfileBean gprofileBean = new GroupProfileBean();
gprofileBean.setGroupId(groupId);
gprofileBean.setGroupName(groupName);
gprofileBean.setGroupPhoto(photoId);
gprofileBean.setGroupNotice(groupNotice);
gprofileBean.setCreateUserId(newGroupOwner);
gprofileBean.setCloseInviteGroupChat(closeInviteGroupChat);
if (StringUtils.isNotEmpty(groupName)) {
if (UserGroupDao.getInstance().updateGroupProfile(gprofileBean)) {
errCode = ErrorCode2.SUCCESS;
}
} else {
if (UserGroupDao.getInstance().updateGroupIGC(gprofileBean)) {
errCode = ErrorCode2.SUCCESS;
}
}
} else {
errCode = ErrorCode2.ERROR_NOPERMISSION;
}
} catch (Exception e) {
if (e instanceof ZalyException) {
errCode = ((ZalyException) e).getErrCode();
} else {
errCode = ErrorCode2.ERROR_SYSTEMERROR;
}
LogUtils.requestErrorLog(logger, command, e);
}
return commandResponse.setErrCode(errCode);
}
/**
* 获取用户群组中,不存在的好友用户
*
* @param command
* @return
*/
public CommandResponse nonMembers(Command command) {
CommandResponse commandResponse = new CommandResponse().setAction(CommandConst.ACTION_RES);
IErrorCode errCode = ErrorCode2.ERROR;
try {
ApiGroupNonMembersProto.ApiGroupNonMembersRequest request = ApiGroupNonMembersProto.ApiGroupNonMembersRequest
.parseFrom(command.getParams());
String siteUserId = command.getSiteUserId();
String groupId = request.getGroupId();
int pageNum = request.getPageNumber();
int pageSize = request.getPageSize();
if (pageNum == 0 && pageSize == 0) {
pageNum = 1;
pageSize = 100;
}
LogUtils.requestDebugLog(logger, command, request.toString());
if (StringUtils.isAnyEmpty(siteUserId, groupId)) {
throw new ZalyException(ErrorCode2.ERROR_PARAMETER);
}
if (!checkGroupStatus(groupId)) {
throw new ZalyException(ErrorCode2.ERROR_GROUP_DELETED);
}
List<SimpleUserBean> userFriendList = UserGroupDao.getInstance().getUserFriendNonGroupMemberList(siteUserId,
groupId, pageNum, pageSize);
ApiGroupNonMembersProto.ApiGroupNonMembersResponse.Builder responseBuilder = ApiGroupNonMembersProto.ApiGroupNonMembersResponse
.newBuilder();
for (SimpleUserBean friendBean : userFriendList) {
UserProto.SimpleUserProfile friendProfile = UserProto.SimpleUserProfile.newBuilder()
.setSiteUserId(friendBean.getUserId()).setUserName(String.valueOf(friendBean.getUserName()))
.setUserPhoto(String.valueOf(friendBean.getUserPhoto())).build();
responseBuilder.addProfile(friendProfile);
}
commandResponse.setParams(responseBuilder.build().toByteArray());
errCode = ErrorCode2.SUCCESS;
} catch (Exception e) {
if (e instanceof ZalyException) {
errCode = ((ZalyException) e).getErrCode();
} else {
errCode = ErrorCode2.ERROR_SYSTEMERROR;
}
LogUtils.requestErrorLog(logger, command, e);
}
return commandResponse.setErrCode(errCode);
}
public CommandResponse handle(Command command) {
try {
ChannelSession channelSession = command.getChannelSession();
if (channelSession == null || channelSession.getChannel() == null) {
logger.error("{} client={} api request handler error.channelSession={}", AkxProject.PLN,
command.getClientIp(), channelSession);
// NULL,则不需要再次关闭channel
return null;
}
switch (RequestAction.getAction(command.getAction())) {
case API_SITE_CONFIG:
case API_SITE_REGISTER:
case API_SITE_LOGIN:
break;
default: {
Map<Integer, String> header = command.getHeader();
String sessionId = header.get(CoreProto.HeaderKey.CLIENT_SOCKET_SITE_SESSION_ID_VALUE);
// logger.debug("{} client={} api request sessionId={}", AkxProject.PLN,
// command.getClientIp(), sessionId);
if (!StringUtils.isNotEmpty(sessionId)) {
this.tellClientSessionError(channelSession.getChannel());
logger.error("{} client={} api request with sessionId is NULL", AkxProject.PLN,
command.getClientIp());
return customResponse(ErrorCode2.ERROR_SESSION);
}
IUserSessionDao sessionDao = new UserSessionDaoService();
SimpleAuthBean authBean = sessionDao.getUserSession(sessionId);
// logger.debug("{} client={} api session auth result {}", authBean.toString());
if (authBean == null || StringUtils.isAnyEmpty(authBean.getSiteUserId(), authBean.getDeviceId())) {
this.tellClientSessionError(channelSession.getChannel());
logger.error("{} client={} api session auth fail.authBean={}", AkxProject.PLN,
command.getClientIp(), authBean);
return customResponse(ErrorCode2.ERROR_SESSION);
}
command.setSiteUserId(authBean.getSiteUserId());
command.setDeviceId(authBean.getDeviceId());
}
}
// 执行业务操作
return this.doApiRequest(channelSession.getChannel(), command);
} catch (Exception e) {
logger.error(StringHelper.format("{} client={} api request error.", AkxProject.PLN, command.getClientIp()),
e);
}
return customResponse(ErrorCode2.ERROR);
}
public Boolean handle(Command command) {
try {
ImCtsMessageProto.ImCtsMessageRequest request = ImCtsMessageProto.ImCtsMessageRequest
.parseFrom(command.getParams());
int type = request.getType().getNumber();
command.setMsgType(type);
String siteUserId = command.getSiteUserId();
String siteGroupId = null;
String gmsgId = null;
switch (type) {
case CoreProto.MsgType.GROUP_TEXT_VALUE:
if (command.isProxy()) {
siteUserId = request.getGroupText().getSiteUserId();
}
gmsgId = request.getGroupText().getMsgId();
siteGroupId = request.getGroupText().getSiteGroupId();
case CoreProto.MsgType.GROUP_SECRET_TEXT_VALUE:
break;
case CoreProto.MsgType.GROUP_IMAGE_VALUE:
if (command.isProxy()) {
siteUserId = request.getGroupImage().getSiteUserId();
}
gmsgId = request.getGroupImage().getMsgId();
siteGroupId = request.getGroupImage().getSiteGroupId();
break;
case CoreProto.MsgType.GROUP_SECRET_IMAGE_VALUE:
break;
case CoreProto.MsgType.GROUP_VOICE_VALUE:
if (command.isProxy()) {
siteUserId = request.getGroupVoice().getSiteUserId();
}
gmsgId = request.getGroupVoice().getMsgId();
siteGroupId = request.getGroupVoice().getSiteGroupId();
break;
case CoreProto.MsgType.GROUP_SECRET_VOICE_VALUE:
break;
case CoreProto.MsgType.GROUP_NOTICE_VALUE:
if (command.isProxy()) {
siteUserId = request.getGroupMsgNotice().getSiteUserId();
}
siteGroupId = request.getGroupMsgNotice().getSiteGroupId();
command.setSiteGroupId(siteGroupId);
// 系统下发的消息,直接return true;
return true;
case CoreProto.MsgType.GROUP_WEB_VALUE:
if (command.isProxy()) {
siteUserId = request.getGroupWeb().getSiteUserId();
}
siteGroupId = request.getGroupWeb().getSiteGroupId();
command.setProxySiteUserId(siteUserId);
command.setSiteGroupId(siteGroupId);
// 系统下发的消息,直接return true;
return true;
case CoreProto.MsgType.GROUP_WEB_NOTICE_VALUE:
if (command.isProxy()) {
siteUserId = request.getGroupWebNotice().getSiteUserId();
}
siteGroupId = request.getGroupWebNotice().getSiteGroupId();
command.setProxySiteUserId(siteUserId);
command.setSiteGroupId(siteGroupId);
// 系统下发的消息,直接return true;
return true;
default:
break;
}
command.setProxySiteUserId(siteUserId);
// 群消息设置siteGroupId
command.setSiteGroupId(siteGroupId);
// check parameters
if (StringUtils.isAnyEmpty(siteUserId, siteGroupId)) {
return false;
}
// check is member of group
if (check(siteUserId, siteGroupId)) {
return true;
} else {
logger.warn("client={} siteUserId={} is not group={} member", command.getClientIp(), siteUserId,
siteGroupId);
int statusValue = -2;
msgStatusResponse(command, gmsgId, System.currentTimeMillis(), statusValue);
}
} catch (Exception e) {
LogUtils.requestErrorLog(logger, command, GroupDetectionHandler.class, e);
}
return false;
}
/**
* 用户更新群资料<br>
* 群主/管理员权限限制
*
* @param command
* @return
*/
public CommandResponse updateProfile(Command command) {
CommandResponse commandResponse = new CommandResponse().setAction(CommandConst.ACTION_RES);
IErrorCode errCode = ErrorCode2.ERROR;
try {
ApiGroupUpdateProfileProto.ApiGroupUpdateProfileRequest request = ApiGroupUpdateProfileProto.ApiGroupUpdateProfileRequest
.parseFrom(command.getParams());
String siteUserId = command.getSiteUserId();
String groupId = request.getProfile().getId();
String photoId = request.getProfile().getIcon();
String groupName = request.getProfile().getName();
String groupNotice = request.getProfile().getGroupNotice();
// 新的群群主
String newGroupOwner = request.getNewGroupOwner();
// 是否可以邀请群聊(除了群主以外的其他群成员)
boolean closeInviteGroupChat = request.getCloseInviteGroupChat();
LogUtils.requestDebugLog(logger, command, request.toString());
if (StringUtils.isAnyEmpty(siteUserId, groupId)) {
throw new ZalyException(ErrorCode2.ERROR_PARAMETER);
}
if (!checkGroupStatus(groupId)) {
throw new ZalyException(ErrorCode2.ERROR_GROUP_DELETED);
}
// 判断是否具有权限,群主拥有权限
String groupMasterId = UserGroupDao.getInstance().getGroupMaster(groupId);
if (siteUserId.equals(groupMasterId)) {
GroupProfileBean gprofileBean = new GroupProfileBean();
gprofileBean.setGroupId(groupId);
gprofileBean.setGroupName(groupName);
gprofileBean.setGroupPhoto(photoId);
gprofileBean.setGroupNotice(groupNotice);
gprofileBean.setCreateUserId(newGroupOwner);
gprofileBean.setCloseInviteGroupChat(closeInviteGroupChat);
if (StringUtils.isNotEmpty(groupName)) {
if (UserGroupDao.getInstance().updateGroupProfile(gprofileBean)) {
errCode = ErrorCode2.SUCCESS;
}
} else {
if (UserGroupDao.getInstance().updateGroupIGC(gprofileBean)) {
errCode = ErrorCode2.SUCCESS;
}
}
} else {
errCode = ErrorCode2.ERROR_NOPERMISSION;
}
} catch (Exception e) {
if (e instanceof ZalyException) {
errCode = ((ZalyException) e).getErrCode();
} else {
errCode = ErrorCode2.ERROR_SYSTEMERROR;
}
LogUtils.requestErrorLog(logger, command, e);
}
return commandResponse.setErrCode(errCode);
}
/**
* 用户创建群,并添加初始群成员 <br>
* 无权限限制
*
* @param command
* @return
*/
public CommandResponse create(Command command) {
CommandResponse commandResponse = new CommandResponse().setAction(CommandConst.ACTION_RES);
IErrorCode errCode = ErrorCode2.ERROR;
try {
ApiGroupCreateProto.ApiGroupCreateRequest request = ApiGroupCreateProto.ApiGroupCreateRequest
.parseFrom(command.getParams());
String siteUserId = command.getSiteUserId();// group owner
String groupName = request.getGroupName();
ProtocolStringList groupMembers = request.getSiteUserIdsList();
List<String> groupMemberIds = Lists.newArrayList(groupMembers);// copy a new list
LogUtils.requestDebugLog(logger, command, request.toString());
if (StringUtils.isAnyEmpty(siteUserId, groupName) || groupMemberIds == null) {
throw new ZalyException(ErrorCode2.ERROR_PARAMETER);
}
if (!SiteConfig.allowCreateGroups(siteUserId)) {
throw new ZalyException(ErrorCode2.ERROR2_GROUP_NOTALLOW);
}
// 检查用户是否被封禁,或者不存在
for (String groupMemberId : groupMemberIds) {
SimpleUserBean bean = UserProfileDao.getInstance().getSimpleProfileById(groupMemberId);
if (bean == null || bean.getUserStatus() == 1) {
groupMemberIds.remove(groupMemberId);
}
}
if (!groupMemberIds.contains(siteUserId)) {
groupMemberIds.add(siteUserId);
}
if (groupMemberIds.size() < 3) {
throw new ZalyException(ErrorCode2.ERROR_GROUP_MEMBERLESS3);
}
GroupProfileBean groupBean = UserGroupDao.getInstance().createGroup(siteUserId, groupName, groupMemberIds);
if (groupBean != null && StringUtils.isNotEmpty(groupBean.getGroupId())) {
GroupProto.GroupProfile.Builder groupProfileBuilder = GroupProto.GroupProfile.newBuilder();
groupProfileBuilder.setId(groupBean.getGroupId());
if (StringUtils.isNotEmpty(groupBean.getGroupName())) {
groupProfileBuilder.setName(groupBean.getGroupName());
}
if (StringUtils.isNotEmpty(groupBean.getGroupPhoto())) {
groupProfileBuilder.setIcon(String.valueOf(groupBean.getGroupPhoto()));
}
ApiGroupCreateProto.ApiGroupCreateResponse response = ApiGroupCreateProto.ApiGroupCreateResponse
.newBuilder().setProfile(groupProfileBuilder.build()).build();
commandResponse.setParams(response.toByteArray());
errCode = ErrorCode2.SUCCESS;
} else {
errCode = ErrorCode2.ERROR_GROUP_WHEN_CREATE;
}
} catch (Exception e) {
if (e instanceof ZalyException) {
errCode = ((ZalyException) e).getErrCode();
} else {
errCode = ErrorCode2.ERROR_SYSTEMERROR;
}
LogUtils.requestErrorLog(logger, command, e);
}
return commandResponse.setErrCode(errCode);
}
/**
* 获取群资料信息,一般由以下几部分组成 <br>
* 1.群资料GroupProfile <br>
* 2.群主基本资料GroupMaster,群主通过GroupProfile获取 <br>
* 3.群成员人数以及排在最前列的四位用户 <br>
* 4.无权限限制
*
* @param command
* @return
*/
public CommandResponse profile(Command command) {
CommandResponse commandResponse = new CommandResponse().setAction(CommandConst.ACTION_RES);
IErrorCode errCode = ErrorCode2.ERROR;
try {
ApiGroupProfileProto.ApiGroupProfileRequest request = ApiGroupProfileProto.ApiGroupProfileRequest
.parseFrom(command.getParams());
String siteUserId = command.getSiteUserId();
String groupId = request.getGroupId();
int pageNum = 1;
int pageSize = GroupConfig.GROUP_MIN_MEMBER_COUNT;
LogUtils.requestDebugLog(logger, command, request.toString());
if (StringUtils.isAnyEmpty(siteUserId, groupId)) {
throw new ZalyException(ErrorCode2.ERROR_PARAMETER);
}
if (!checkGroupStatus(groupId)) {
throw new ZalyException(ErrorCode2.ERROR_GROUP_DELETED);
}
GroupProfileBean groupBean = UserGroupDao.getInstance().getGroupProfile(groupId);
if (groupBean == null || StringUtils.isEmpty(groupBean.getGroupId())) {
throw new ZalyException(ErrorCode2.ERROR_GROUP_QUERY_PROFILE);
}
SimpleUserBean ownerProfileBean = UserProfileDao.getInstance()
.getSimpleProfileById(groupBean.getCreateUserId());
logger.debug("get groupId={},groupOwner={}", groupId, ownerProfileBean.toString());
int groupMembersCount = UserGroupDao.getInstance().getGroupMemberCount(groupId);
logger.debug("get groupId={},groupMembers={}", groupId, groupMembersCount);
List<GroupMemberBean> groupMemberList = UserGroupDao.getInstance().getGroupMemberList(groupId, pageNum,
pageSize);
UserProto.UserProfile ownerProfile = UserProto.UserProfile.newBuilder()
.setSiteUserId(String.valueOf(ownerProfileBean.getUserId()))
.setUserPhoto(String.valueOf(ownerProfileBean.getUserPhoto()))
.setUserName(String.valueOf(ownerProfileBean.getUserName())).build();
GroupProto.GroupProfile groupProfile = GroupProto.GroupProfile.newBuilder().setId(groupBean.getGroupId())
.setName(String.valueOf(groupBean.getGroupName()))
.setIcon(String.valueOf(groupBean.getGroupPhoto())).build();
ApiGroupProfileProto.ApiGroupProfileResponse.Builder responseBuilder = ApiGroupProfileProto.ApiGroupProfileResponse
.newBuilder();
responseBuilder.setOwner(ownerProfile);
responseBuilder.setProfile(groupProfile);
responseBuilder.setGroupMemberCount(groupMembersCount);
for (GroupMemberBean memberBean : groupMemberList) {
UserProto.UserProfile memberProfile = UserProto.UserProfile.newBuilder()
.setSiteUserId(String.valueOf(memberBean.getUserId()))
.setUserPhoto(String.valueOf(memberBean.getUserPhoto()))
.setUserName(String.valueOf(memberBean.getUserName())).build();
GroupProto.GroupMemberProfile groupMemberProfile = GroupProto.GroupMemberProfile.newBuilder()
.setProfile(memberProfile).build();
responseBuilder.addGroupLastestMember(groupMemberProfile);
}
// 是否可以邀请群聊(除了群主以外)
responseBuilder.setCloseInviteGroupChat(groupBean.isCloseInviteGroupChat());
ApiGroupProfileProto.ApiGroupProfileResponse response = responseBuilder.build();
commandResponse.setParams(response.toByteArray());
errCode = ErrorCode2.SUCCESS;
} catch (Exception e) {
if (e instanceof ZalyException) {
errCode = ((ZalyException) e).getErrCode();
} else {
errCode = ErrorCode2.ERROR_SYSTEMERROR;
}
LogUtils.requestErrorLog(logger, command, e);
}
return commandResponse.setErrCode(errCode);
}