feat : 房間背景定制功能

This commit is contained in:
eggmanQQQ
2024-11-06 15:26:48 +08:00
parent 32359831b5
commit 6df69e6e57
43 changed files with 936 additions and 208 deletions

View File

@@ -10,4 +10,9 @@ public class PrivateChatLimitInfo implements Serializable {
private String message;
private int wealthLevel;
private int charmLevel;
private int nextVipLevel; //下一级Vip等级
private int userCount; //聊天人数
private boolean isMaxVipLevel; // 是否最高等级vip
}

View File

@@ -0,0 +1,8 @@
package com.chwl.core.gift.bean;
import lombok.Data;
@Data
public class RoomBgChangeBean {
public String url;
}

View File

@@ -1,5 +1,40 @@
package com.chwl.core.gift.bean;
import java.util.List;
public class RoomBgInfo {
public int customHour;
public int customGoldPrice;
public List<Item> itemList;
public static class Item{
public int buyHour; //购买小时
public int remainHour = -1; //剩余小时
public int goldPrice; //价格
public long id; //id
public int status; //状态 1=过期 0=审核中 1=通过 2=不过审
public int type; //类型 0=免费 1=付费 2=自定义
public boolean isCur; //使用
public String url;
}
public @interface Type{
//类型
int T_FREE = 0; // 0=免费
int T_PAY = 1; // 1=付费
int T_CUSTOM = 2; // 2=自定义
}
public @interface Status{
//状态
int S_RENEW = -1; // -1=过期
int S_REVIEW = 0; // 0=审核中
int S_SUCCESS = 1; // 1=通过
int S_REJECT = 2; // 2=不过审
}
}

View File

@@ -35,7 +35,6 @@ import com.chwl.core.room.queuing_mic.attachment.QueuingMicAttachment;
import com.chwl.core.super_admin.attachment.SuperAdminOpAttachment;
import com.chwl.core.super_admin.util.SaMsgUtil;
import com.chwl.core.utils.LogUtils;
import com.chwl.core.utils.WLog;
import com.chwl.library.utils.ResUtil;
import com.chwl.library.utils.log.MLog;
import com.netease.nimlib.sdk.msg.attachment.MsgAttachment;
@@ -603,9 +602,11 @@ public class CustomAttachParser implements MsgAttachmentParser {
attachment = new CpMsgAttachment(first,second);
break;
case BOOM_FIRST:
WLog.INSTANCE.writeLog("本地日志 接收到 BOOM_FIRST second = "+second);
attachment = new BoomMsgAttachment(first,second);
break;
case ROOM_BG_CHANGE_FIRST:
attachment = new RoomBgChangeMsgAttachment(first,second);
break;
case CustomAttachment.CUSTOM_MSG_CRAZY_ZOO:
switch (second) {
case CustomAttachment.CUSTOM_MSG_CRAZY_ZOO_SUB_ROOM:

View File

@@ -2,8 +2,8 @@ package com.chwl.core.im.custom.bean;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.netease.nimlib.sdk.msg.attachment.MsgAttachment;
import com.chwl.core.noble.bean.NobleInfo;
import com.netease.nimlib.sdk.msg.attachment.MsgAttachment;
/**
* 先定义一个自定义消息附件的基类,负责解析你的自定义消息的公用字段,比如类型等等。
@@ -557,6 +557,10 @@ public class CustomAttachment implements MsgAttachment {
public static final int BOOM_SECOND_DIALOG = 632;
public static final int BOOM_SECOND_AWARD = 633;
//-----房間背景修改消息
public static final int ROOM_BG_CHANGE_FIRST = 113;
public static final int ROOM_BG_CHANGE_SECOND = 1131;
/**
* 自定义消息附件的类型,根据该字段区分不同的自定义消息

View File

@@ -0,0 +1,31 @@
package com.chwl.core.im.custom.bean
import com.alibaba.fastjson.JSONObject
import com.chwl.core.gift.bean.RoomBgChangeBean
import com.google.gson.Gson
class RoomBgChangeMsgAttachment (first: Int, second: Int) : CustomAttachment(first, second) {
@JvmField
var bgChangeBean : RoomBgChangeBean?=null
override fun parseData(data: JSONObject?) {
super.parseData(data)
if (data != null) {
try {
bgChangeBean = Gson().fromJson<RoomBgChangeBean>(
data.toJSONString(),
RoomBgChangeBean::class.java
)
} catch (e: Exception) {
e.printStackTrace()
}
}
}
override fun packData(): JSONObject {
val data = JSONObject()
return data
}
}

View File

@@ -16,54 +16,6 @@ import android.util.SparseArray;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.chwl.core.gift.bean.GiftType;
import com.chwl.core.gift.bean.MsgSuperLuckyGift;
import com.chwl.core.im.custom.bean.BoomMsgAttachment;
import com.chwl.core.im.custom.bean.CpMsgAttachment;
import com.chwl.core.im.custom.bean.LuckyGiftNotifyAttachment;
import com.chwl.core.im.custom.bean.RoomSerialValueChangedAttachment;
import com.chwl.core.initial.InitialModel;
import com.chwl.core.monsterhunting.bean.MonsterDataBean;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;
import com.hjq.toast.ToastUtils;
import com.netease.nim.uikit.business.session.helper.MessageListPanelHelper;
import com.netease.nim.uikit.common.antispam.AntiSpamEvent;
import com.netease.nim.uikit.common.util.AntiSpamUtil;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.netease.nimlib.sdk.NIMChatRoomSDK;
import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.Observer;
import com.netease.nimlib.sdk.RequestCallback;
import com.netease.nimlib.sdk.ResponseCode;
import com.netease.nimlib.sdk.StatusCode;
import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder;
import com.netease.nimlib.sdk.chatroom.ChatRoomService;
import com.netease.nimlib.sdk.chatroom.ChatRoomServiceObserver;
import com.netease.nimlib.sdk.chatroom.constant.MemberType;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomKickOutEvent;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMemberUpdate;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessageExtension;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomNotificationAttachment;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomPartClearAttachment;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomQueueChangeAttachment;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomStatusChangeData;
import com.netease.nimlib.sdk.chatroom.model.MemberOption;
import com.netease.nimlib.sdk.msg.MessageBuilder;
import com.netease.nimlib.sdk.msg.MsgService;
import com.netease.nimlib.sdk.msg.MsgServiceObserve;
import com.netease.nimlib.sdk.msg.attachment.MsgAttachment;
import com.netease.nimlib.sdk.msg.attachment.NotificationAttachment;
import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum;
import com.netease.nimlib.sdk.msg.constant.NotificationType;
import com.netease.nimlib.sdk.msg.model.IMMessage;
import com.netease.nimlib.sdk.util.Entry;
import com.netease.nimlib.sdk.util.api.RequestResult;
import com.orhanobut.logger.Logger;
import com.chwl.core.BuildConfig;
import com.chwl.core.Constants;
import com.chwl.core.R;
@@ -79,11 +31,15 @@ import com.chwl.core.family.event.FamilyMineEvent;
import com.chwl.core.gift.GiftModel;
import com.chwl.core.gift.bean.GiftInfo;
import com.chwl.core.gift.bean.GiftReceiveInfo;
import com.chwl.core.gift.bean.GiftType;
import com.chwl.core.gift.bean.MsgSuperLuckyGift;
import com.chwl.core.gift.event.UpdateKnapFreeGiftDataEvent;
import com.chwl.core.helper.AtProxy;
import com.chwl.core.im.custom.bean.ActivityTimerAttachment;
import com.chwl.core.im.custom.bean.AssistantAttachment;
import com.chwl.core.im.custom.bean.BoomMsgAttachment;
import com.chwl.core.im.custom.bean.CarAttachment;
import com.chwl.core.im.custom.bean.CpMsgAttachment;
import com.chwl.core.im.custom.bean.CustomAttachment;
import com.chwl.core.im.custom.bean.DatingAttachment;
import com.chwl.core.im.custom.bean.DatingPublishAttachment;
@@ -93,6 +49,7 @@ import com.chwl.core.im.custom.bean.InAppSharingFamilyAttachment;
import com.chwl.core.im.custom.bean.InAppSharingMiniWorldAttachment;
import com.chwl.core.im.custom.bean.InAppSharingRoomAttachment;
import com.chwl.core.im.custom.bean.InAppSharingTeamAttachment;
import com.chwl.core.im.custom.bean.LuckyGiftNotifyAttachment;
import com.chwl.core.im.custom.bean.LuckyMoneyAttachment;
import com.chwl.core.im.custom.bean.LuckyMoneyTipsAttachment;
import com.chwl.core.im.custom.bean.MagicAllMicAttachment;
@@ -103,6 +60,7 @@ import com.chwl.core.im.custom.bean.MonsterHuntingResultAttachment;
import com.chwl.core.im.custom.bean.MonsterStatusAttachment;
import com.chwl.core.im.custom.bean.MultiGiftAttachment;
import com.chwl.core.im.custom.bean.NobleAttachment;
import com.chwl.core.im.custom.bean.RoomBgChangeMsgAttachment;
import com.chwl.core.im.custom.bean.RoomBoxPrizeAttachment;
import com.chwl.core.im.custom.bean.RoomFreeGiftAttachment;
import com.chwl.core.im.custom.bean.RoomFreeGiftMsgBean;
@@ -112,11 +70,13 @@ import com.chwl.core.im.custom.bean.RoomLuckySeaAttachment;
import com.chwl.core.im.custom.bean.RoomLuckySeaMsgBean;
import com.chwl.core.im.custom.bean.RoomPKAttachment;
import com.chwl.core.im.custom.bean.RoomPkBean;
import com.chwl.core.im.custom.bean.RoomSerialValueChangedAttachment;
import com.chwl.core.im.custom.bean.RoomTipAttachment;
import com.chwl.core.im.custom.bean.RouterType;
import com.chwl.core.im.custom.bean.SysMsgAttachment;
import com.chwl.core.im.custom.bean.TarotAttachment;
import com.chwl.core.im.custom.bean.WelcomeAttachment;
import com.chwl.core.initial.InitialModel;
import com.chwl.core.level.UserLevelVo;
import com.chwl.core.luckymoney.bean.LuckyMoneyInfo;
import com.chwl.core.magic.MagicModel;
@@ -125,13 +85,14 @@ import com.chwl.core.magic.toolbox.MagicToolbox;
import com.chwl.core.miniworld.bean.MiniWorldDetailInfo;
import com.chwl.core.miniworld.bean.MiniWorldDetailInfoWithCurrentMember;
import com.chwl.core.miniworld.event.MiniWorldJoinVerifiedEvent;
import com.chwl.core.monsterhunting.bean.MonsterDataBean;
import com.chwl.core.monsterhunting.bean.MonsterInfo;
import com.chwl.core.msg.sys.bean.ErbanSysMsgInfo;
import com.chwl.core.msg.sys.ErbanSysMsgParamKey;
import com.chwl.core.msg.sys.bean.ErbanSysMsgInfo;
import com.chwl.core.msg.sysv2.bean.ErbanSysMsgV2Info;
import com.chwl.core.noble.bean.NobleInfo;
import com.chwl.core.noble.NobleResourceType;
import com.chwl.core.noble.NobleUtil;
import com.chwl.core.noble.bean.NobleInfo;
import com.chwl.core.public_chat_hall.manager.PublicChatHallDataManager;
import com.chwl.core.retry.ImRetryManager;
import com.chwl.core.retry.ReconnectListener;
@@ -184,6 +145,46 @@ import com.chwl.library.utils.ResUtil;
import com.chwl.library.utils.SingleToastUtil;
import com.chwl.library.utils.config.BasicConfig;
import com.chwl.library.utils.log.MLog;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;
import com.hjq.toast.ToastUtils;
import com.netease.nim.uikit.business.session.helper.MessageListPanelHelper;
import com.netease.nim.uikit.common.antispam.AntiSpamEvent;
import com.netease.nim.uikit.common.util.AntiSpamUtil;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.netease.nimlib.sdk.NIMChatRoomSDK;
import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.Observer;
import com.netease.nimlib.sdk.RequestCallback;
import com.netease.nimlib.sdk.ResponseCode;
import com.netease.nimlib.sdk.StatusCode;
import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder;
import com.netease.nimlib.sdk.chatroom.ChatRoomService;
import com.netease.nimlib.sdk.chatroom.ChatRoomServiceObserver;
import com.netease.nimlib.sdk.chatroom.constant.MemberType;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomKickOutEvent;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMemberUpdate;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessageExtension;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomNotificationAttachment;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomPartClearAttachment;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomQueueChangeAttachment;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomStatusChangeData;
import com.netease.nimlib.sdk.chatroom.model.MemberOption;
import com.netease.nimlib.sdk.msg.MessageBuilder;
import com.netease.nimlib.sdk.msg.MsgService;
import com.netease.nimlib.sdk.msg.MsgServiceObserve;
import com.netease.nimlib.sdk.msg.attachment.MsgAttachment;
import com.netease.nimlib.sdk.msg.attachment.NotificationAttachment;
import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum;
import com.netease.nimlib.sdk.msg.constant.NotificationType;
import com.netease.nimlib.sdk.msg.model.IMMessage;
import com.netease.nimlib.sdk.util.Entry;
import com.netease.nimlib.sdk.util.api.RequestResult;
import com.orhanobut.logger.Logger;
import org.greenrobot.eventbus.EventBus;
import org.reactivestreams.Publisher;
@@ -1508,6 +1509,13 @@ public final class IMNetEaseManager {
.setEvent(RoomEvent.MSG_BOOM)
.setBoomMsg(boomMsgAttachment));
break;
case ROOM_BG_CHANGE_FIRST:
RoomBgChangeMsgAttachment roomBgChangeMsgAttachment = (RoomBgChangeMsgAttachment) attachment;
IMNetEaseManager.get().getChatRoomEventObservable().onNext(new RoomEvent()
.setEvent(RoomEvent.MSG_ROOM_BG_CHANGE)
.setRoomBgChangeBean(roomBgChangeMsgAttachment.bgChangeBean));
break;
case CUSTOM_MSG_ROOM_SERIAL_VALUE_CHANGED:
if (second == CUSTOM_MSG_ROOM_SERIAL_VALUE_CHANGED_SUB) {
RoomSerialValueChangedAttachment serialValueAttachment = (RoomSerialValueChangedAttachment) attachment;
@@ -2409,9 +2417,9 @@ public final class IMNetEaseManager {
@Override
public void onFailed(int i) {
if (i == 417) {
SingleToastUtil.showToast("重復操作~");
SingleToastUtil.showToast(R.string.public_chat_hall_model_publicchathallmodel_02);
} else {
SingleToastUtil.showToast(BasicConfig.INSTANCE.getAppContext(), "操作失敗,請重試");
SingleToastUtil.showToast(R.string.public_chat_hall_model_publicchathallmodel_02);
}
if (callBack != null) {
callBack.onFail(i, "");
@@ -2420,7 +2428,7 @@ public final class IMNetEaseManager {
@Override
public void onException(Throwable throwable) {
SingleToastUtil.showToast(BasicConfig.INSTANCE.getAppContext(), "操作失敗,請重試");
SingleToastUtil.showToast(R.string.public_chat_hall_model_publicchathallmodel_02);
if (callBack != null) {
callBack.onFail(-1, throwable.getMessage());
}
@@ -2450,9 +2458,9 @@ public final class IMNetEaseManager {
@Override
public void onFailed(int i) {
if (i == 417) {
SingleToastUtil.showToast(mark ? "對方已經是管理員了" : "移除管理員成功");
SingleToastUtil.showToast(mark ? ResUtil.getString(R.string.public_chat_hall_model_publicchathallmodel_02) : ResUtil.getString(R.string.public_chat_hall_model_publicchathallmodel_01));
} else {
SingleToastUtil.showToast("操作失敗,請重試");
SingleToastUtil.showToast(R.string.public_chat_hall_model_publicchathallmodel_02);
}
if (callBack != null) {
callBack.onFail(i, "");
@@ -2461,7 +2469,7 @@ public final class IMNetEaseManager {
@Override
public void onException(Throwable throwable) {
SingleToastUtil.showToast(BasicConfig.INSTANCE.getAppContext(), "操作失敗,請重試");
SingleToastUtil.showToast(R.string.public_chat_hall_model_publicchathallmodel_02);
if (callBack != null) {
callBack.onFail(-1, throwable.getMessage());
}

View File

@@ -1,17 +1,16 @@
package com.chwl.core.manager;
import com.chwl.core.gift.bean.CpMsgBean;
import com.chwl.core.gift.bean.MsgSuperLuckyGift;
import com.chwl.core.im.custom.bean.BoomMsgAttachment;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomKickOutEvent;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
import com.chwl.core.bean.RoomQueueInfo;
import com.chwl.core.bean.attachmsg.RoomQueueMsgAttachment;
import com.chwl.core.gift.bean.CpMsgBean;
import com.chwl.core.gift.bean.GiftMultiReceiverInfo;
import com.chwl.core.gift.bean.GiftReceiveInfo;
import com.chwl.core.gift.bean.LuckyBagGifts;
import com.chwl.core.gift.bean.MsgSuperLuckyGift;
import com.chwl.core.gift.bean.MultiGiftReceiveInfo;
import com.chwl.core.gift.bean.RoomBgChangeBean;
import com.chwl.core.im.custom.bean.AssistantAttachment;
import com.chwl.core.im.custom.bean.BoomMsgAttachment;
import com.chwl.core.im.custom.bean.CarAttachment;
import com.chwl.core.im.custom.bean.CustomAttachment;
import com.chwl.core.im.custom.bean.MonsterHuntingResultAttachment;
@@ -23,6 +22,8 @@ import com.chwl.core.monsterhunting.bean.MonsterAttackInfo;
import com.chwl.core.pay.bean.WalletInfo;
import com.chwl.core.room.auction.bean.AuctionInfo;
import com.chwl.core.room.bean.RoomInfo;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomKickOutEvent;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
import java.util.List;
@@ -283,6 +284,8 @@ public class RoomEvent {
//Boom相关
public static final int MSG_BOOM = 115;
public static final int MSG_SELF_ENTER_ROOM = 116;
//房間背景變更
public static final int MSG_ROOM_BG_CHANGE = 117;
private int event = NONE;
private int micPosition = Integer.MIN_VALUE;
@@ -314,6 +317,7 @@ public class RoomEvent {
private MsgSuperLuckyGift msgSuperLuckyGift;
private CpMsgBean cpMsgBean;
private BoomMsgAttachment boomMsg;
private RoomBgChangeBean roomBgChangeBean;
/**
* 需要透传出去的消息
@@ -598,4 +602,12 @@ public class RoomEvent {
this.boomMsg = boomMsg;
return this;
}
public RoomBgChangeBean getRoomBgChangeBean() {
return roomBgChangeBean;
}
public RoomEvent setRoomBgChangeBean(RoomBgChangeBean roomBgChangeBean) {
this.roomBgChangeBean = roomBgChangeBean;
return this;
}
}

View File

@@ -11,7 +11,6 @@ import java.io.FileOutputStream
object MyUriUtils {
fun getName(context: Context, uri: Uri, isImg: Boolean = true): String {
var fileName = ""
try {
@@ -117,9 +116,8 @@ object MyUriUtils {
}
}
fun getFileType(context: Context, uri: Uri): String {
fun getFileType(context: Context, uri: Uri?): String {
if (uri==null) return ""
var type = ""
try {
context.contentResolver?.let {
@@ -151,8 +149,8 @@ object MyUriUtils {
return size
}
fun isGif(context: Context, uri: Uri): Boolean {
fun isGif(context: Context, uri: Uri?): Boolean {
if (uri == null) return false
return getFileType(context, uri) == "image/gif"
}