라이브 후원

- 비밀 후원 기능 추가
This commit is contained in:
Yu Sung
2024-08-26 20:07:37 +09:00
parent 81846f7f7b
commit 534a6e737e
9 changed files with 150 additions and 43 deletions

View File

@@ -380,11 +380,11 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
}
}
func donation(can: Int, message: String = "") {
func donation(can: Int, message: String = "", isSecret: Bool = false) {
if can > 0 {
isLoading = true
repository.donation(roomId: AppState.shared.roomId, can: can, message: message)
repository.donation(roomId: AppState.shared.roomId, can: can, message: message, isSecret: isSecret)
.sink { result in
switch result {
case .finished:
@@ -402,9 +402,16 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
self.isLoading = false
if decoded.success {
let rawMessage = "\(can)캔을 후원하셨습니다."
var rawMessage = ""
if isSecret {
rawMessage = "\(can)캔을 비밀후원하셨습니다.💰🪙"
} else {
rawMessage = "\(can)캔을 후원하셨습니다.💰🪙"
}
let donationRawMessage = LiveRoomChatRawMessage(
type: .DONATION,
type: isSecret ? .SECRET_DONATION : .DONATION,
message: rawMessage,
can: can,
signature: decoded.data,
@@ -414,36 +421,68 @@ final class LiveRoomViewModel: NSObject, ObservableObject {
UserDefaults.set(UserDefaults.int(forKey: .can) - can, forKey: .can)
agora.sendRawMessageToGroup(
rawMessage: donationRawMessage,
completion: { [unowned self] errorCode in
if errorCode == .errorOk {
let (nickname, profileUrl) = self.getUserNicknameAndProfileUrl(accountId: UserDefaults.int(forKey: .userId))
self.messages.append(
LiveRoomDonationChat(
profileUrl: profileUrl,
nickname: nickname,
chat: rawMessage,
can: can,
donationMessage: message
if isSecret {
agora.sendRawMessageToPeer(
peerId: String(liveRoomInfo!.creatorId), rawMessage: donationRawMessage,
completion: { [unowned self] errorCode in
if errorCode == .ok {
let (nickname, profileUrl) = self.getUserNicknameAndProfileUrl(accountId: UserDefaults.int(forKey: .userId))
self.messages.append(
LiveRoomDonationChat(
profileUrl: profileUrl,
nickname: nickname,
chat: rawMessage,
can: can,
donationMessage: message
)
)
)
totalDonationCan += can
addSignature(signature: decoded.data)
self.messageChangeFlag.toggle()
if self.messages.count > 100 {
self.messages.remove(at: 0)
addSignature(signature: decoded.data)
self.messageChangeFlag.toggle()
if self.messages.count > 100 {
self.messages.remove(at: 0)
}
} else {
refundDonation()
}
} else {
},
fail: { [unowned self] in
refundDonation()
}
},
fail: { [unowned self] in
refundDonation()
}
)
)
} else {
agora.sendRawMessageToGroup(
rawMessage: donationRawMessage,
completion: { [unowned self] errorCode in
if errorCode == .errorOk {
let (nickname, profileUrl) = self.getUserNicknameAndProfileUrl(accountId: UserDefaults.int(forKey: .userId))
self.messages.append(
LiveRoomDonationChat(
profileUrl: profileUrl,
nickname: nickname,
chat: rawMessage,
can: can,
donationMessage: message
)
)
totalDonationCan += can
addSignature(signature: decoded.data)
self.messageChangeFlag.toggle()
if self.messages.count > 100 {
self.messages.remove(at: 0)
}
} else {
refundDonation()
}
},
fail: { [unowned self] in
refundDonation()
}
)
}
} else {
if let message = decoded.message {
self.popupContent = message
@@ -1858,6 +1897,31 @@ extension LiveRoomViewModel: AgoraRtmDelegate {
self.startNoChatting()
}
}
do {
let jsonDecoder = JSONDecoder()
let decoded = try jsonDecoder.decode(LiveRoomChatRawMessage.self, from: rawMessage.rawData)
let (nickname, profileUrl) = getUserNicknameAndProfileUrl(accountId: Int(peerId)!)
if decoded.type == .SECRET_DONATION {
self.messages.append(
LiveRoomDonationChat(
profileUrl: profileUrl,
nickname: nickname,
chat: decoded.message,
can: decoded.can,
donationMessage: decoded.donationMessage ?? ""
)
)
if let signature = decoded.signature {
self.addSignature(signature: signature)
} else if let imageUrl = decoded.signatureImageUrl {
self.addSignatureImage(imageUrl: imageUrl)
}
}
} catch {
}
}
}
}