Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
galaxy-iOS
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
mobile-group
galaxy-iOS
Commits
24fe5a3a
Commit
24fe5a3a
authored
Nov 27, 2024
by
Alex朱枝文
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
直播间环信消息调整
parent
f78b3ed6
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
122 additions
and
42 deletions
+122
-42
YHLivePlayerViewController.swift
.../LivestreamSales(直播销售)/C/YHLivePlayerViewController.swift
+90
-12
YHMessageInputViewController.swift
...ivestreamSales(直播销售)/C/YHMessageInputViewController.swift
+5
-4
YHIMHelper.swift
...ses/Modules/LivestreamSales(直播销售)/IM(环信)/YHIMHelper.swift
+5
-4
YHLiveMessageListView.swift
...dules/LivestreamSales(直播销售)/V/YHLiveMessageListView.swift
+22
-22
No files found.
galaxy/galaxy/Classes/Modules/LivestreamSales(直播销售)/C/YHLivePlayerViewController.swift
View file @
24fe5a3a
...
@@ -12,7 +12,7 @@ import UIKit
...
@@ -12,7 +12,7 @@ import UIKit
class
YHLivePlayerViewController
:
YHBasePlayerViewController
{
class
YHLivePlayerViewController
:
YHBasePlayerViewController
{
// MARK: - Properties
// MARK: - Properties
//private var roomInfo: YHLiveRoomInfo
private
let
messageQueue
=
DispatchQueue
(
label
:
"com.livePlayerRoom.messageQueue"
)
private
var
listMaxWidth
:
CGFloat
{
private
var
listMaxWidth
:
CGFloat
{
return
KScreenWidth
*
248.0
/
375.0
return
KScreenWidth
*
248.0
/
375.0
...
@@ -35,7 +35,35 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
...
@@ -35,7 +35,35 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
//
//
}
}
ctl
.
inputCallback
=
{
[
weak
self
]
controller
,
text
in
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
return
ctl
}()
}()
...
@@ -67,7 +95,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
...
@@ -67,7 +95,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
}
}
deinit
{
deinit
{
//
NotificationCenter
.
default
.
removeObserver
(
self
)
}
}
/// 是否可以返回,包括点击返回和手势返回,默认YES
/// 是否可以返回,包括点击返回和手势返回,默认YES
...
@@ -125,8 +153,15 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
...
@@ -125,8 +153,15 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
printLog
(
"joinChatRoom:
\(
error
)
"
)
printLog
(
"joinChatRoom:
\(
error
)
"
)
}
else
{
}
else
{
printLog
(
"joinChatRoom: success"
)
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 {
...
@@ -135,8 +170,20 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
private
func
setupNoti
()
{
private
func
setupNoti
()
{
NotificationCenter
.
default
.
addObserver
(
self
,
selector
:
#selector(
didChatManagerReceiveMessages(_:)
)
,
name
:
YHIMHelper
.
didChatManagerReceiveMessages
,
object
:
nil
)
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
()
{
private
func
quitChatRoom
()
{
guard
let
roomId
=
self
.
viewModel
.
liveDetailModel
?
.
roomId
else
{
guard
let
roomId
=
self
.
viewModel
.
liveDetailModel
?
.
roomId
else
{
return
return
...
@@ -151,6 +198,44 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
...
@@ -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
// MARK: - Player Control
private
func
play
(
with
url
:
String
)
{
private
func
play
(
with
url
:
String
)
{
let
mediaSource
=
AgoraMediaSource
()
let
mediaSource
=
AgoraMediaSource
()
...
@@ -162,13 +247,6 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
...
@@ -162,13 +247,6 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
showAlert
(
message
:
"播放失败,错误码:
\(
result
)
"
)
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
{
extension
YHLivePlayerViewController
{
...
...
galaxy/galaxy/Classes/Modules/LivestreamSales(直播销售)/C/YHMessageInputViewController.swift
View file @
24fe5a3a
...
@@ -11,9 +11,10 @@ import IQKeyboardManagerSwift
...
@@ -11,9 +11,10 @@ import IQKeyboardManagerSwift
class
YHMessageInputViewController
:
UIViewController
{
class
YHMessageInputViewController
:
UIViewController
{
private
let
maxCount
=
40
private
let
maxCount
=
40
private
let
overMaxCountTips
=
"评论字数限制40字以下"
private
var
overMaxCountTips
:
String
{
return
"评论字数限制
\(
maxCount
)
字以下"
}
private
let
nullInputTips
=
"请输入内容"
private
let
nullInputTips
=
"请输入内容"
private
let
failTips
=
"发送失败"
private
var
keyboardHeight
=
0.0
private
var
keyboardHeight
=
0.0
private
let
textContainerToTop
=
8.0
private
let
textContainerToTop
=
8.0
private
var
lastMessage
:
String
=
""
private
var
lastMessage
:
String
=
""
...
@@ -167,7 +168,7 @@ extension YHMessageInputViewController {
...
@@ -167,7 +168,7 @@ extension YHMessageInputViewController {
let
text
=
textView
.
text
??
""
let
text
=
textView
.
text
??
""
let
currentText
=
text
.
trimmingCharacters
(
in
:
CharacterSet
.
whitespacesAndNewlines
)
let
currentText
=
text
.
trimmingCharacters
(
in
:
CharacterSet
.
whitespacesAndNewlines
)
guard
currentText
.
count
>
0
else
{
guard
currentText
.
count
>
0
else
{
// nullInputTips
YHHUD
.
flash
(
message
:
nullInputTips
)
return
return
}
}
inputCallback
?(
self
,
currentText
)
inputCallback
?(
self
,
currentText
)
...
@@ -275,7 +276,7 @@ extension YHMessageInputViewController: UITextViewDelegate {
...
@@ -275,7 +276,7 @@ extension YHMessageInputViewController: UITextViewDelegate {
}
}
let
count
=
(
textView
.
text
?
.
utf16
.
count
??
0
)
-
range
.
length
+
text
.
utf16
.
count
let
count
=
(
textView
.
text
?
.
utf16
.
count
??
0
)
-
range
.
length
+
text
.
utf16
.
count
if
count
>
maxCount
{
if
count
>
maxCount
{
// overMaxCountTips
YHHUD
.
flash
(
message
:
overMaxCountTips
)
return
false
return
false
}
}
return
true
return
true
...
...
galaxy/galaxy/Classes/Modules/LivestreamSales(直播销售)/IM(环信)/YHIMHelper.swift
View file @
24fe5a3a
...
@@ -179,6 +179,7 @@ extension YHIMHelper {
...
@@ -179,6 +179,7 @@ extension YHIMHelper {
/// 获取聊天室历史消息
/// 获取聊天室历史消息
func
fetchHistoryMessage
(
roomID
:
String
,
completion
:
@escaping
([
EMChatMessage
]?,
EMError
?)
->
Void
)
{
func
fetchHistoryMessage
(
roomID
:
String
,
completion
:
@escaping
([
EMChatMessage
]?,
EMError
?)
->
Void
)
{
let
option
=
EMFetchServerMessagesOption
()
let
option
=
EMFetchServerMessagesOption
()
option
.
direction
=
.
up
// 时间戳逆序的消息因为要倒置表格
EMClient
.
shared
()
.
chatManager
?
.
fetchMessagesFromServer
(
by
:
roomID
,
conversationType
:
.
chatRoom
,
cursor
:
nil
,
pageSize
:
50
,
option
:
option
,
completion
:
{
result
,
err
in
EMClient
.
shared
()
.
chatManager
?
.
fetchMessagesFromServer
(
by
:
roomID
,
conversationType
:
.
chatRoom
,
cursor
:
nil
,
pageSize
:
50
,
option
:
option
,
completion
:
{
result
,
err
in
DispatchQueue
.
main
.
async
{
DispatchQueue
.
main
.
async
{
if
let
err
=
err
{
if
let
err
=
err
{
...
@@ -231,20 +232,20 @@ extension YHIMHelper {
...
@@ -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
)
let
textMessageBody
=
EMTextMessageBody
(
text
:
sendText
)
// 消息接收方,单聊为对端用户的 ID,群聊为群组 ID,聊天室为聊天室 ID。
// 消息接收方,单聊为对端用户的 ID,群聊为群组 ID,聊天室为聊天室 ID。
let
message
=
EMChatMessage
(
conversationID
:
roomID
,
body
:
textMessageBody
,
ext
:
[
"fromNickName"
:
n
ickname
])
let
message
=
EMChatMessage
(
conversationID
:
roomID
,
body
:
textMessageBody
,
ext
:
[
"fromNickName"
:
currentN
ickname
])
// 会话类型,单聊为 `EMChatTypeChat`,群聊为 `EMChatTypeGroupChat`,聊天室为 `EMChatTypeChatRoom`,默认为单聊。
// 会话类型,单聊为 `EMChatTypeChat`,群聊为 `EMChatTypeGroupChat`,聊天室为 `EMChatTypeChatRoom`,默认为单聊。
message
.
chatType
=
.
chatRoom
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
{
DispatchQueue
.
main
.
async
{
if
let
err
=
error
{
if
let
err
=
error
{
printLog
(
err
.
errorDescription
)
printLog
(
err
.
errorDescription
)
}
else
{
}
else
{
printLog
(
"消息发送-成功"
)
printLog
(
"消息发送-成功"
)
}
}
completion
(
error
)
completion
(
message
,
error
)
}
}
})
})
}
}
...
...
galaxy/galaxy/Classes/Modules/LivestreamSales(直播销售)/V/YHLiveMessageListView.swift
View file @
24fe5a3a
...
@@ -6,12 +6,14 @@
...
@@ -6,12 +6,14 @@
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
// Copyright © 2024 https://www.galaxy-immi.com. All rights reserved.
//
//
import
HyphenateChat
import
UIKit
import
UIKit
class
YHLiveMessageListView
:
UIView
{
class
YHLiveMessageListView
:
UIView
{
private
var
messages
:
[
YHLiveMessage
]
=
[]
private
var
messages
:
[
EMChatMessage
]
=
[]
// MARK: - UI Components
// MARK: - UI Components
private
lazy
var
topFadeView
:
YHFadeView
=
{
private
lazy
var
topFadeView
:
YHFadeView
=
{
let
view
=
YHFadeView
()
let
view
=
YHFadeView
()
view
.
backgroundColor
=
.
clear
.
withAlphaComponent
(
0.1
)
view
.
backgroundColor
=
.
clear
.
withAlphaComponent
(
0.1
)
...
@@ -36,25 +38,11 @@ class YHLiveMessageListView: UIView {
...
@@ -36,25 +38,11 @@ class YHLiveMessageListView: UIView {
override
init
(
frame
:
CGRect
)
{
override
init
(
frame
:
CGRect
)
{
super
.
init
(
frame
:
frame
)
super
.
init
(
frame
:
frame
)
setupUI
()
setupUI
()
setupData
()
}
}
required
init
?(
coder
:
NSCoder
)
{
required
init
?(
coder
:
NSCoder
)
{
fatalError
(
"init(coder:) has not been implemented"
)
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
()
{
private
func
setupUI
()
{
backgroundColor
=
.
clear
backgroundColor
=
.
clear
...
@@ -74,10 +62,12 @@ class YHLiveMessageListView: UIView {
...
@@ -74,10 +62,12 @@ class YHLiveMessageListView: UIView {
// MARK: - Public Methods
// MARK: - Public Methods
func
addMessage
(
_
message
:
YHLiveMessage
)
{
func
addMessages
(
_
msgs
:
[
EMChatMessage
])
{
messages
.
insert
(
message
,
at
:
0
)
messages
.
insert
(
contentsOf
:
msgs
,
at
:
0
)
let
indexPath
=
IndexPath
(
row
:
0
,
section
:
0
)
let
indexPaths
=
(
0
..<
msgs
.
count
)
.
map
{
tableView
.
insertRows
(
at
:
[
indexPath
],
with
:
.
bottom
)
IndexPath
(
row
:
$0
,
section
:
0
)
}
tableView
.
insertRows
(
at
:
indexPaths
,
with
:
.
bottom
)
}
}
func
clearMessages
()
{
func
clearMessages
()
{
...
@@ -92,7 +82,7 @@ extension YHLiveMessageListView: UITableViewDelegate, UITableViewDataSource {
...
@@ -92,7 +82,7 @@ extension YHLiveMessageListView: UITableViewDelegate, UITableViewDataSource {
func
tableView
(
_
tableView
:
UITableView
,
heightForRowAt
indexPath
:
IndexPath
)
->
CGFloat
{
func
tableView
(
_
tableView
:
UITableView
,
heightForRowAt
indexPath
:
IndexPath
)
->
CGFloat
{
return
UITableView
.
automaticDimension
return
UITableView
.
automaticDimension
}
}
func
tableView
(
_
tableView
:
UITableView
,
numberOfRowsInSection
section
:
Int
)
->
Int
{
func
tableView
(
_
tableView
:
UITableView
,
numberOfRowsInSection
section
:
Int
)
->
Int
{
return
messages
.
count
return
messages
.
count
}
}
...
@@ -108,7 +98,17 @@ extension YHLiveMessageListView: UITableViewDelegate, UITableViewDataSource {
...
@@ -108,7 +98,17 @@ extension YHLiveMessageListView: UITableViewDelegate, UITableViewDataSource {
let
message
=
messages
[
indexPath
.
row
]
let
message
=
messages
[
indexPath
.
row
]
// cell 也需要旋转
// cell 也需要旋转
cell
.
contentView
.
transform
=
CGAffineTransform
(
rotationAngle
:
.
pi
)
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
return
cell
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment