diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/bean/SZYXMessage.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/bean/SZYXMessage.java deleted file mode 100644 index 6abcd3f..0000000 --- a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/bean/SZYXMessage.java +++ /dev/null @@ -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; -} diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/bean/UserInfo.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/bean/UserInfo.java index c0eae12..21180a3 100644 --- a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/bean/UserInfo.java +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/bean/UserInfo.java @@ -2,21 +2,14 @@ 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 UserInfo(String userId, String nickName, String faceUrl, String gender) { - this.userId = userId; - this.nickName = nickName; - this.faceUrl = faceUrl; - this.gender = gender; - } - public String getUserId() { return userId; } @@ -25,6 +18,38 @@ public class UserInfo { this.userId = userId; } + public String getUserName() { + return userName; + } + + 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() { return nickName; } diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/bean/message/TextMessage.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/bean/message/TextMessage.java deleted file mode 100644 index 24e1b50..0000000 --- a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/bean/message/TextMessage.java +++ /dev/null @@ -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 + '\'' + - '}'; - } -} diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/cfg/Constant.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/cfg/Constant.java index c0b3f76..04dcfe8 100644 --- a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/cfg/Constant.java +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/cfg/Constant.java @@ -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) { diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/enums/PacketType.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/enums/PacketType.java index f0af72f..2888fd9 100644 --- a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/enums/PacketType.java +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/enums/PacketType.java @@ -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; diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/IMHelper.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/IMHelper.java index 5316826..de28a2e 100644 --- a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/IMHelper.java +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/IMHelper.java @@ -10,7 +10,7 @@ public class IMHelper { } public static IMInterface getInstance() { - return IMHelper.IMHelperHolder.instance; + return IMHelperHolder.instance; } } diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/bean/PacketMessage.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/bean/PacketMessage.java index c953a26..6288b1f 100644 --- a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/bean/PacketMessage.java +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/bean/PacketMessage.java @@ -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; } diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/kit/IMInterface.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/kit/IMInterface.java index caf8c38..cd247a2 100644 --- a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/kit/IMInterface.java +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/kit/IMInterface.java @@ -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); + } diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/manager/ImManager.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/manager/ImManager.java index d855c2e..773a4f8 100644 --- a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/manager/ImManager.java +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/manager/ImManager.java @@ -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 msgListeners = new ArrayList<>(); + private final Map 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() { + { + 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) { + } } }); @@ -145,17 +236,47 @@ public class ImManager implements IMInterface { return this.status == 1; } + @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 sendPacketMessage(PacketMessage message, IMSDKCallback callback) { + private void sendAckMsg(String msgId) { + SendAckMessage message = new SendAckMessage(); + message.setMsgId(msgId); + sendPacketMessage(PacketType.SEND_ACK, message, null); + } + + 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; + } + } + }; + } diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/manager/UserManager.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/manager/UserManager.java new file mode 100644 index 0000000..9fb4f14 --- /dev/null +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/manager/UserManager.java @@ -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; + } +} diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/ConnectedMessage.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/ConnectedMessage.java new file mode 100644 index 0000000..f248fc8 --- /dev/null +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/ConnectedMessage.java @@ -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; + } +} diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/SZYXMessage.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/SZYXMessage.java index fdfb53d..aa2613a 100644 --- a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/SZYXMessage.java +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/SZYXMessage.java @@ -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; + } + } diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/SendAckMessage.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/SendAckMessage.java new file mode 100644 index 0000000..65f2667 --- /dev/null +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/SendAckMessage.java @@ -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; + } +} diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/message/SZYXTextMessage.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/message/SZYXTextMessage.java new file mode 100644 index 0000000..e8f8c2c --- /dev/null +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/im/msg/message/SZYXTextMessage.java @@ -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; + } +} diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/kit/MsgListener.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/kit/MsgListener.java index 1e036ed..1f7d3a4 100644 --- a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/kit/MsgListener.java +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/kit/MsgListener.java @@ -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 messages); + + /** + * @param msgId 消息唯一id + * @param status -1=失败;0=成功;1=发送中 + */ + void statusChange(String msgId, int status); } diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/kit/SdkInterface.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/kit/SdkInterface.java index b50177d..f8cbdb9 100644 --- a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/kit/SdkInterface.java +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/kit/SdkInterface.java @@ -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(); } diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/manager/SZYXImManager.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/manager/SZYXImManager.java index c80252c..ef3f73a 100644 --- a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/manager/SZYXImManager.java +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/manager/SZYXImManager.java @@ -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 diff --git a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/repository/bean/LoginBean.java b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/repository/bean/LoginBean.java index fd6f581..938ea82 100644 --- a/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/repository/bean/LoginBean.java +++ b/SzyxImSdk/src/main/java/cn/org/bjca/trust/android/lib/im/repository/bean/LoginBean.java @@ -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 UserInfo getUserInfo() { + return userInfo; } - public void setClientId(String clientId) { - this.clientId = clientId; - } - - public String getToken() { - return token; - } - - public void setToken(String token) { - this.token = token; + public void setUserInfo(UserInfo userInfo) { + this.userInfo = userInfo; } } diff --git a/app/src/main/java/cn/org/bjca/trust/android/imdemo/ui/ChatActivity.java b/app/src/main/java/cn/org/bjca/trust/android/imdemo/ui/ChatActivity.java index 76360e4..e92d16f 100644 --- a/app/src/main/java/cn/org/bjca/trust/android/imdemo/ui/ChatActivity.java +++ b/app/src/main/java/cn/org/bjca/trust/android/imdemo/ui/ChatActivity.java @@ -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 { @@ -18,6 +22,25 @@ public class ChatActivity extends BaseActivity { 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); + } + }); + } + }); } } \ No newline at end of file diff --git a/app/src/main/java/cn/org/bjca/trust/android/imdemo/ui/FriendsActivity.java b/app/src/main/java/cn/org/bjca/trust/android/imdemo/ui/FriendsActivity.java index 725348d..6b251e4 100644 --- a/app/src/main/java/cn/org/bjca/trust/android/imdemo/ui/FriendsActivity.java +++ b/app/src/main/java/cn/org/bjca/trust/android/imdemo/ui/FriendsActivity.java @@ -30,6 +30,7 @@ public class FriendsActivity extends BaseListActivity { } else { Intent intent = new Intent(mContext, ChatActivity.class); intent.putExtra("userId", item.getUserId()); + intent.putExtra("userName", item.getNickName()); startActivity(intent); } } diff --git a/app/src/main/java/cn/org/bjca/trust/android/imdemo/ui/login/LoginActivity.java b/app/src/main/java/cn/org/bjca/trust/android/imdemo/ui/login/LoginActivity.java index f6ce125..749f737 100644 --- a/app/src/main/java/cn/org/bjca/trust/android/imdemo/ui/login/LoginActivity.java +++ b/app/src/main/java/cn/org/bjca/trust/android/imdemo/ui/login/LoginActivity.java @@ -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) { diff --git a/app/src/main/res/layout/activity_chat.xml b/app/src/main/res/layout/activity_chat.xml index cd86663..0228cae 100644 --- a/app/src/main/res/layout/activity_chat.xml +++ b/app/src/main/res/layout/activity_chat.xml @@ -8,15 +8,64 @@ android:layout_height="match_parent" tools:context=".ui.ChatActivity"> - + + + + + + + + + + + + + + + + +