fix:udpate demo

This commit is contained in:
SL 2024-11-12 15:16:49 +08:00
parent c5f52cdb24
commit 70a9054c5f
5 changed files with 99 additions and 48 deletions

View File

@ -1,7 +1,6 @@
package com.xinbida.wukongdemo package com.xinbida.wukongdemo
import android.content.Intent import android.content.Intent
import android.util.Log
import android.view.View import android.view.View
import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseViewHolder import com.chad.library.adapter.base.viewholder.BaseViewHolder
@ -17,8 +16,12 @@ class ConvAdapter :
super.convert(holder, item, payloads) super.convert(holder, item, payloads)
val msg = payloads[0] as WKUIConversationMsg val msg = payloads[0] as WKUIConversationMsg
if (msg.wkChannel != null) { if (msg.wkChannel != null) {
holder.setText(R.id.nameTV,item.wkChannel.channelName) holder.setText(R.id.nameTV, item.wkChannel.channelName)
GlideUtil.showAvatarImg(context, msg.wkChannel.avatar, holder.getView(R.id.avatarIV)) GlideUtil.showAvatarImg(context,
HttpUtil.getInstance()
.getAvatar(item.wkChannel.channelID, item.wkChannel.channelType),
holder.getView(R.id.avatarIV)
)
} }
if (msg.wkMsg != null && msg.wkMsg.baseContentMsgModel != null) { if (msg.wkMsg != null && msg.wkMsg.baseContentMsgModel != null) {
val content = msg.wkMsg.baseContentMsgModel.displayContent val content = msg.wkMsg.baseContentMsgModel.displayContent
@ -39,17 +42,20 @@ class ConvAdapter :
} }
holder.setText(R.id.timeTV, getShowTime(item.lastMsgTimestamp * 1000L)) holder.setText(R.id.timeTV, getShowTime(item.lastMsgTimestamp * 1000L))
if (item.wkChannel != null) { if (item.wkChannel != null) {
holder.setText(R.id.nameTV,item.wkChannel.channelName) holder.setText(R.id.nameTV, item.wkChannel.channelName)
GlideUtil.showAvatarImg(context, item.wkChannel.avatar, holder.getView(R.id.avatarIV)) GlideUtil.showAvatarImg(context,
HttpUtil.getInstance()
.getAvatar(item.wkChannel.channelID, item.wkChannel.channelType),
holder.getView(R.id.avatarIV))
} else { } else {
WKIM.getInstance().channelManager.fetchChannelInfo(item.channelID, item.channelType) WKIM.getInstance().channelManager.fetchChannelInfo(item.channelID, item.channelType)
} }
holder.getView<View>(R.id.contentLayout).setOnClickListener { holder.getView<View>(R.id.contentLayout).setOnClickListener {
val intent = Intent(context,MainActivity::class.java) val intent = Intent(context, MainActivity::class.java)
intent.putExtra("channel_id",item.channelID) intent.putExtra("channel_id", item.channelID)
intent.putExtra("channel_type",item.channelType) intent.putExtra("channel_type", item.channelType)
intent.putExtra("old_order_seq",item.wkMsg.orderSeq) intent.putExtra("old_order_seq", item.wkMsg.orderSeq)
context.startActivity(intent) context.startActivity(intent)
} }
} }

View File

@ -4,7 +4,11 @@ import android.text.TextUtils;
import android.util.Base64; import android.util.Base64;
import android.util.Log; import android.util.Log;
import com.xinbida.wukongim.WKIM;
import com.xinbida.wukongim.entity.WKChannel;
import com.xinbida.wukongim.entity.WKChannelType;
import com.xinbida.wukongim.entity.WKSyncChannelMsg; import com.xinbida.wukongim.entity.WKSyncChannelMsg;
import com.xinbida.wukongim.entity.WKSyncExtraMsg;
import com.xinbida.wukongim.entity.WKSyncRecent; import com.xinbida.wukongim.entity.WKSyncRecent;
import com.xinbida.wukongim.utils.WKLoggerUtils; import com.xinbida.wukongim.utils.WKLoggerUtils;
@ -26,8 +30,7 @@ import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
public class HttpUtil { public class HttpUtil {
// public String apiURL = "http://62.234.8.38:7090/v1"; public String apiURL = "http://62.234.8.38:7090/v1";
public String apiURL = "http://175.27.245.108:15001";
private static class HttpUtilTypeClass { private static class HttpUtilTypeClass {
private static final HttpUtil instance = new HttpUtil(); private static final HttpUtil instance = new HttpUtil();
@ -37,6 +40,13 @@ public class HttpUtil {
return HttpUtilTypeClass.instance; return HttpUtilTypeClass.instance;
} }
public String getAvatar(String channelId, byte channelType) {
if (channelType == WKChannelType.PERSONAL) {
return apiURL + "/users/" + channelId + "/avatar";
}
return apiURL + "/groups/" + channelId + "/avatar";
}
public void post(String url, JSONObject data, final IResult iResult) { public void post(String url, JSONObject data, final IResult iResult) {
try { try {
HttpURLConnection conn = (HttpURLConnection) new URL(apiURL + url).openConnection(); HttpURLConnection conn = (HttpURLConnection) new URL(apiURL + url).openConnection();
@ -118,7 +128,7 @@ public class HttpUtil {
} catch (JSONException e) { } catch (JSONException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
post("/channel/messagesync", jsonObject, (code, data) -> { post("/message/channel/sync", jsonObject, (code, data) -> {
if (code == 200) { if (code == 200) {
try { try {
WKSyncChannelMsg msg = new WKSyncChannelMsg(); WKSyncChannelMsg msg = new WKSyncChannelMsg();
@ -146,9 +156,10 @@ public class HttpUtil {
String channel_id = msgJson.optString("channel_id"); String channel_id = msgJson.optString("channel_id");
byte channel_type = (byte) msgJson.optInt("channel_type"); byte channel_type = (byte) msgJson.optInt("channel_type");
long timestamp = msgJson.optLong("timestamp"); long timestamp = msgJson.optLong("timestamp");
String payload = msgJson.optString("payload");
byte[] b = Base64.decode(payload, Base64.DEFAULT); String content = msgJson.optString("payload");
String content = new String(b); // byte[] b = Base64.decode(payload, Base64.DEFAULT);
// String content = new String(b);
WKSyncRecent recent = new WKSyncRecent(); WKSyncRecent recent = new WKSyncRecent();
recent.from_uid = from_uid; recent.from_uid = from_uid;
recent.message_id = msgJson.optString("message_id"); recent.message_id = msgJson.optString("message_id");
@ -169,6 +180,20 @@ public class HttpUtil {
recent.payload = hashMap; recent.payload = hashMap;
} }
} }
if (msgJson.has("message_extra")) {
JSONObject extraJson = msgJson.optJSONObject("message_extra");
if (extraJson == null) {
return recent;
}
WKSyncExtraMsg extraMsg = new WKSyncExtraMsg();
extraMsg.message_id_str = extraJson.optString("message_id_str");
extraMsg.revoke = extraJson.optInt("revoke");
extraMsg.revoker = extraJson.optString("revoker");
extraMsg.readed = extraJson.optInt("readed");
extraMsg.readed_count = extraJson.optInt("readed_count");
extraMsg.is_mutual_deleted = extraJson.optInt("is_mutual_deleted");
recent.message_extra = extraMsg;
}
return recent; return recent;
} }
@ -187,4 +212,39 @@ public class HttpUtil {
public interface IMsgResult { public interface IMsgResult {
void onResult(WKSyncChannelMsg msg); void onResult(WKSyncChannelMsg msg);
} }
public void getUserInfo(String uid) {
new Thread(() -> get("/users/" + uid, (code, data) -> {
if (code == 200 && !TextUtils.isEmpty(data)) {
try {
JSONObject json = new JSONObject(data);
WKChannel channel = new WKChannel(uid, WKChannelType.PERSONAL);
channel.channelName = json.optString("name");
channel.avatar = json.optString("avatar");
WKIM.getInstance().getChannelManager().saveOrUpdateChannel(channel);
} catch (JSONException e) {
throw new RuntimeException(e);
}
}
})).start();
}
public void getGroupInfo(String groupNO) {
new Thread(() -> get("/groups/" + groupNO, (code, data) -> {
if (code == 200 && !TextUtils.isEmpty(data)) {
try {
JSONObject json = new JSONObject(data);
WKChannel channel = new WKChannel(groupNO, WKChannelType.GROUP);
channel.channelName = json.optString("name");
channel.avatar = json.optString("avatar");
WKIM.getInstance().getChannelManager().saveOrUpdateChannel(channel);
} catch (JSONException e) {
throw new RuntimeException(e);
}
}
})).start();
}
} }

View File

@ -47,7 +47,7 @@ public class LoginActivity extends AppCompatActivity {
} catch (JSONException e) { } catch (JSONException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
new Thread(() -> HttpUtil.getInstance().post("/user/token", jsonObject, (code, data) -> { new Thread(() -> HttpUtil.getInstance().post("/user/login", jsonObject, (code, data) -> {
if (code == 200) { if (code == 200) {
runOnUiThread(()->{ runOnUiThread(()->{
Const.Companion.setToken(token); Const.Companion.setToken(token);

View File

@ -181,14 +181,14 @@ public class MainActivity extends AppCompatActivity {
@Override @Override
protected void onStop() { protected void onStop() {
super.onStop(); super.onStop();
WKIM.getInstance().getConnectionManager().disconnect(false); // WKIM.getInstance().getConnectionManager().disconnect(false);
} }
@Override @Override
protected void onResume() { protected void onResume() {
super.onResume(); super.onResume();
// 连接 // 连接
WKIM.getInstance().getConnectionManager().connection(); // WKIM.getInstance().getConnectionManager().connection();
} }
private void getData(long oldOrderSeq, int pullMode, boolean contain, boolean isResetData) { private void getData(long oldOrderSeq, int pullMode, boolean contain, boolean isResetData) {
@ -243,8 +243,7 @@ public class MainActivity extends AppCompatActivity {
@Override @Override
protected void onDestroy() { protected void onDestroy() {
super.onDestroy(); super.onDestroy();
// 断开连接 // WKIM.getInstance().getConnectionManager().disconnect(true);
WKIM.getInstance().getConnectionManager().disconnect(true);
// 取消监听 // 取消监听
WKIM.getInstance().getMsgManager().removeNewMsgListener("new_msg"); WKIM.getInstance().getMsgManager().removeNewMsgListener("new_msg");
WKIM.getInstance().getMsgManager().removeSendMsgCallBack("insert_msg"); WKIM.getInstance().getMsgManager().removeSendMsgCallBack("insert_msg");

View File

@ -23,29 +23,13 @@ class WKApplication : Application() {
} }
private val avatars = arrayOf(
"https://lmg.jj20.com/up/allimg/tx29/06052048151752929.png",
"https://img1.baidu.com/it/u=1653751609,236581088&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=500",
"https://img0.baidu.com/it/u=1008951549,1654888911&fm=253&fmt=auto&app=120&f=JPEG?w=800&h=800",
"https://lmg.jj20.com/up/allimg/tx30/10121138219844229.jpg",
"https://lmg.jj20.com/up/allimg/tx28/430423183653303.jpg",
"https://lmg.jj20.com/up/allimg/tx23/520420024834916.jpg",
"https://himg.bdimg.com/sys/portraitn/item/public.1.a535a65d.tJe8MgWmP8zJ456B73Kzfg",
"https://img2.baidu.com/it/u=3324164588,1070151830&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=500",
"https://img1.baidu.com/it/u=3916753633,2634890492&fm=253&fmt=auto&app=138&f=JPEG?w=400&h=400",
"https://img0.baidu.com/it/u=4210586523,443489101&fm=253&fmt=auto&app=138&f=JPEG?w=304&h=304",
"https://img2.baidu.com/it/u=2559320899,1546883787&fm=253&fmt=auto&app=138&f=JPEG?w=441&h=499",
"https://img0.baidu.com/it/u=2952429745,3806929819&fm=253&fmt=auto&app=138&f=JPEG?w=380&h=380",
"https://img2.baidu.com/it/u=3783923022,668713258&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500",
)
private fun initListener() { private fun initListener() {
// 注册自定义消息 // 注册自定义消息
WKIM.getInstance().msgManager.registerContentMsg(OrderMessageContent::class.java) WKIM.getInstance().msgManager.registerContentMsg(OrderMessageContent::class.java)
// 连接地址 // 连接地址
WKIM.getInstance().connectionManager.addOnGetIpAndPortListener { andPortListener: IGetSocketIpAndPortListener -> WKIM.getInstance().connectionManager.addOnGetIpAndPortListener { andPortListener: IGetSocketIpAndPortListener ->
Thread { Thread {
HttpUtil.getInstance()["/route", { code: Int, data: String -> HttpUtil.getInstance()["/users/${Const.uid}/route", { code: Int, data: String ->
if (code == 200 && !TextUtils.isEmpty(data)) { if (code == 200 && !TextUtils.isEmpty(data)) {
try { try {
val jsonObject = JSONObject(data) val jsonObject = JSONObject(data)
@ -66,16 +50,11 @@ class WKApplication : Application() {
} }
// 对接频道资料(群信息/用户信息) // 对接频道资料(群信息/用户信息)
WKIM.getInstance().channelManager.addOnGetChannelInfoListener { channelId, channelType, _ -> WKIM.getInstance().channelManager.addOnGetChannelInfoListener { channelId, channelType, _ ->
val channel = WKChannel(channelId, channelType)
if (channelType == WKChannelType.PERSONAL) { if (channelType == WKChannelType.PERSONAL) {
channel.channelName = "单聊${channelId.hashCode()}" HttpUtil.getInstance().getUserInfo(channelId)
} else { } else {
channel.channelName = "群聊${channelId.hashCode()}" HttpUtil.getInstance().getGroupInfo(channelId)
} }
val index = (channelId.hashCode()) % (avatars.size)
channel.avatar = avatars[abs(index)]
// channel.avatar ="https://api.multiavatar.com/${channel.channelID}.png"
WKIM.getInstance().channelManager.saveOrUpdateChannel(channel)
null null
} }
@ -112,20 +91,27 @@ class WKApplication : Application() {
iSyncConvChatBack: ISyncConversationChatBack? iSyncConvChatBack: ISyncConversationChatBack?
) { ) {
val json = JSONObject() val json = JSONObject()
json.put("uid", Const.uid) json.put("login_uid", Const.uid)
json.put("version", version) json.put("version", version)
json.put("last_msg_seqs", lastMsgSeqs) json.put("last_msg_seqs", lastMsgSeqs)
json.put("msg_count", msgCount) json.put("msg_count", msgCount)
json.put("device_uuid", Const.uid)
Thread { Thread {
HttpUtil.getInstance().post( HttpUtil.getInstance().post(
"/conversation/sync", json "/conversation/sync", json
) { code, data -> ) { code, data ->
if (code != 200 || TextUtils.isEmpty(data)) { if (code != 200 || TextUtils.isEmpty(data)) {
iSyncConvChatBack?.onBack(null) iSyncConvChatBack?.onBack(null)
return@post
} }
val arr = JSONArray(data!!) val dataJson = JSONObject(data)
val chat = getWKSyncChat(arr) val arr = dataJson.optJSONArray("conversations")
iSyncConvChatBack?.onBack(chat) if (arr != null && arr.length() > 0) {
val chat = getWKSyncChat(arr)
iSyncConvChatBack?.onBack(chat)
return@post
}
iSyncConvChatBack?.onBack(null)
} }
}.start() }.start()
} }