Commit 24fe5a3a authored by Alex朱枝文's avatar Alex朱枝文

直播间环信消息调整

parent f78b3ed6
......@@ -12,7 +12,7 @@ import UIKit
class YHLivePlayerViewController: YHBasePlayerViewController {
// MARK: - Properties
//private var roomInfo: YHLiveRoomInfo
private let messageQueue = DispatchQueue(label: "com.livePlayerRoom.messageQueue")
private var listMaxWidth: CGFloat {
return KScreenWidth * 248.0 / 375.0
......@@ -35,7 +35,35 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
//
}
ctl.inputCallback = { [weak self] controller, text in
//
guard let self = self else {
return
}
if !checkLogin() { return }
guard let roomId = self.viewModel.liveDetailModel?.roomId else {
return
}
YHIMHelper.shared.sendMessage(roomID: roomId, sendText: text) { [weak self] message, error in
guard let self = self else {
return
}
guard let message = message else {
if let error = error {
// 被拉黑
if error.code == .moderationFailed {
YHHUD.flash(message: "发送了敏感信息")
} else if error.code == .userPermissionDenied {
YHHUD.flash(message: "您已被拉黑")
} else {
YHHUD.flash(message: "发送失败")
}
}
return
}
controller.updateText("")
controller.closeKeyboard(nil)
self.appendHistoryMessages([message])
}
}
return ctl
}()
......@@ -67,7 +95,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
}
deinit {
//
NotificationCenter.default.removeObserver(self)
}
/// 是否可以返回,包括点击返回和手势返回,默认YES
......@@ -125,8 +153,15 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
printLog("joinChatRoom: \(error)")
} else {
printLog("joinChatRoom: success")
YHIMHelper.shared.fetchHistoryMessage(roomID: liveDetail.roomId) { list, error in
//
YHIMHelper.shared.fetchHistoryMessage(roomID: liveDetail.roomId) { [weak self] list, error in
guard let self = self else {
return
}
guard let list = list else {
return
}
self.messageListView.clearMessages()
self.appendHistoryMessages(list)
}
}
}
......@@ -135,8 +170,20 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
private func setupNoti() {
NotificationCenter.default.addObserver(self, selector: #selector(didChatManagerReceiveMessages(_:)), name: YHIMHelper.didChatManagerReceiveMessages, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(didLoginEaseIMSuccess), name: YHIMHelper.didLoginEaseIMSuccess, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(didLogOutEaseIM), name: YHIMHelper.didLogOutEaseIM, object: nil)
}
private func checkLogin()->Bool {
if YHLoginManager.shared.isLogin() == false {
YHOneKeyLoginManager.shared.oneKeyLogin()
return false
}
return true
}
// MARK: - IM Action
private func quitChatRoom() {
guard let roomId = self.viewModel.liveDetailModel?.roomId else {
return
......@@ -151,6 +198,44 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
}
}
private func appendHistoryMessages(_ newMessages: [EMChatMessage]) {
messageQueue.async {
let filterMessages = newMessages.filter { message in
if let body = message.body as? EMTextMessageBody, body.type == .text {
return true
}
return false
}
DispatchQueue.main.async {
self.messageListView.addMessages(filterMessages)
}
}
}
@objc private func didChatManagerReceiveMessages(_ note: Notification) {
guard let messages = note.object as? [EMChatMessage], let message = messages.first, message.conversationId == viewModel.liveDetailModel?.roomId else {
return
}
appendHistoryMessages(messages)
}
@objc private func didLoginEaseIMSuccess() {
guard let roomId = self.viewModel.liveDetailModel?.roomId else {
return
}
YHIMHelper.shared.joinChatRoom(roomID: roomId, leaveOtherRooms: true) { [weak self] error in
guard let self = self else {
return
}
}
}
@objc private func didLogOutEaseIM() {
quitChatRoom()
}
}
extension YHLivePlayerViewController {
// MARK: - Player Control
private func play(with url: String) {
let mediaSource = AgoraMediaSource()
......@@ -162,13 +247,6 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
showAlert(message: "播放失败,错误码:\(result)")
}
}
@objc private func didChatManagerReceiveMessages(_ note: Notification) {
guard let messages = note.object as? [EMChatMessage], let message = messages.first, message.conversationId == viewModel.liveDetailModel?.roomId else {
return
}
printLog("")
}
}
extension YHLivePlayerViewController {
......
......@@ -11,9 +11,10 @@ import IQKeyboardManagerSwift
class YHMessageInputViewController: UIViewController {
private let maxCount = 40
private let overMaxCountTips = "评论字数限制40字以下"
private var overMaxCountTips: String {
return "评论字数限制\(maxCount)字以下"
}
private let nullInputTips = "请输入内容"
private let failTips = "发送失败"
private var keyboardHeight = 0.0
private let textContainerToTop = 8.0
private var lastMessage: String = ""
......@@ -167,7 +168,7 @@ extension YHMessageInputViewController {
let text = textView.text ?? ""
let currentText = text.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
guard currentText.count > 0 else {
// nullInputTips
YHHUD.flash(message: nullInputTips)
return
}
inputCallback?(self, currentText)
......@@ -275,7 +276,7 @@ extension YHMessageInputViewController: UITextViewDelegate {
}
let count = (textView.text?.utf16.count ?? 0) - range.length + text.utf16.count
if count > maxCount {
// overMaxCountTips
YHHUD.flash(message: overMaxCountTips)
return false
}
return true
......
......@@ -179,6 +179,7 @@ extension YHIMHelper {
/// 获取聊天室历史消息
func fetchHistoryMessage(roomID: String, completion: @escaping ([EMChatMessage]?, EMError?) -> Void) {
let option = EMFetchServerMessagesOption()
option.direction = .up // 时间戳逆序的消息因为要倒置表格
EMClient.shared().chatManager?.fetchMessagesFromServer(by: roomID, conversationType: .chatRoom, cursor: nil, pageSize: 50, option: option, completion: { result, err in
DispatchQueue.main.async {
if let err = err {
......@@ -231,20 +232,20 @@ extension YHIMHelper {
}
/// 发送消息
func sendMessage(roomID: String, nickname: String, sendText: String, completion: @escaping (EMError?) -> Void) {
func sendMessage(roomID: String, sendText: String, completion: @escaping (EMChatMessage?, EMError?) -> Void) {
let textMessageBody = EMTextMessageBody(text: sendText)
// 消息接收方,单聊为对端用户的 ID,群聊为群组 ID,聊天室为聊天室 ID。
let message = EMChatMessage(conversationID: roomID, body: textMessageBody, ext: ["fromNickName": nickname])
let message = EMChatMessage(conversationID: roomID, body: textMessageBody, ext: ["fromNickName": currentNickname])
// 会话类型,单聊为 `EMChatTypeChat`,群聊为 `EMChatTypeGroupChat`,聊天室为 `EMChatTypeChatRoom`,默认为单聊。
message.chatType = .chatRoom
EMClient.shared().chatManager?.send(message, progress: nil, completion: { _, error in
EMClient.shared().chatManager?.send(message, progress: nil, completion: { message, error in
DispatchQueue.main.async {
if let err = error {
printLog(err.errorDescription)
} else {
printLog("消息发送-成功")
}
completion(error)
completion(message, error)
}
})
}
......
......@@ -6,10 +6,12 @@
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
import HyphenateChat
import UIKit
class YHLiveMessageListView: UIView {
private var messages: [YHLiveMessage] = []
private var messages: [EMChatMessage] = []
// MARK: - UI Components
private lazy var topFadeView: YHFadeView = {
......@@ -36,26 +38,12 @@ class YHLiveMessageListView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
setupUI()
setupData()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setupData() {
let message6 = YHLiveMessage.init(type: .normal, sender: YHLiveUser.init(userId: "1233", nickname: "MAKESIBIB", level: 0, isAdmin: false), content: "优才今年政策", timestamp: Date())
let message5 = YHLiveMessage.init(type: .normal, sender: YHLiveUser.init(userId: "1233", nickname: "MAKESIBIB", level: 0, isAdmin: false), content: "😊", timestamp: Date())
let message4 = YHLiveMessage.init(type: .normal, sender: YHLiveUser.init(userId: "1233", nickname: "姑息可", level: 0, isAdmin: false), content: "优才申请时间有什么限制吗", timestamp: Date())
let message3 = YHLiveMessage.init(type: .normal, sender: YHLiveUser.init(userId: "1233", nickname: "侯米儿", level: 0, isAdmin: false), content: "我来了", timestamp: Date())
let message2 = YHLiveMessage.init(type: .normal, sender: YHLiveUser.init(userId: "1233", nickname: "奇思幻想牛先生", level: 0, isAdmin: false), content: "可以帮忙介绍一下香港优秀人才计划吗?", timestamp: Date())
let message1 = YHLiveMessage.init(type: .normal, sender: YHLiveUser.init(userId: "1233", nickname: "侯米儿", level: 0, isAdmin: false), content: "我工作5年,香港高才怎么申请更快获批啊", timestamp: Date())
let message0 = YHLiveMessage.init(type: .normal, sender: YHLiveUser.init(userId: "1233", nickname: "谷溪", level: 0, isAdmin: false), content: "想了解香港教育有什么优势", timestamp: Date())
messages = [message0, message1, message2, message3, message4, message5, message6]
// messages = [message6]
tableView.reloadData()
}
private func setupUI() {
backgroundColor = .clear
addSubview(tableView)
......@@ -74,10 +62,12 @@ class YHLiveMessageListView: UIView {
// MARK: - Public Methods
func addMessage(_ message: YHLiveMessage) {
messages.insert(message, at: 0)
let indexPath = IndexPath(row: 0, section: 0)
tableView.insertRows(at: [indexPath], with: .bottom)
func addMessages(_ msgs: [EMChatMessage]) {
messages.insert(contentsOf: msgs, at: 0)
let indexPaths = (0 ..< msgs.count).map {
IndexPath(row: $0, section: 0)
}
tableView.insertRows(at: indexPaths, with: .bottom)
}
func clearMessages() {
......@@ -108,7 +98,17 @@ extension YHLiveMessageListView: UITableViewDelegate, UITableViewDataSource {
let message = messages[indexPath.row]
// cell 也需要旋转
cell.contentView.transform = CGAffineTransform(rotationAngle: .pi)
cell.configureNormalMessage(message.sender.nickname, message.content)
var nickName: String = ""
var content: String = ""
if let ext = message.ext {
nickName = ext["fromNickName"] as? String ?? "YinHe"
}
if let body = message.body as? EMTextMessageBody, body.type == .text {
printLog(body.text)
printLog("\(nickName) : \(body.text)")
content = body.text
}
cell.configureNormalMessage(nickName, content)
return cell
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment