如何通过RongRTCLib发送自定义消息

通过RongRTCLib发送自定义消息,每秒限制最多发送5条,多于5条,会发送失败。
发布时间: 2019-10-31 22:38

回答:

发送端:

1. 继承 MessageContent生成自定义消息类

示例代码:注意,flag必须指定为 MessageTag.STATUS

@MessageTag(value = "SealRTC:SetRTCRoom", flag = MessageTag.STATUS)
public class RTCRoomMessage extends MessageContent {

    private String userId;

    public String getUserId() {
        return userId;
    }

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

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

    private int type;

    public RTCRoomMessage(String userId, int type) {
        this.userId = userId;
        this.type = type;
    }


    public RTCRoomMessage(byte[] data) {
        try {
            JSONObject jsonObject = new JSONObject(new String(data));
            userId = jsonObject.getString("userId");
            type = jsonObject.getInt("type");
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    @Override
    public byte[] encode() {
        try {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("userId", userId);
            jsonObject.put("type", type);
            return jsonObject.toString().getBytes();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return new byte[0];
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(userId);
        dest.writeInt(type);
    }

    public RTCRoomMessage(Parcel parcel) {
        userId = parcel.readString();
        type = parcel.readInt();
    }

    public static final Creator<RTCRoomMessage> CREATOR = new Creator<RTCRoomMessage>() {
        @Override
        public RTCRoomMessage createFromParcel(Parcel source) {
            return new RTCRoomMessage(source);
        }

        @Override
        public RTCRoomMessage[] newArray(int size) {
            return new RTCRoomMessage[size];
        }
    };
}

2.在初始化的地方注册自定义消息:

RongIMClient.registerMessageType(RTCRoomMessage.class)

3. 加入房间成功后,发送自定义消息:

rtcRoom.sendMessage( roomId, messageContent, callback)

接收端:

1. 实现发送端的步骤 1 和 2;

2. 注册RongRTCEventsListener回调,并在onReceiveMessage(Message)方法中处理自定义消息,示例代码如下:

   MessageContent messageContent = message.getContent();
        if (messageContent instanceof RTCRoomMessage){
            RTCRoomMessage rtcRoomMessage = (RTCRoomMessage) messageContent;
            String userId = rtcRoomMessage.getUserId();
            int type = rtcRoomMessage.getType();
        }