Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
beb591fdc5 | ||
|
|
d090244be9 | ||
|
|
22708caaaa | ||
|
|
2b24fb9f44 | ||
|
|
b8ccab5dde | ||
|
|
9d29357ffa | ||
|
|
dabb92571a | ||
|
|
acb4cf81de | ||
|
|
ace676d215 | ||
|
|
1170c4209b | ||
|
|
57e8814d9c | ||
|
|
e3d9e0d183 | ||
|
|
d6f5614f49 | ||
|
|
9ed4ab7e08 | ||
|
|
4da3d3421d | ||
|
|
40ef9abd35 |
+1
-1
@@ -5,7 +5,7 @@
|
||||
<relativePath>../</relativePath>
|
||||
<artifactId>wildfirechat-parent</artifactId>
|
||||
<groupId>cn.wildfirechat</groupId>
|
||||
<version>0.81</version>
|
||||
<version>0.85</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>moquette-broker</artifactId>
|
||||
|
||||
@@ -131,7 +131,8 @@ public class UploadFileAction extends Action {
|
||||
}
|
||||
|
||||
readHttpDataChunkByChunk(response, decoder, requestId, HttpHeaders.isKeepAlive(request));
|
||||
|
||||
decoder.destroy();
|
||||
|
||||
if (chunk instanceof LastHttpContent) {
|
||||
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ public class HandleFriendRequestHandler extends IMHandler<WFCMessage.HandleFrien
|
||||
public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.HandleFriendRequest request, Qos1PublishHandler.IMCallback callback) {
|
||||
WFCMessage.Message.Builder builder = WFCMessage.Message.newBuilder();
|
||||
builder.setFromUser(request.getTargetUid());
|
||||
long[] heads = new long[2];
|
||||
long[] heads = new long[4];
|
||||
boolean isAdmin = requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin;
|
||||
ErrorCode errorCode = m_messagesStore.handleFriendRequest(fromUser, request, builder, heads, isAdmin);
|
||||
|
||||
@@ -84,6 +84,14 @@ public class HandleFriendRequestHandler extends IMHandler<WFCMessage.HandleFrien
|
||||
publisher.publishNotification(IMTopic.NotifyFriendTopic, request.getTargetUid(), heads[0]);
|
||||
publisher.publishNotification(IMTopic.NotifyFriendTopic, fromUser, heads[1]);
|
||||
}
|
||||
if(!isAdmin) {
|
||||
if(heads[2] > 0) {
|
||||
publisher.publishNotification(IMTopic.NotifyFriendRequestTopic, request.getTargetUid(), heads[2], fromUser, null);
|
||||
}
|
||||
if(heads[3] > 0) {
|
||||
publisher.publishNotification(IMTopic.NotifyFriendRequestTopic, fromUser, heads[3], fromUser, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(errorCode == ERROR_CODE_ALREADY_FRIENDS) {
|
||||
errorCode = ERROR_CODE_SUCCESS;
|
||||
|
||||
@@ -553,7 +553,7 @@ public class DatabaseStore {
|
||||
statement.setInt(index++, message.getContent().getType());
|
||||
String to = message.getToUser();
|
||||
if (StringUtil.isNullOrEmpty(message.getToUser())) {
|
||||
if (message.getToList()!= null && message.getToList().size() == 1) {
|
||||
if (message.getToList().size() > 0) {
|
||||
to = message.getToList().get(0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2077,6 +2077,10 @@ public class MemoryMessagesStore implements IMessagesStore {
|
||||
if (!canRecall) {
|
||||
return ErrorCode.ERROR_CODE_NOT_RIGHT;
|
||||
}
|
||||
|
||||
if(message.getContent().getType() == 80) {
|
||||
return ErrorCode.ERROR_CODE_SUCCESS;
|
||||
}
|
||||
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("s", message.getFromUser());
|
||||
@@ -2488,7 +2492,21 @@ public class MemoryMessagesStore implements IMessagesStore {
|
||||
IMap<String, WFCMessage.User> mUserMap = hzInstance.getMap(USERS);
|
||||
WFCMessage.User us = mUserMap.get(userId);
|
||||
if (us != null) {
|
||||
us = WFCMessage.User.newBuilder().setUid(userId).setUpdateDt(System.currentTimeMillis()).setDisplayName("").setName(userId).setDeleted(1).build();
|
||||
us = WFCMessage.User.newBuilder()
|
||||
.setUid(userId)
|
||||
.setUpdateDt(System.currentTimeMillis())
|
||||
.setName(userId)
|
||||
.setDeleted(1)
|
||||
.clearDisplayName()
|
||||
.clearAddress()
|
||||
.clearCompany()
|
||||
.clearEmail()
|
||||
.clearExtra()
|
||||
.clearMobile()
|
||||
.clearPortrait()
|
||||
.clearSocial()
|
||||
.build();
|
||||
|
||||
try {
|
||||
databaseStore.updateUser(us);
|
||||
} catch (Exception e) {
|
||||
@@ -3019,6 +3037,8 @@ public class MemoryMessagesStore implements IMessagesStore {
|
||||
return ErrorCode.ERROR_CODE_FRIEND_REQUEST_EXPIRED;
|
||||
} else {
|
||||
existRequest = existRequest.toBuilder().setStatus(request.getStatus()).setUpdateDt(System.currentTimeMillis()).build();
|
||||
heads[2] = existRequest.getUpdateDt();
|
||||
heads[3] = existRequest.getUpdateDt();
|
||||
databaseStore.persistOrUpdateFriendRequest(existRequest);
|
||||
|
||||
if (request.getStatus() == ProtoConstants.FriendRequestStatus.RequestStatus_Accepted) {
|
||||
|
||||
@@ -165,14 +165,17 @@ public class Qos1PublishHandler extends QosPublishHandler {
|
||||
if (session != null && session.getUsername().equals(fromUser)) {
|
||||
if (data.length > 7*1024 && session.getMqttVersion().protocolLevel() >= MqttVersion.Wildfire_1.protocolLevel()) {
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
GZIPOutputStream gzip;
|
||||
GZIPOutputStream gzip = null;
|
||||
try {
|
||||
gzip = new GZIPOutputStream(out);
|
||||
gzip.write(data);
|
||||
gzip.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
Utility.printExecption(LOG, e);
|
||||
} finally {
|
||||
if(gzip != null) {
|
||||
gzip.close();
|
||||
}
|
||||
}
|
||||
data = out.toByteArray();
|
||||
code = (byte)ErrorCode.ERROR_CODE_SUCCESS_GZIPED.code;
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>wildfirechat-parent</artifactId>
|
||||
<groupId>cn.wildfirechat</groupId>
|
||||
<version>0.81</version>
|
||||
<version>0.85</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
||||
@@ -32,6 +32,8 @@ public interface APIPath {
|
||||
String User_Put_Setting = "/admin/user/put_setting";
|
||||
String User_Get_Setting = "/admin/user/get_setting";
|
||||
String User_Kickoff_Client = "/admin/user/kickoff_client";
|
||||
String User_Online_Count = "/admin/user/online_count";
|
||||
String User_Online_List = "/admin/user/online_list";
|
||||
|
||||
String Friend_Update_Status = "/admin/friend/status";
|
||||
String Friend_Get_List = "/admin/friend/list";
|
||||
@@ -47,6 +49,7 @@ public interface APIPath {
|
||||
String Msg_Send = "/admin/message/send";
|
||||
String Msg_Recall = "/admin/message/recall";
|
||||
String Msg_Delete = "/admin/message/delete";
|
||||
String Msg_Update = "/admin/message/update";
|
||||
String Msg_Broadcast = "/admin/message/broadcast";
|
||||
String Msg_Multicast = "/admin/message/multicast";
|
||||
String Msg_RecallBroadCast = "/admin/message/recall_broadcast";
|
||||
|
||||
@@ -48,6 +48,7 @@ public enum ErrorCode {
|
||||
ERROR_CODE_ROBOT_NO_TOKEN(27, "robot no token"),
|
||||
ERROR_CODE_WS_NOT_CONFIGURED_CORRECTLY(28, "ws not configured correctly"),
|
||||
ERROR_CODE_CONFERENCE_ROOM_NOT_EXIST(60, "conference room not exist"),
|
||||
ERROR_CODE_CONFERENCE_SERVICE_NOT_AVAILABLE(61, "conference service not available"),
|
||||
|
||||
ERROR_CODE_CHANNEL_NO_EXIST(236, "channel no exist"),
|
||||
ERROR_CODE_CHANNEL_NO_SECRET(237, "channel no secret"),
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package cn.wildfirechat.pojos;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class GetOnlineUserCountResult extends ArrayList<GetOnlineUserCountResult.Node> {
|
||||
public static class Node {
|
||||
public int node;
|
||||
public int count;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package cn.wildfirechat.pojos;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class GetOnlineUserRequest {
|
||||
public int nodeId;
|
||||
public int offset;
|
||||
public int count;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package cn.wildfirechat.pojos;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class GetOnlineUserResult {
|
||||
public static class UserClient {
|
||||
public String userId;
|
||||
public String clientId;
|
||||
public int platform;
|
||||
}
|
||||
|
||||
ArrayList<GetOnlineUserResult.UserClient> userClients;
|
||||
public int totalCount;
|
||||
public int offset;
|
||||
}
|
||||
@@ -19,12 +19,11 @@ public class OutputGetChannelInfo {
|
||||
private String extra;
|
||||
private String owner;
|
||||
private int state;
|
||||
//此字段已经废弃,为了兼容旧的SDK版本,以后会移除
|
||||
@Deprecated()
|
||||
private int status;
|
||||
private long updateDt;
|
||||
private String callback;
|
||||
private int automatic;
|
||||
private String secret;
|
||||
|
||||
|
||||
public String getChannelId() {
|
||||
@@ -115,6 +114,14 @@ public class OutputGetChannelInfo {
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public String getSecret() {
|
||||
return secret;
|
||||
}
|
||||
|
||||
public void setSecret(String secret) {
|
||||
this.secret = secret;
|
||||
}
|
||||
|
||||
public static OutputGetChannelInfo fromPbInfo(WFCMessage.ChannelInfo channelInfo) {
|
||||
OutputGetChannelInfo out = new OutputGetChannelInfo();
|
||||
out.automatic = channelInfo.getAutomatic();
|
||||
@@ -126,8 +133,9 @@ public class OutputGetChannelInfo {
|
||||
out.owner = channelInfo.getOwner();
|
||||
out.portrait = channelInfo.getPortrait();
|
||||
out.state = channelInfo.getStatus();
|
||||
out.status = out.state;
|
||||
out.status = channelInfo.getStatus();;
|
||||
out.updateDt = channelInfo.getUpdateDt();
|
||||
out.secret = channelInfo.getSecret();
|
||||
return out;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,4 +8,5 @@ public class PojoConferenceCreate {
|
||||
public int bitrate;
|
||||
public boolean advance;
|
||||
public boolean recording;
|
||||
public boolean permanent;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* 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 UpdateMessageContentData {
|
||||
private String operator;
|
||||
private long messageUid;
|
||||
private MessagePayload payload;
|
||||
private int distribute;
|
||||
private int updateTimestamp;
|
||||
|
||||
public String getOperator() {
|
||||
return operator;
|
||||
}
|
||||
|
||||
public void setOperator(String operator) {
|
||||
this.operator = operator;
|
||||
}
|
||||
|
||||
public long getMessageUid() {
|
||||
return messageUid;
|
||||
}
|
||||
|
||||
public void setMessageUid(long messageUid) {
|
||||
this.messageUid = messageUid;
|
||||
}
|
||||
|
||||
public MessagePayload getPayload() {
|
||||
return payload;
|
||||
}
|
||||
|
||||
public void setPayload(MessagePayload payload) {
|
||||
this.payload = payload;
|
||||
}
|
||||
|
||||
public int getDistribute() {
|
||||
return distribute;
|
||||
}
|
||||
|
||||
public void setDistribute(int distribute) {
|
||||
this.distribute = distribute;
|
||||
}
|
||||
|
||||
public int getUpdateTimestamp() {
|
||||
return updateTimestamp;
|
||||
}
|
||||
|
||||
public void setUpdateTimestamp(int updateTimestamp) {
|
||||
this.updateTimestamp = updateTimestamp;
|
||||
}
|
||||
}
|
||||
@@ -129,7 +129,7 @@ public class ProtoConstants {
|
||||
//第3位表示是否允许给非订阅用户发送消息
|
||||
//第4位表示是否私有,不可以被用户搜索和主动订阅
|
||||
//第6位表示是否删除
|
||||
//第8位表示是否是全局频道,全局频道没有订阅关系,会发送给系统内所有成员。
|
||||
//第8位表示是否是全局频道,全局频道没有订阅关系,会发送给系统内所有成员。可以给非订阅用户单独发消息。
|
||||
public interface ChannelState {
|
||||
int Channel_State_Mask_FullInfo = 0x01;
|
||||
int Channel_State_Mask_Unsubscribed_User_Access = 0x02;
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<!--<relativePath>../pom.xml</relativePath>-->
|
||||
<artifactId>wildfirechat-parent</artifactId>
|
||||
<groupId>cn.wildfirechat</groupId>
|
||||
<version>0.81</version>
|
||||
<version>0.85</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>distribution</artifactId>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<artifactId>wildfirechat-parent</artifactId>
|
||||
|
||||
<packaging>pom</packaging>
|
||||
<version>0.81</version>
|
||||
<version>0.85</version>
|
||||
<name>Wildfire Chat</name>
|
||||
<description>Wildfire Chat Server</description>
|
||||
<inceptionYear>2019</inceptionYear>
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>wildfirechat-parent</artifactId>
|
||||
<groupId>cn.wildfirechat</groupId>
|
||||
<version>0.81</version>
|
||||
<version>0.85</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ public class ConferenceAdmin {
|
||||
return AdminHttpUtils.httpJsonPost(path, data, PojoConferenceParticipantList.class);
|
||||
}
|
||||
|
||||
public static IMResult<Void> createRoom(String roomId, String description, String pin, int maxPublisher, boolean advance, int bitrate, boolean recording) throws Exception {
|
||||
public static IMResult<Void> createRoom(String roomId, String description, String pin, int maxPublisher, boolean advance, int bitrate, boolean recording, boolean permanent) throws Exception {
|
||||
String path = APIPath.Conference_Create;
|
||||
PojoConferenceCreate create = new PojoConferenceCreate();
|
||||
create.roomId = roomId;
|
||||
@@ -27,6 +27,7 @@ public class ConferenceAdmin {
|
||||
create.advance = advance;
|
||||
create.bitrate = bitrate;
|
||||
create.recording = recording;
|
||||
create.permanent = permanent;
|
||||
return AdminHttpUtils.httpJsonPost(path, create, Void.class);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ import static cn.wildfirechat.proto.ProtoConstants.SystemSettingType.Group_Max_M
|
||||
|
||||
public class Main {
|
||||
private static boolean commercialServer = false;
|
||||
private static boolean advanceVoip = false;
|
||||
//管理端口是8080
|
||||
private static String AdminUrl = "http://localhost:18080";
|
||||
private static String AdminSecret = "123456";
|
||||
@@ -51,6 +52,8 @@ public class Main {
|
||||
testSensitiveApi();
|
||||
if (commercialServer) {
|
||||
testDevice();
|
||||
}
|
||||
if(advanceVoip) {
|
||||
testConference();
|
||||
}
|
||||
|
||||
@@ -269,6 +272,24 @@ public class Main {
|
||||
System.out.println("destroy user failure");
|
||||
System.exit(-1);
|
||||
}
|
||||
|
||||
if (commercialServer) {
|
||||
IMResult<GetOnlineUserCountResult> getOnlineUserCountResultIMResult = UserAdmin.getOnlineUserCount();
|
||||
if (getOnlineUserCountResultIMResult != null && getOnlineUserCountResultIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
||||
System.out.println("get user online count success");
|
||||
} else {
|
||||
System.out.println("get user online count failure");
|
||||
System.exit(-1);
|
||||
}
|
||||
|
||||
IMResult<GetOnlineUserResult> getOnlineUserResultIMResult = UserAdmin.getOnlineUser(1, 0, 100);
|
||||
if (getOnlineUserResultIMResult != null && getOnlineUserResultIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
||||
System.out.println("get user online success");
|
||||
} else {
|
||||
System.out.println("get user online failure");
|
||||
System.exit(-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//***********************************************
|
||||
@@ -664,6 +685,24 @@ public class Main {
|
||||
System.exit(-1);
|
||||
}
|
||||
|
||||
payload.setSearchableContent("hello world2");
|
||||
resultSendMessage = MessageAdmin.sendMessage("user1", conversation, payload, null);
|
||||
if (resultSendMessage != null && resultSendMessage.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
||||
System.out.println("send message success");
|
||||
} else {
|
||||
System.out.println("send message failure");
|
||||
System.exit(-1);
|
||||
}
|
||||
|
||||
payload.setSearchableContent("hello world3");
|
||||
voidIMResult = MessageAdmin.updateMessageContent("user1", resultSendMessage.getResult().getMessageUid(), payload, true);
|
||||
if (voidIMResult != null && voidIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
||||
System.out.println("update message success");
|
||||
} else {
|
||||
System.out.println("update message failure");
|
||||
System.exit(-1);
|
||||
}
|
||||
|
||||
IMResult<BroadMessageResult> resultBroadcastMessage = MessageAdmin.broadcastMessage("user1", 0, payload);
|
||||
if (resultBroadcastMessage != null && resultBroadcastMessage.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS) {
|
||||
System.out.println("broad message success, send message to " + resultBroadcastMessage.getResult().getCount() + " users");
|
||||
@@ -821,6 +860,7 @@ public class Main {
|
||||
System.exit(-1);
|
||||
}
|
||||
|
||||
Thread.sleep(1000);
|
||||
getChatroomInfoIMResult = ChatroomAdmin.getChatroomInfo(chatroomId);
|
||||
if (getChatroomInfoIMResult != null && getChatroomInfoIMResult.getErrorCode() == ErrorCode.ERROR_CODE_SUCCESS && getChatroomInfoIMResult.getResult().getState() == ProtoConstants.ChatroomState.Chatroom_State_End) {
|
||||
System.out.println("chatroom destroyed!");
|
||||
@@ -1486,7 +1526,7 @@ public class Main {
|
||||
System.out.println("conference list " + listResult.getResult().conferenceInfoList);
|
||||
}
|
||||
|
||||
IMResult<Void> createResult = ConferenceAdmin.createRoom("helloroomid", "hello room description", "123456", 9, false, 0, false);
|
||||
IMResult<Void> createResult = ConferenceAdmin.createRoom("helloroomid", "hello room description", "123456", 9, false, 0, false, true);
|
||||
if(createResult == null || createResult.getErrorCode() != ErrorCode.ERROR_CODE_SUCCESS) {
|
||||
System.out.println("create conference failure");
|
||||
System.exit(-1);
|
||||
@@ -1494,7 +1534,7 @@ public class Main {
|
||||
System.out.println("create conference");
|
||||
}
|
||||
|
||||
createResult = ConferenceAdmin.createRoom("helloroomid2", "hello room description advanced", "123456", 20, true, 0, false);
|
||||
createResult = ConferenceAdmin.createRoom("helloroomid2", "hello room description advanced", "123456", 20, true, 0, false, true);
|
||||
if(createResult == null || createResult.getErrorCode() != ErrorCode.ERROR_CODE_SUCCESS) {
|
||||
System.out.println("create conference failure");
|
||||
System.exit(-1);
|
||||
|
||||
@@ -37,6 +37,17 @@ public class MessageAdmin {
|
||||
return AdminHttpUtils.httpJsonPost(path, deleteMessageData, Void.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);
|
||||
return AdminHttpUtils.httpJsonPost(path, updateMessageContentData, Void.class);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -117,4 +117,16 @@ public class UserAdmin {
|
||||
inputUserId.setUserId(userId);
|
||||
return AdminHttpUtils.httpJsonPost(path, inputUserId, OutputDeviceList.class);
|
||||
}
|
||||
|
||||
public static IMResult<GetOnlineUserCountResult> getOnlineUserCount() throws Exception {
|
||||
return AdminHttpUtils.httpJsonPost(APIPath.User_Online_Count, null, GetOnlineUserCountResult.class);
|
||||
}
|
||||
|
||||
public static IMResult<GetOnlineUserResult> getOnlineUser(int nodeId, int offset, int count) throws Exception {
|
||||
GetOnlineUserRequest request = new GetOnlineUserRequest();
|
||||
request.nodeId = nodeId;
|
||||
request.offset = offset;
|
||||
request.count = count;
|
||||
return AdminHttpUtils.httpJsonPost(APIPath.User_Online_List, request, GetOnlineUserResult.class);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user