Kaynağa Gözat

发送文本消息

master
徐勤民 1 yıl önce
ebeveyn
işleme
50dbad6855
22 değiştirilmiş dosya ile 592 ekleme ve 149 silme
  1. +0
    -56
      SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/bean/SZYXMessage.java
  2. +35
    -10
      SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/bean/UserInfo.java
  3. +0
    -27
      SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/bean/message/TextMessage.java
  4. +4
    -2
      SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/cfg/Constant.java
  5. +9
    -6
      SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/enums/PacketType.java
  6. +1
    -1
      SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/IMHelper.java
  7. +14
    -0
      SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/bean/PacketMessage.java
  8. +11
    -0
      SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/kit/IMInterface.java
  9. +187
    -13
      SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/manager/ImManager.java
  10. +30
    -0
      SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/manager/UserManager.java
  11. +30
    -0
      SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/ConnectedMessage.java
  12. +112
    -1
      SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/SZYXMessage.java
  13. +20
    -0
      SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/SendAckMessage.java
  14. +17
    -0
      SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/message/SZYXTextMessage.java
  15. +7
    -1
      SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/kit/MsgListener.java
  16. +4
    -2
      SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/kit/SdkInterface.java
  17. +19
    -4
      SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/manager/SZYXImManager.java
  18. +7
    -14
      SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/repository/bean/LoginBean.java
  19. +24
    -1
      app/src/main/java/cn/org/bjca/trust/android/imdemo/ui/ChatActivity.java
  20. +1
    -0
      app/src/main/java/cn/org/bjca/trust/android/imdemo/ui/FriendsActivity.java
  21. +2
    -2
      app/src/main/java/cn/org/bjca/trust/android/imdemo/ui/login/LoginActivity.java
  22. +58
    -9
      app/src/main/res/layout/activity_chat.xml

+ 0
- 56
SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/bean/SZYXMessage.java Dosyayı Görüntüle

@@ -1,56 +0,0 @@
package cn.org.bjca.trust.android.lib.im.bean;

import cn.org.bjca.trust.android.lib.im.bean.message.TextMessage;
import cn.org.bjca.trust.android.lib.im.enums.MsgType;

public class SZYXMessage {
/**
* 消息id
*/
private String msgId;
/**
*发送者信息
*/
private UserInfo fromClient;
/**
*接收者信息
*/
private UserInfo toClient;
/**
*真实讲话人
*/
private UserInfo speaker;
/**
*自定义信息
*/
private String describe;
/**
*是不是群消息
*/
private boolean isGroup;
/**
*是不是接收消息
*/
private boolean isArrive;
/**
*消息发送状态
*/
private boolean isSuccess;
/**
*时间戳
*/
private long timestamp;
/**
*租户编号
*/
private String tenantNo;
/**
*消息序列号
*/
private long seq;
/**
* 消息类型
*/
private MsgType msgType;
private TextMessage textMessage;
}

+ 35
- 10
SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/bean/UserInfo.java Dosyayı Görüntüle

@@ -2,27 +2,52 @@ package cn.org.bjca.trust.android.lib.im.bean;

public class UserInfo {
private String userId;
private String userName;
private String password;
private String appId;
private String osType;
private String nickName;
private String faceUrl;
private String gender;

public UserInfo(String userId) {
this.userId = userId;
public String getUserId() {
return userId;
}

public UserInfo(String userId, String nickName, String faceUrl, String gender) {
public void setUserId(String userId) {
this.userId = userId;
this.nickName = nickName;
this.faceUrl = faceUrl;
this.gender = gender;
}

public String getUserId() {
return userId;
public String getUserName() {
return userName;
}

public void setUserId(String userId) {
this.userId = userId;
public void setUserName(String userName) {
this.userName = userName;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getAppId() {
return appId;
}

public void setAppId(String appId) {
this.appId = appId;
}

public String getOsType() {
return osType;
}

public void setOsType(String osType) {
this.osType = osType;
}

public String getNickName() {


+ 0
- 27
SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/bean/message/TextMessage.java Dosyayı Görüntüle

@@ -1,27 +0,0 @@
package cn.org.bjca.trust.android.lib.im.bean.message;

import androidx.annotation.NonNull;

public class TextMessage {
private String text;

public TextMessage(String text) {
this.text = text;
}

public String getText() {
return text;
}

public void setText(String text) {
this.text = text;
}

@NonNull
@Override
public String toString() {
return "TextMessage{" +
"text='" + text + '\'' +
'}';
}
}

+ 4
- 2
SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/cfg/Constant.java Dosyayı Görüntüle

@@ -1,5 +1,7 @@
package cn.org.bjca.trust.android.lib.im.cfg;

import android.util.Log;

public class Constant {
public static final String BaseUrl = "https://221n3i2201.goho.co";

@@ -11,11 +13,11 @@ public class Constant {
}

public static String getSdkAppID() {
return sdkAppID;
return Constant.sdkAppID;
}

public static String getUserId() {
return userId;
return Constant.userId;
}

public static void setUserId(String userId) {


+ 9
- 6
SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/enums/PacketType.java Dosyayı Görüntüle

@@ -6,15 +6,18 @@ public enum PacketType {
CONNECTED(11),
//发送消息
SEND(20),
ARRIVE(21),
SEND_ACK(21),
ARRIVE(30),
ARRIVE_ACK(31),
//心跳包
PING(30),
PANG(31),
PING(40),
PANG(41),
//数据请求
REQUEST(40),
RESULT(41),
REQUEST(50),
RESULT(51),
//系统通知
SYSTEM(50),
SYSTEM(60),
SYSTEM_ACK(61),
UNKNOWN(-1);

private int type = -1;


+ 1
- 1
SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/IMHelper.java Dosyayı Görüntüle

@@ -10,7 +10,7 @@ public class IMHelper {
}

public static IMInterface getInstance() {
return IMHelper.IMHelperHolder.instance;
return IMHelperHolder.instance;

}
}

+ 14
- 0
SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/bean/PacketMessage.java Dosyayı Görüntüle

@@ -1,9 +1,15 @@
package cn.org.bjca.trust.android.lib.im.im.bean;

import java.util.UUID;

import cn.org.bjca.trust.android.lib.im.cfg.Constant;
import cn.org.bjca.trust.android.lib.im.enums.PacketType;

public abstract class PacketMessage {
/**
* 消息id
*/
private String msgId = UUID.randomUUID().toString();
private PacketType packetType;
private long timestamp = System.currentTimeMillis();
private String appId = Constant.getSdkAppID();
@@ -13,6 +19,14 @@ public abstract class PacketMessage {
this.packetType = packetType;
}

public String getMsgId() {
return msgId;
}

public void setMsgId(String msgId) {
this.msgId = msgId;
}

public PacketType getPacketType() {
return packetType;
}


+ 11
- 0
SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/kit/IMInterface.java Dosyayı Görüntüle

@@ -1,5 +1,6 @@
package cn.org.bjca.trust.android.lib.im.im.kit;

import cn.org.bjca.trust.android.lib.im.enums.MsgType;
import cn.org.bjca.trust.android.lib.im.im.msg.SZYXMessage;
import cn.org.bjca.trust.android.lib.im.im.opt.ImConnectOptions;
import cn.org.bjca.trust.android.lib.im.kit.IMSDKCallback;
@@ -8,13 +9,23 @@ import cn.org.bjca.trust.android.lib.im.kit.MsgListener;

public interface IMInterface {
void addMsgListener(MsgListener listener);

void removeMsgListener(MsgListener listener);

void setStatusListener(IMSDKListener listener);

void removeStatusListener(IMSDKListener listener);

void login(ImConnectOptions imConnectOptions);

void logout();

boolean isConnect();

boolean isConnecting();

void sendSZYXMessage(SZYXMessage message, IMSDKCallback callback);

SZYXMessage createMsg(MsgType msgType, String toUserId, boolean isGroup, Object message, String describe);

}

+ 187
- 13
SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/manager/ImManager.java Dosyayı Görüntüle

@@ -1,7 +1,13 @@
package cn.org.bjca.trust.android.lib.im.im.manager;

import android.annotation.SuppressLint;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;

import androidx.annotation.NonNull;

import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallbackExtended;
import org.eclipse.paho.client.mqttv3.MqttClient;
@@ -10,13 +16,23 @@ import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import cn.org.bjca.trust.android.lib.im.cfg.Constant;
import cn.org.bjca.trust.android.lib.im.common.DeviceHelper;
import cn.org.bjca.trust.android.lib.im.common.json.GsonImplHelp;
import cn.org.bjca.trust.android.lib.im.enums.MsgType;
import cn.org.bjca.trust.android.lib.im.enums.PacketType;
import cn.org.bjca.trust.android.lib.im.im.bean.PacketMessage;
import cn.org.bjca.trust.android.lib.im.im.kit.IMInterface;
import cn.org.bjca.trust.android.lib.im.im.msg.ConnectMessage;
import cn.org.bjca.trust.android.lib.im.im.msg.ConnectedMessage;
import cn.org.bjca.trust.android.lib.im.im.msg.SZYXMessage;
import cn.org.bjca.trust.android.lib.im.im.msg.SendAckMessage;
import cn.org.bjca.trust.android.lib.im.im.msg.message.SZYXTextMessage;
import cn.org.bjca.trust.android.lib.im.im.opt.ImConnectOptions;
import cn.org.bjca.trust.android.lib.im.kit.IMSDKCallback;
import cn.org.bjca.trust.android.lib.im.kit.IMSDKListener;
@@ -26,6 +42,25 @@ import kotlin.text.Charsets;
public class ImManager implements IMInterface {
private final String TAG = "ImManager";

//登录成功
private String topic_connected;

// 新消息到达
private String topic_arrive;

// 发送消息应答
private String topic_send_ack;

// 心跳应答
private String topic_pang;


// 数据请求回复
private String topic_result;

// 系统消息
private String topic_system;

private MqttClient mqttClient;
private MqttConnectOptions connectOptions;

@@ -33,15 +68,18 @@ public class ImManager implements IMInterface {

private IMSDKListener statusListener;

private final List<MsgListener> msgListeners = new ArrayList<>();
private final Map<String, IMSDKCallback> msgListenerMap = new HashMap<>();


@Override
public void addMsgListener(MsgListener listener) {
msgListeners.add(listener);
}

@Override
public void removeMsgListener(MsgListener listener) {
msgListeners.remove(listener);
}

@Override
@@ -54,6 +92,16 @@ public class ImManager implements IMInterface {
this.statusListener = null;
}


private void initTopic() {
topic_send_ack = Constant.getSdkAppID() + "/" + PacketType.SEND_ACK + Constant.getUserId();
topic_connected = Constant.getSdkAppID() + "/" + PacketType.CONNECTED + Constant.getUserId();
topic_arrive = Constant.getSdkAppID() + "/" + PacketType.ARRIVE + Constant.getUserId();
topic_pang = Constant.getSdkAppID() + "/" + PacketType.PANG + Constant.getUserId();
topic_result = Constant.getSdkAppID() + "/" + PacketType.RESULT + Constant.getUserId();
topic_system = Constant.getSdkAppID() + "/" + PacketType.SYSTEM + Constant.getUserId();
}

@Override
public void login(ImConnectOptions imConnectOptions) {
if (this.isConnect()) this.logout();
@@ -65,6 +113,7 @@ public class ImManager implements IMInterface {
connectOptions.setConnectionTimeout(30);
connectOptions.setKeepAliveInterval(20);
connectOptions.setAutomaticReconnect(true);
initTopic();

try {
mqttClient = new MqttClient("tcp://" + imConnectOptions.getHost() + ":" + imConnectOptions.getPort(),
@@ -76,11 +125,13 @@ public class ImManager implements IMInterface {
status = 0;
if (reconnect) return;
try {
mqttClient.subscribe(Constant.getSdkAppID() + "/message:" + Constant.getUserId(), 2);
mqttClient.subscribe(Constant.getSdkAppID() + "/pang:" + Constant.getUserId(), 2);
mqttClient.subscribe(Constant.getSdkAppID() + "/connect:" + Constant.getUserId(), 2);
mqttClient.subscribe(Constant.getSdkAppID() + "/result:" + Constant.getUserId(), 2);
mqttClient.subscribe(Constant.getSdkAppID() + "/notice:" + Constant.getUserId(), 2);
mqttClient.subscribe(topic_connected, 2);
mqttClient.subscribe(topic_arrive, 2);
mqttClient.subscribe(topic_send_ack, 2);
mqttClient.subscribe(topic_pang, 2);
mqttClient.subscribe(topic_result, 2);
mqttClient.subscribe(topic_system, 2);
Log.e("======>connectComplete", topic_send_ack);
} catch (MqttException e) {
Log.e(TAG, "=====>connectComplete", e);
}
@@ -97,12 +148,52 @@ public class ImManager implements IMInterface {

@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
Log.e("======>messageArrived", topic + "::" + new String(message.getPayload(), Charsets.UTF_8));
String msg = new String(message.getPayload(), Charsets.UTF_8);
// 登录应答
if (topic.equals(topic_connected)) {
ConnectedMessage connectedMessage = GsonImplHelp.get().toObject(msg, ConnectedMessage.class);
if (connectedMessage.getStatus() == 200) {
if (statusListener != null) statusListener.onConnectSuccess();
} else {
if (statusListener != null)
statusListener.onConnectFailed(connectedMessage.getStatus(), connectedMessage.getMsg());
}
}
// 发送消息应答
else if (topic.equals(topic_send_ack)) {
SendAckMessage sendAckMessage = GsonImplHelp.get().toObject(msg, SendAckMessage.class);

Message m = new Message();
m.obj = sendAckMessage.getAckId();
m.what = 10002;
handler.sendMessage(m);

}
// 新消息送达
else if (topic.equals(topic_arrive)) {
SZYXMessage szyxMessage = GsonImplHelp.get().toObject(msg, SZYXMessage.class);
sendAckMsg(szyxMessage.getMsgId());
Log.d("======>新消息送达", topic + "::\n" + msg);
for (MsgListener listener : msgListeners) {
listener.messageArrive(new ArrayList<SZYXMessage>() {
{
add(szyxMessage);
}
});
}
} else
Log.e("======>messageArrived", topic + "::" + msg);


}

@Override
public void deliveryComplete(IMqttDeliveryToken token) {
Log.e("======>deliveryComplete", "token.getMessage().toString()");
try {
if (token.getMessage() != null && token.getMessage().getPayload() != null)
Log.e("======>deliveryComplete", new String(token.getMessage().getPayload(), Charsets.UTF_8));
} catch (MqttException ignored) {
}
}

});
@@ -146,16 +237,46 @@ public class ImManager implements IMInterface {
}

@Override
public SZYXMessage createMsg(MsgType msgType, String toUserId, boolean isGroup, Object message, String describe) {

SZYXMessage szyxMessage = new SZYXMessage(msgType);
szyxMessage.setArrive(false);
szyxMessage.setDescribe(describe);
szyxMessage.setGroup(isGroup);
szyxMessage.setStatus(1);
szyxMessage.setFromClient(UserManager.getInstance().getUserInfo());
if (isGroup)
szyxMessage.setGroupID(toUserId);
else
szyxMessage.setToClientId(toUserId);
switch (msgType) {
case Text:
szyxMessage.setTextMessage((SZYXTextMessage) message);
break;
case Voice:
break;
}

return szyxMessage;
}

@Override
public void sendSZYXMessage(SZYXMessage message, IMSDKCallback callback) {
sendPacketMessage(message, callback);
sendPacketMessage(PacketType.SEND, message, callback);
}

private void sendConnectMsg() {
ConnectMessage message = new ConnectMessage(DeviceHelper.getDevice());
sendPacketMessage(message, null);
sendPacketMessage(PacketType.CONNECT, message, null);
}

private void sendAckMsg(String msgId) {
SendAckMessage message = new SendAckMessage();
message.setMsgId(msgId);
sendPacketMessage(PacketType.SEND_ACK, message, null);
}

private void sendPacketMessage(PacketMessage message, IMSDKCallback callback) {
private void sendPacketMessage(PacketType packetType, PacketMessage message, IMSDKCallback callback) {
if (null == connectOptions) {
if (null != callback) callback.failed(204, "未登录");
return;
@@ -166,10 +287,63 @@ public class ImManager implements IMInterface {
}
String msg = GsonImplHelp.get().toJson(message);
try {
mqttClient.publish("server", msg.getBytes(Charsets.UTF_8), 2, false);
mqttClient.publish("server" + packetType, msg.getBytes(Charsets.UTF_8), 2, false);
// 如果是发送的消息,需要应答
if (PacketType.SEND == packetType) {
if (null != callback)
msgListenerMap.put(message.getMsgId(), callback);
else msgListenerMap.put(message.getMsgId(), new IMSDKCallback() {
@Override
public void success() {

}

@Override
public void failed(int code, String error) {

}
});
Message m = new Message();
m.obj = message.getMsgId();
m.what = 10001;
handler.sendMessageDelayed(m, 1500);
}
} catch (MqttException e) {
if (null != callback) callback.failed(206, e.getMessage());
}

}

private final Handler handler = new Handler(Looper.getMainLooper()) {
@SuppressLint("HandlerLeak")
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
String msgId = (String) msg.obj;
switch (msg.what) {
case 10001:
IMSDKCallback callback = msgListenerMap.get(msgId);
if (null != callback) {
callback.failed(207, "发送超时");
msgListenerMap.remove(msgId);

for (MsgListener listener : msgListeners) {
listener.statusChange(msgId, -1);
}
}
break;
case 10002:
IMSDKCallback callback1 = msgListenerMap.get(msgId);
if (null != callback1) {
for (MsgListener listener : msgListeners) {
listener.statusChange(msgId, 0);
}
callback1.success();
msgListenerMap.remove(msgId);
}
break;
}
}
};

}

+ 30
- 0
SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/manager/UserManager.java Dosyayı Görüntüle

@@ -0,0 +1,30 @@
package cn.org.bjca.trust.android.lib.im.im.manager;

import cn.org.bjca.trust.android.lib.im.bean.UserInfo;

public class UserManager {

public static UserManager getInstance() {
return UserManagerHolder.instance;
}

private static final class UserManagerHolder {
static final UserManager instance = new UserManager();
}

private UserManager() {

}
private UserInfo userInfo;

public UserInfo getUserInfo() {
return userInfo;
}
public UserInfo getUserInfoForMessage() {
return userInfo;
}

public void setUserInfo(UserInfo userInfo) {
this.userInfo = userInfo;
}
}

+ 30
- 0
SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/ConnectedMessage.java Dosyayı Görüntüle

@@ -0,0 +1,30 @@
package cn.org.bjca.trust.android.lib.im.im.msg;


import cn.org.bjca.trust.android.lib.im.enums.PacketType;
import cn.org.bjca.trust.android.lib.im.im.bean.PacketMessage;

public class ConnectedMessage extends PacketMessage {
public ConnectedMessage() {
super(PacketType.CONNECTED);
}

private int status;
private String msg;

public int getStatus() {
return status;
}

public void setStatus(int status) {
this.status = status;
}

public String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}
}

+ 112
- 1
SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/SZYXMessage.java Dosyayı Görüntüle

@@ -1,10 +1,121 @@
package cn.org.bjca.trust.android.lib.im.im.msg;

import cn.org.bjca.trust.android.lib.im.bean.UserInfo;
import cn.org.bjca.trust.android.lib.im.enums.MsgType;
import cn.org.bjca.trust.android.lib.im.enums.PacketType;
import cn.org.bjca.trust.android.lib.im.im.bean.PacketMessage;
import cn.org.bjca.trust.android.lib.im.im.msg.message.SZYXTextMessage;

public class SZYXMessage extends PacketMessage {
public SZYXMessage() {
public SZYXMessage(MsgType msgType) {
super(PacketType.SEND);
this.msgType = msgType;
}

/**
* 发送者信息
*/
private UserInfo fromClient;
/**
* 接收者信息
*/
private String toClientId;
/**
* 群id
*/
private String groupID;
/**
* 自定义信息(备注信息,描述信息)
*/
private String describe;
/**
* 是不是群消息
*/
private boolean isGroup;
/**
* 是不是接收消息
*/
private boolean isArrive;
/**
* 消息发送状态 -1=失败;0=成功;1=发送中
*/
private int status;
/**
* 消息类型
*/
private MsgType msgType;
private SZYXTextMessage textMessage;

public UserInfo getFromClient() {
return fromClient;
}

public void setFromClient(UserInfo fromClient) {
this.fromClient = fromClient;
}

public String getToClientId() {
return toClientId;
}

public void setToClientId(String toClientId) {
this.toClientId = toClientId;
}

public String getGroupID() {
return groupID;
}

public void setGroupID(String groupID) {
this.groupID = groupID;
}

public String getDescribe() {
return describe;
}

public void setDescribe(String describe) {
this.describe = describe;
}

public boolean isGroup() {
return isGroup;
}

public void setGroup(boolean group) {
isGroup = group;
}

public boolean isArrive() {
return isArrive;
}

public void setArrive(boolean arrive) {
isArrive = arrive;
}

public int getStatus() {
return status;
}

public void setStatus(int status) {
this.status = status;
}

public MsgType getMsgType() {
return msgType;
}

public void setMsgType(MsgType msgType) {
this.msgType = msgType;
}

public SZYXTextMessage getTextMessage() {
return textMessage;
}

public void setTextMessage(SZYXTextMessage textMessage) {
this.textMessage = textMessage;
}

}

+ 20
- 0
SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/SendAckMessage.java Dosyayı Görüntüle

@@ -0,0 +1,20 @@
package cn.org.bjca.trust.android.lib.im.im.msg;


import cn.org.bjca.trust.android.lib.im.enums.PacketType;
import cn.org.bjca.trust.android.lib.im.im.bean.PacketMessage;

public class SendAckMessage extends PacketMessage {
public SendAckMessage() {
super(PacketType.SEND_ACK);
}
private String ackId;

public String getAckId() {
return ackId;
}

public void setAckId(String ackId) {
this.ackId = ackId;
}
}

+ 17
- 0
SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/message/SZYXTextMessage.java Dosyayı Görüntüle

@@ -0,0 +1,17 @@
package cn.org.bjca.trust.android.lib.im.im.msg.message;

public class SZYXTextMessage {
private String text;

public SZYXTextMessage(String text) {
this.text = text;
}

public String getText() {
return text;
}

public void setText(String text) {
this.text = text;
}
}

+ 7
- 1
SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/kit/MsgListener.java Dosyayı Görüntüle

@@ -2,8 +2,14 @@ package cn.org.bjca.trust.android.lib.im.kit;

import java.util.List;

import cn.org.bjca.trust.android.lib.im.bean.SZYXMessage;
import cn.org.bjca.trust.android.lib.im.im.msg.SZYXMessage;

public interface MsgListener {
void messageArrive(List<SZYXMessage> messages);

/**
* @param msgId 消息唯一id
* @param status -1=失败;0=成功;1=发送中
*/
void statusChange(String msgId, int status);
}

+ 4
- 2
SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/kit/SdkInterface.java Dosyayı Görüntüle

@@ -2,6 +2,8 @@ package cn.org.bjca.trust.android.lib.im.kit;

import android.content.Context;

import cn.org.bjca.trust.android.lib.im.im.msg.SZYXMessage;

public interface SdkInterface {

void setIMSDKListener(IMSDKListener listener);
@@ -18,9 +20,9 @@ public interface SdkInterface {

void removeMsgListener(MsgListener listener);

void sendMsgForTextToC(String toUserId, String text, IMSDKCallback callback);
SZYXMessage sendMsgForTextToC(String toUserId, String text, IMSDKCallback callback);

void sendMsgForTextToG(String toGroupId, String text, IMSDKCallback callback);
SZYXMessage sendMsgForTextToG(String toGroupId, String text, IMSDKCallback callback);

String getVersion();
}

+ 19
- 4
SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/manager/SZYXImManager.java Dosyayı Görüntüle

@@ -6,8 +6,12 @@ import cn.org.bjca.trust.android.lib.im.BuildConfig;
import cn.org.bjca.trust.android.lib.im.SZYXDbHelper;
import cn.org.bjca.trust.android.lib.im.cfg.Constant;
import cn.org.bjca.trust.android.lib.im.common.DeviceHelper;
import cn.org.bjca.trust.android.lib.im.enums.MsgType;
import cn.org.bjca.trust.android.lib.im.http.HttpManage;
import cn.org.bjca.trust.android.lib.im.im.IMHelper;
import cn.org.bjca.trust.android.lib.im.im.manager.UserManager;
import cn.org.bjca.trust.android.lib.im.im.msg.SZYXMessage;
import cn.org.bjca.trust.android.lib.im.im.msg.message.SZYXTextMessage;
import cn.org.bjca.trust.android.lib.im.im.opt.ImConnectOptions;
import cn.org.bjca.trust.android.lib.im.kit.IMSDKCallback;
import cn.org.bjca.trust.android.lib.im.kit.IMSDKListener;
@@ -58,7 +62,8 @@ public class SZYXImManager implements SdkInterface {
if (null != callback) callback.success();
if (null != imsdkListener) imsdkListener.onConnecting();
LoginBean bean = httpResult.getData();
imLogin(bean.getHost(), bean.getPort(), bean.getClientId(), bean.getToken());
UserManager.getInstance().setUserInfo(bean.getUserInfo());
imLogin(bean.getHost(), bean.getPort(), bean.getUserInfo().getUserName(), bean.getUserInfo().getPassword());
} else if (null != callback) callback.failed(1001, httpResult.getMsg());
}, throwable -> {
if (null != callback) callback.failed(1001, throwable.getMessage());
@@ -85,13 +90,23 @@ public class SZYXImManager implements SdkInterface {
}

@Override
public void sendMsgForTextToC(String toUserId, String text, IMSDKCallback callback) {
// IMHelper.getInstance().sendSZYXMessage();
public SZYXMessage sendMsgForTextToC(String toUserId, String text, IMSDKCallback callback) {
SZYXTextMessage textMessage = new SZYXTextMessage(text);

SZYXMessage szyxMessage = IMHelper.getInstance().createMsg(MsgType.Text, toUserId, false, textMessage, null);

IMHelper.getInstance().sendSZYXMessage(szyxMessage, callback);
return szyxMessage;
}

@Override
public void sendMsgForTextToG(String toGroupId, String text, IMSDKCallback callback) {
public SZYXMessage sendMsgForTextToG(String toGroupId, String text, IMSDKCallback callback) {
SZYXTextMessage textMessage = new SZYXTextMessage(text);

SZYXMessage szyxMessage = IMHelper.getInstance().createMsg(MsgType.Text, toGroupId, true, textMessage, null);

IMHelper.getInstance().sendSZYXMessage(szyxMessage, callback);
return szyxMessage;
}

@Override


+ 7
- 14
SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/repository/bean/LoginBean.java Dosyayı Görüntüle

@@ -1,10 +1,11 @@
package cn.org.bjca.trust.android.lib.im.repository.bean;

import cn.org.bjca.trust.android.lib.im.bean.UserInfo;

public class LoginBean {
private String host;
private String port;
private String clientId;
private String token;
private UserInfo userInfo;

public String getHost() {
return host;
@@ -22,19 +23,11 @@ public class LoginBean {
this.port = port;
}

public String getClientId() {
return clientId;
}

public void setClientId(String clientId) {
this.clientId = clientId;
}

public String getToken() {
return token;
public UserInfo getUserInfo() {
return userInfo;
}

public void setToken(String token) {
this.token = token;
public void setUserInfo(UserInfo userInfo) {
this.userInfo = userInfo;
}
}

+ 24
- 1
app/src/main/java/cn/org/bjca/trust/android/imdemo/ui/ChatActivity.java Dosyayı Görüntüle

@@ -1,11 +1,15 @@
package cn.org.bjca.trust.android.imdemo.ui;

import android.os.Bundle;
import android.view.View;

import com.xuqm.base.common.ToolsHelper;
import com.xuqm.base.ui.BaseActivity;

import cn.org.bjca.trust.android.imdemo.R;
import cn.org.bjca.trust.android.imdemo.databinding.ActivityChatBinding;
import cn.org.bjca.trust.android.lib.im.SZYXImSdk;
import cn.org.bjca.trust.android.lib.im.kit.IMSDKCallback;

public class ChatActivity extends BaseActivity<ActivityChatBinding> {

@@ -18,6 +22,25 @@ public class ChatActivity extends BaseActivity<ActivityChatBinding> {
public void initView(Bundle savedInstanceState) {
super.initView(savedInstanceState);
String userId = getIntent().getStringExtra("userId");
getBinding().text.setText(userId);
String userName = getIntent().getStringExtra("userName");
setTitleText(userName + "(" + userId + ")");
getBaseBinding().baseToolbar.getToolbarMenu().setVisibility(View.VISIBLE);

getBinding().btnSend.setOnClickListener(v -> {
String msg = getBinding().et.getText().toString();
if (!ToolsHelper.isNull(msg)) {
SZYXImSdk.getInstance().sendMsgForTextToC(userId, "hello world", new IMSDKCallback() {
@Override
public void success() {
ToolsHelper.showMessage("发送消息成功");
}

@Override
public void failed(int code, String error) {
ToolsHelper.showMessage("发送消息失败" + error);
}
});
}
});
}
}

+ 1
- 0
app/src/main/java/cn/org/bjca/trust/android/imdemo/ui/FriendsActivity.java Dosyayı Görüntüle

@@ -30,6 +30,7 @@ public class FriendsActivity extends BaseListActivity<UserItem, FriendsVM> {
} else {
Intent intent = new Intent(mContext, ChatActivity.class);
intent.putExtra("userId", item.getUserId());
intent.putExtra("userName", item.getNickName());
startActivity(intent);
}
}


+ 2
- 2
app/src/main/java/cn/org/bjca/trust/android/imdemo/ui/login/LoginActivity.java Dosyayı Görüntüle

@@ -120,8 +120,8 @@ public class LoginActivity extends AppCompatActivity {
});

loadingProgressBar.setVisibility(View.VISIBLE);
loginViewModel.login(usernameEditText.getText().toString(),
passwordEditText.getText().toString());
// loginViewModel.login(usernameEditText.getText().toString(),
// passwordEditText.getText().toString());
}

private void updateUiWithUser(LoggedInUserView model) {


+ 58
- 9
app/src/main/res/layout/activity_chat.xml Dosyayı Görüntüle

@@ -8,15 +8,64 @@
android:layout_height="match_parent"
tools:context=".ui.ChatActivity">

<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="hello"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/refreshLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:tag="layout/activity_base_list_0"
app:layout_constraintBottom_toTopOf="@+id/line"
app:layout_constraintTop_toTopOf="parent">

<com.xuqm.base.view.EmptyView
android:id="@+id/baseEmptyView"
android:layout_width="match_parent"
android:layout_height="match_parent">

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/baseRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never" />

</com.xuqm.base.view.EmptyView>

</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

<View
android:id="@+id/line"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/line"
app:layout_constraintBottom_toTopOf="@+id/tools" />

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/tools"
android:layout_width="match_parent"
android:layout_height="60dp"
app:layout_constraintBottom_toBottomOf="parent">

<EditText
android:id="@+id/et"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_marginHorizontal="5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/btn_send"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<Button
android:id="@+id/btn_send"
android:layout_width="65dp"
android:layout_height="40dp"
android:layout_marginHorizontal="5dp"
android:text="发送"
android:textSize="11sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

Yükleniyor…
İptal
Kaydet