package com.rong.io.live.listener;

import com.rong.io.live.model.RCLivevideoFinishReason;

import java.util.List;

import cn.rongcloud.rtc.api.RCRTCConfig;
import cn.rongcloud.rtc.base.RCRTCVideoFrame;
import io.rong.imlib.model.Message;

/**
 * Author by pq, Date on 2022/3/29.
 */
public interface RCLiveEventListener {
    //直播间ready
    void onRoomInfoReady();

    /**
     * @param key   直播间信息的存kv的key
     * @param value 直播间信息的存kv的value
     */
    void onRoomInfoUpdate(String key, String value);

    //用户进入
    void onUserEnter(String userId, int onlineCount);

    //用户退出
    void onUserExit(String userId, int onlineCount);

    /**
     * 用户被踢出房间
     *
     * @param userId     被踢用户唯一标识
     * @param operatorId 踢人操作的执行用户的唯一标识
     */
    void onUserKickOut(String userId, String operatorId);

    /**
     * 连麦用户集合
     *
     * @param lineMicUserIds 连麦的用户集合
     */
    void onLiveVideoUpdate(List<String> lineMicUserIds);

    /**
     * 连麦开始
     */
    void onLiveVideoStarted();
    /**
     * 连麦停止
     */
    void onLiveVideoStopped(RCLivevideoFinishReason reason);

    /**
     * 收到消息
     *
     * @param message
     */
    void onReceiveMessage(Message message);

    void onNetworkStatus(long delayMs);

    /**
     * 处理美颜
     * @param frame
     */
    void onOutputSampleBuffer(RCRTCVideoFrame frame);

    RCRTCConfig.Builder onInitRCRTCConfig(RCRTCConfig.Builder builder);

    void onRoomMixTypeChange();

    /**
     * 直播结束
     */
    void onRoomDestroy();
}
