# 채널 이벤트 위임
채팅 이벤트 수신 시 Channel
의 delegate
속성을 통해서 이벤트가 처리됩니다.
사용자는 ChannelDelegate
프로토콜을 준수하는 클래스를 생성하고, 이를 Channel.delegate
에 등록함으로써 사용자의 이벤트 핸들링 코드를 작성할 수 있습니다.
# 시작하기
# ChannelDelegate 프로토콜 상속받기
우선 ChannelDelegate
프로토콜을 상속받는 새로운 class를 생성합니다. 아래 예제에서는 MyChannel
라는 이름을 사용했습니다.
class MyChannel: ChannelDelegate {
/// 메시지 수신 시 실행
func onMessage(_ channelResultModel: ChannelResultModel) {
// ...
}
/// 귓속말 수신 시 실행
func onWhisper(_ channelResultModel: ChannelResultModel) {
// ...
}
// ...
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
아래에는 각각의 이벤트에 대한 설명과, 샘플 앱 에서 사용한 예제코드가 첨부되어 있습니다. 필요한 메서드들을 새로운 class에 정의해서 사용할 수 있습니다.
# 메시지 수신 이벤트
일반 메시지 수신 시 실행되는 함수입니다.
- 예제 코드
// self.myChatlog 배열에 채팅 데이터를 추가합니다.
private func addMyChatlog(_ channelResultModel: ChannelResultModel) {
var temp = channelResultModel
switch temp.address {
// 유저 특정 정보가 필요하지 않은 타입의 클라이언트 키 제거 (메시지 레이아웃 유지를 위해)
case .notice, .join, .leave:
temp.body["clientKey"] = ""
default:
break
}
if let userModel = userViewModel?.userModel,
let chatResult = temp.computedChatResult(userModel: userModel, prevChannelResultModel: chatlog.last, nextChannelResultModel: nil) {
myChatlog.append(chatResult)
if let langCode = translateUserClientKeyMap[temp.body["clientKey"] as! String],
let channelKey = chatroomViewModel?.channelKey {
if chatResult.mimeType != .text {
return
}
Task {
// translateUserClientKeyMap에 등록된 유저는 번역을 실행합니다.
let response = await VChatCloudAPI.googleTranslation(text: chatResult.message, targetLanguageCode: langCode, roomId: channelKey)
DispatchQueue.main.async {
if let text = response?.data {
chatResult.message = text
chatResult.isTranslated = true
}
}
}
}
}
}
func onMessage(_ channelResultModel: ChannelResultModel) {
addMyChatlog(channelResultModel)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
파라미터 값
값 식별자 설명 channelResultModel ChannelResultModel 받은 메시지 데이터
# 귓속말 수신 이벤트
귓속말 수신 시 실행되는 함수입니다.
- 예제 코드
func onWhisper(_ channelResultModel: ChannelResultModel) {
addMyChatlog(channelResultModel)
}
1
2
3
2
3
파라미터 값
값 식별자 설명 channelResultModel ChannelResultModel 받은 메시지 데이터
# 공지사항 수신 이벤트
운영자의 공지사항 수신 시 실행되는 함수입니다.
- 예제 코드
func onNotice(_ channelResultModel: ChannelResultModel) {
addMyChatlog(channelResultModel)
}
1
2
3
2
3
파라미터 값
값 식별자 설명 channelResultModel ChannelResultModel 받은 메시지 데이터
# 유저 접속 이벤트
유저 접속 시 실행되는 함수입니다.
- 예제 코드
func onJoinUser(_ channelResultModel: ChannelResultModel) {
addMyChatlog(channelResultModel)
}
1
2
3
2
3
파라미터 값
값 식별자 설명 channelResultModel ChannelResultModel 받은 메시지 데이터
# 유저 퇴장 이벤트
접속중인 유저가 퇴장 시 실행되는 함수입니다.
- 예제 코드
func onLeaveUser(_ channelResultModel: ChannelResultModel) {
addMyChatlog(channelResultModel)
}
1
2
3
2
3
파라미터 값
값 식별자 설명 channelResultModel ChannelResultModel 받은 메시지 데이터
# 커스텀 이벤트 수신 이벤트
커스텀 이벤트 수신 시 실행되는 함수입니다.
- 예제 코드
func onCustom(_ channelResultModel: ChannelResultModel) {
// 개인의 CustomEvent에 맞는 코드 작성
}
1
2
3
2
3
파라미터 값
값 식별자 설명 channelResultModel ChannelResultModel 받은 메시지 데이터