Commit e9e98975 authored by sheteng's avatar sheteng

历史消息记录

parent 4d734ba7
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<targetSelectedWithDropDown>
<Target>
<type value="QUICK_BOOT_TARGET" />
<deviceKey>
<Key>
<type value="VIRTUAL_DEVICE_PATH" />
<value value="C:\Users\she\.android\avd\Nexus_S_API_30.avd" />
</Key>
</deviceKey>
</Target>
</targetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2021-12-16T03:22:22.823605200Z" />
</component>
</project>
\ No newline at end of file
......@@ -96,11 +96,6 @@ public class FirstFragment extends Fragment {
}
@Override
public void pushBlockByContact(Long userId) {
}
});
binding.getChatList.setOnClickListener(new View.OnClickListener() {
......@@ -137,12 +132,7 @@ public class FirstFragment extends Fragment {
binding.searchUser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// CCIMClient.getInstance().searchUser(binding.userName.getText().toString(), new ResultEventCallback<List<User>>() {
// @Override
// public void onSuccess(List<User> users) {
// refreshLogView(users.toString());
// }
// });
// CCIMClient.getInstance().searchUser(binding.userName.getText().toString(), new ResultEventCallback<List<User>>());
}
});
......
......@@ -124,11 +124,6 @@ public class MainActivity2 extends AppCompatActivity {
alertDialog.show();
}
@Override
public void pushBlockByContact(Long userId) {
loginViewModel.getContactList();
}
});
}
......
......@@ -206,7 +206,7 @@ public class ContactExpandableAdapter extends BaseExpandableListAdapter {
childrenHolder.contactId.setText("userid: " + dataList.get(childPosition).getContactUserId());
childrenHolder.contactName.setText("username: " + dataList.get(childPosition).getContactUserName());
childrenHolder.netStatus.setText("netStatus: " + dataList.get(childPosition).getNetStatus().toString());
childrenHolder.status.setText("status: " + dataList.get(childPosition).getStatus());
// childrenHolder.status.setText("status: " + dataList.get(childPosition).getStatus());
convertView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
......
......@@ -72,7 +72,8 @@ public class PrivateMsgAdapter extends BaseAdapter {
if (message.getSenderUserId() != null) {
mHolder.msg_content.setVisibility(View.VISIBLE);
mHolder.msg_content_send.setVisibility(View.GONE);
} else if (message.getReciveUserId() != null) {
}
else if (message.getReciveUserId() != null) {
mHolder.msg_content.setVisibility(View.GONE);
mHolder.msg_content_send.setVisibility(View.VISIBLE);
}
......
......@@ -97,6 +97,17 @@ public class LoginViewModel extends ViewModel {
privateMsgList.postValue(value);
}
public void addPrivateMsg(List<MessageContent> res) {
List<MessageContent> value = privateMsgList.getValue();
if (value == null) {
value = new ArrayList<>();
}
for (MessageContent re : res) {
value.add(re);
}
privateMsgList.postValue(value);
}
public void addChannelMsg(MessageContent res) {
List<MessageContent> value = channelMsgList.getValue();
if (value == null) {
......@@ -105,4 +116,15 @@ public class LoginViewModel extends ViewModel {
value.add(res);
channelMsgList.postValue(value);
}
public void addChannelMsg(List<MessageContent> res) {
List<MessageContent> value = channelMsgList.getValue();
if (value == null) {
value = new ArrayList<>();
}
for (MessageContent re : res) {
value.add(re);
}
channelMsgList.postValue(value);
}
}
\ No newline at end of file
......@@ -86,13 +86,14 @@ public class ConnectFragment extends Fragment {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
CCIMClient.getInstance().stopAndSendAudioMessage(contact.getContactUserId(), contact.getContactUserName(), new ResultEventCallback<MessageContent>(){
CCIMClient.getInstance().stopAndSendAudioMessage(contact.getContactUserId(), contact.getContactUserName(), new ResultEventCallback<MessageContent>() {
@Override
public void onSuccess(MessageContent message) {
binding.sendEdit.setText("");
loginViewModel.addPrivateMsg(message);
ToastUtil.show(getContext(), "send Success");
}
@Override
public void onFailed(int errorCode) {
ToastUtil.show(getContext(), "send onFailed :" + errorCode);
......@@ -117,6 +118,18 @@ public class ConnectFragment extends Fragment {
}
});
CCIMClient.getInstance().getPrivateMessage(contact.getContactUserId(), new ResultEventCallback<List<MessageContent>>() {
@Override
public void onSuccess(List<MessageContent> messageContents) {
loginViewModel.addPrivateMsg(messageContents);
}
@Override
public void onFailed(int errorCode) {
}
});
return binding.getRoot();
}
}
\ No newline at end of file
......@@ -79,6 +79,18 @@ public class ConnectChannelFragment extends Fragment {
}
});
CCIMClient.getInstance().getChannelMessage(channelId, new ResultEventCallback<List<MessageContent>>() {
@Override
public void onSuccess(List<MessageContent> messageContents) {
loginViewModel.addChannelMsg(messageContents);
}
@Override
public void onFailed(int errorCode) {
}
});
binding.sendVoice.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
......
......@@ -69,7 +69,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:hint="ip"
android:text="106.15.237.67"
android:text="10.4.5.134"
android:imeActionLabel="@string/action_sign_in_short"
android:imeOptions="actionDone"
android:selectAllOnFocus="true"
......
......@@ -103,6 +103,7 @@ public class CCIMClient {
resultCallback.onSocketConnection();
isConnected = true;
}
channelManager.reConnection();
}
@Override
......@@ -240,7 +241,6 @@ public class CCIMClient {
*/
public void addContact(Long userId, ResultEventCallback<Void> callback) {
contactManager.addContact(userId, callback);
}
/**
......@@ -367,7 +367,7 @@ public class CCIMClient {
return;
}
if (!checkTimeInterval()) {
if (! checkTimeInterval()) {
callback.onFailed(ErrorCode.SEND_MSG_INTERVAL);
return;
}
......@@ -402,6 +402,20 @@ public class CCIMClient {
messageManager.sendChannelMessage(content, channelId, MessageSpec.MessageType.MESSAGE_TYPE_TEXT, callback);
}
/**
* 获取私聊消息
*/
public void getPrivateMessage(Long userId,ResultEventCallback<List<MessageContent>> callback){
messageManager.getPrivateMessage(userId,callback);
}
/**
* 获取频道消息
*/
public void getChannelMessage(Long channelId,ResultEventCallback<List<MessageContent>> callback){
messageManager.getChannelMessage(channelId,callback);
}
/**
* 推送私人消息成功ack
*/
......
......@@ -19,6 +19,4 @@ public interface OnPushMsgListener {
void pushContactNewReq(User user);
void pushBlockByContact(Long userId);
}
......@@ -3,6 +3,7 @@ package com.ccwangluo.ccim.manage;
import com.ccwangluo.ccim.CCIMClient;
import com.ccwangluo.ccim.listener.ResultEventCallback;
import java.util.HashSet;
import java.util.List;
import java.util.logging.Logger;
......@@ -13,6 +14,7 @@ public class ChannelManager {
private final Logger logger = Logger.getLogger(CCIMClient.class.getName());
private SocketManager socketManager;
private CallBackManager<Chat.ChatResponseMessage> callBackManager;
private HashSet<Long> channelIds = new HashSet<>();
public ChannelManager(SocketManager socketManager, CallBackManager<Chat.ChatResponseMessage> callBackManager) {
this.socketManager = socketManager;
......@@ -41,6 +43,7 @@ public class ChannelManager {
logger.info(String.valueOf(chatResponseMessage));
Channel.CreateChannelResponse createChannelRes = chatResponseMessage.getCreateChannelRes();
callback.onSuccess(createChannelRes.getChannelId());
channelIds.add(createChannelRes.getChannelId());
}
}
......@@ -64,6 +67,7 @@ public class ChannelManager {
@Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
callback.onSuccess(null);
channelIds.add(channelId);
}
@Override
......@@ -138,6 +142,7 @@ public class ChannelManager {
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
logger.info(String.valueOf(chatResponseMessage));
callback.onSuccess(null);
channelIds.remove(channelId);
}
@Override
......@@ -147,4 +152,20 @@ public class ChannelManager {
});
}
public void reConnection() {
for (Long channelId : channelIds) {
joinChannel(channelId, new ResultEventCallback<Void>() {
@Override
public void onSuccess(Void unused) {
}
@Override
public void onFailed(int errorCode) {
}
});
}
channelIds.clear();
}
}
......@@ -11,12 +11,12 @@ import com.ccwangluo.ccim.modle.Dialog;
import com.ccwangluo.ccim.modle.NetStatus;
import com.ccwangluo.ccim.modle.PullContactsRes;
import com.ccwangluo.ccim.modle.SearchRes;
import com.ccwangluo.ccim.modle.Status;
import com.ccwangluo.ccim.modle.User;
import com.google.gson.Gson;
import com.google.protobuf.util.JsonFormat;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
......@@ -32,6 +32,7 @@ public class ContactManager {
private final HashMap<Long, Contact> contacts = new HashMap<>(); //联系人列表
private final HashMap<Long, ContactGroup> contactGroups = new HashMap<>(); //群组列表
private final HashMap<Long, Dialog> dialogs = new HashMap<>(); //对话列表
private final HashSet<Long> blocklist = new HashSet<Long>(); //对话列表
public ContactManager(SocketManager socketManager, CallBackManager<Chat.ChatResponseMessage> callBackManager) {
this.socketManager = socketManager;
......@@ -44,7 +45,7 @@ public class ContactManager {
*/
public void getContactList(ResultEventCallback<PullContactsRes> resultEventCallback, boolean isClearCache) {
if (!isClearCache && (contacts.size() > 0 || contactGroups.size() > 0 || dialogs.size() > 0)) {
PullContactsRes pullContactsRes = new PullContactsRes(contactGroups.values(),contacts.values(),dialogs.values());
PullContactsRes pullContactsRes = new PullContactsRes(contactGroups.values(),contacts.values(),dialogs.values(),blocklist);
resultEventCallback.onSuccess(pullContactsRes);
return;
}
......@@ -63,6 +64,7 @@ public class ContactManager {
contacts.clear();
contactGroups.clear();
dialogs.clear();
blocklist.clear();
if (pullContactsRes1.getContacts() != null) {
for (Contact contact : pullContactsRes1.getContacts()) {
contacts.put(contact.getContactUserId(), contact);
......@@ -80,7 +82,10 @@ public class ContactManager {
}
}
resultEventCallback.onSuccess(new PullContactsRes(contactGroups.values(),contacts.values(),dialogs.values()));
if (pullContactsRes1.getBlocklist() != null) {
blocklist.addAll(pullContactsRes1.getBlocklist());
}
resultEventCallback.onSuccess(new PullContactsRes(contactGroups.values(),contacts.values(),dialogs.values(),blocklist));
} catch (Exception e) {
e.printStackTrace();
}
......@@ -350,10 +355,7 @@ public class ContactManager {
callBackManager.addCallBack(id, new ResultEventCallback<Chat.ChatResponseMessage>() {
@Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
Contact contact = contacts.get(userId);
if (contact != null) {
contact.setStatus(Status.CONTACT_STATUS_BLACK_LIST);
}
blocklist.add(userId);
callback.onSuccess(null);
}
......
......@@ -8,9 +8,12 @@ import com.ccwangluo.ccim.CCIMClient;
import com.ccwangluo.ccim.database.AppDatabase;
import com.ccwangluo.ccim.listener.ResultEventCallback;
import com.ccwangluo.ccim.modle.MessageContent;
import com.ccwangluo.ccim.modle.PullMessageRes;
import com.ccwangluo.ccim.util.ErrorCode;
import com.ccwangluo.ccim.util.FileUtils;
import com.ccwangluo.ccim.util.MediaHelper;
import com.google.gson.Gson;
import com.google.protobuf.util.JsonFormat;
import java.io.File;
import java.util.List;
......@@ -220,7 +223,94 @@ public class MessageManager {
}
/**
* 获取私聊消息记录
*
* @param contactId
* @param callback
*/
public void getPrivateMessage(Long contactId, ResultEventCallback<List<MessageContent>> callback) {
Chat.ChatRequestMessage.Builder builder = Chat.ChatRequestMessage.newBuilder();
Message.PullPrivateMessageRequest build = Message.PullPrivateMessageRequest.newBuilder().setUserId(contactId).build();
builder.setPullPrivateMsgReq(build);
int id = socketManager.sendRequest(builder);
callBackManager.addCallBack(id, new ResultEventCallback<Chat.ChatResponseMessage>() {
@Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasPullPrivateMsgRes()) {
Gson gson = new Gson();
Message.PullPrivateMessageResponse pullPrivateMsgRes = chatResponseMessage.getPullPrivateMsgRes();
try {
String print = JsonFormat.printer().print(pullPrivateMsgRes);
PullMessageRes pullPrivateMsgRes1 = gson.fromJson(print, PullMessageRes.class);
List<MessageContent> message = pullPrivateMsgRes1.getMessage();
for (MessageContent messageContent : message) {
if (messageContent.getSenderUserId().equals(userId)) {
messageContent.setReciveUserId(contactId);
} else {
messageContent.setReciveUserId(userId);
}
}
callback.onSuccess(message);
pushNewMessageList(message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void onFailed(int errorCode) {
callback.onFailed(errorCode);
}
});
}
/**
* @param channelId
* @param callback
*/
public void getChannelMessage(Long channelId, ResultEventCallback<List<MessageContent>> callback) {
Chat.ChatRequestMessage.Builder builder = Chat.ChatRequestMessage.newBuilder();
Message.PullChannelMessageRequest build = Message.PullChannelMessageRequest.newBuilder().setChannelId(channelId).build();
builder.setPullChannelMsgReq(build);
int id = socketManager.sendRequest(builder);
callBackManager.addCallBack(id, new ResultEventCallback<Chat.ChatResponseMessage>() {
@Override
public void onSuccess(Chat.ChatResponseMessage chatResponseMessage) {
if (chatResponseMessage.hasPullChannelMsgRes()) {
Gson gson = new Gson();
Message.PullChannelMessageResponse pullChannelMsgRes = chatResponseMessage.getPullChannelMsgRes();
try {
String print = JsonFormat.printer().print(pullChannelMsgRes);
PullMessageRes pullPrivateMsgRes1 = gson.fromJson(print, PullMessageRes.class);
List<MessageContent> message = pullPrivateMsgRes1.getMessage();
for (MessageContent messageContent : message) {
messageContent.setChannelId(channelId);
}
callback.onSuccess(message);
pushNewMessageList(message);
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void onFailed(int errorCode) {
callback.onFailed(errorCode);
}
});
}
public void pushNewMessage(MessageContent messageContent) {
executor.execute(() -> db.messageDao().insert(messageContent));
}
private void pushNewMessageList(List<MessageContent> messageContents) {
executor.execute(() -> db.messageDao().insertList(messageContents));
}
}
......@@ -9,7 +9,7 @@ public class Contact implements Serializable {
private NetStatus netStatus = NetStatus.NET_STATUS_ONLINE;
private String extData;
private Long contactGroupId = 0L;
private Status status = Status.CONTACT_STATUS_NORMAL;
public Long getContactUserId() {
return contactUserId;
......@@ -59,12 +59,5 @@ public class Contact implements Serializable {
this.contactGroupId = contactGroupId;
}
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
}
......@@ -3,8 +3,7 @@ package com.ccwangluo.ccim.modle;
import androidx.room.Entity;
import androidx.room.Index;
@Entity(primaryKeys = {"msgId"},indices = {@Index("msgId"),
@Index(value = {"senderUserId","reciveUserId"})})
@Entity(primaryKeys = {"msgId"},indices = {@Index(value = {"msgId"},unique = true)})
public class MessageContent {
private Long msgId;
......
......@@ -7,11 +7,21 @@ public class PullContactsRes {
private Collection<ContactGroup> contactGroups;
private Collection<Contact> contacts;
private Collection<Dialog> dialogs;
private Collection<Long> blocklist;
public PullContactsRes(Collection<ContactGroup> contactGroups, Collection<Contact> contacts, Collection<Dialog> dialogs) {
public Collection<Long> getBlocklist() {
return blocklist;
}
public void setBlocklist(Collection<Long> blocklist) {
this.blocklist = blocklist;
}
public PullContactsRes(Collection<ContactGroup> contactGroups, Collection<Contact> contacts, Collection<Dialog> dialogs, Collection<Long> blocklist) {
this.contactGroups = contactGroups;
this.contacts = contacts;
this.dialogs = dialogs;
this.blocklist = blocklist;
}
public Collection<ContactGroup> getContactGroups() {
......
package com.ccwangluo.ccim.modle;
import java.util.List;
public class PullMessageRes {
private List<MessageContent> message;
public List<MessageContent> getMessage() {
return message;
}
public void setMessage(List<MessageContent> message) {
this.message = message;
}
}
......@@ -41,6 +41,9 @@ message ChatRequestMessage {
PushPrivateMessageAckRequest push_private_msg_ack_req = 61; // 推送私人消息成功ack
PushChannelMessageAckRequest push_channel_msg_ack_req = 62; // 推送频道消息ack
PullPrivateMessageRequest pull_private_msg_req = 81; // 拉取私聊消息
PullChannelMessageRequest pull_channel_msg_req = 82; // 拉取频道消息
HeartbeatRequest heartbeat_req = 100; // 作用于登录返回的心跳间隔heartbeat_interval
ConnectionStateAckRequest connection_state_ack_req = 101; // 服务端主动返回一个ConnectionStateResponse时客户端必须返回ConnectionStateAckRequest
}
......@@ -84,6 +87,9 @@ message ChatResponseMessage {
PushContactNewReqResponse push_contact_new_req_res = 74; // 推送新的好友申请
PushUserDeletedResponse push_user_deleted_res = 76; // 推送与自己有关系(对话过的陌生人或好友)的用户已删除
PullPrivateMessageResponse pull_private_msg_res = 81; // 拉取私聊消息
PullChannelMessageResponse pull_channel_msg_res = 82; // 拉取频道消息
HeartbeatResponse heartbeat_res = 100;
ConnectionStateResponse connection_state_res = 101;
}
......
......@@ -47,3 +47,19 @@ message PullOfflineMessageResponse {
}
repeated OfflineMessage offline_msgs = 1;
}
message PullPrivateMessageRequest {
int64 user_id = 1;
}
message PullPrivateMessageResponse {
repeated ChatMessage message = 1;
}
message PullChannelMessageRequest {
int64 channel_id = 1;
}
message PullChannelMessageResponse {
repeated ChatMessage message = 1;
}
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment