채널 이벤트 위임
VChatCloud 서비스에서 발생하는 다양한 채팅 이벤트는 Channel
객체의 delegate
속성을 통해 사용자에게 전달됩니다. 개발자는 ChannelDelegate
프로토콜을 준수하는 클래스를 작성하고, 이 클래스의 인스턴스를 Channel.delegate
에 할당함으로써 각 이벤트에 대한 사용자 정의 로직을 구현할 수 있습니다.
시작하기
ChannelDelegate
프로토콜 구현
가장 먼저 ChannelDelegate
프로토콜을 채택하는 새로운 클래스를 생성합니다. 아래 예시에서는 MyChannel
라는 이름을 사용했습니다.
swift
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에 정의해서 사용할 수 있습니다.
메시지 수신 이벤트
일반적인 채팅 메시지를 수신했을 때 호출되는 메서드입니다.
- 예제 코드
swift
// 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 받은 메시지 데이터
귓속말 수신 이벤트
특정 사용자에게 보내는 귓속말 메시지를 수신했을 때 호출되는 메서드입니다.
- 예제 코드
swift
func onWhisper(_ channelResultModel: ChannelResultModel) {
addMyChatlog(channelResultModel)
}
1
2
3
2
3
파라미터 값
값 식별자 설명 channelResultModel ChannelResultModel 수신된 메시지 데이터
공지사항 수신 이벤트
채팅방 운영자가 발송하는 공지사항을 수신했을 때 호출되는 메서드입니다.
- 예제 코드
swift
func onNotice(_ channelResultModel: ChannelResultModel) {
addMyChatlog(channelResultModel)
}
1
2
3
2
3
파라미터 값
값 식별자 설명 channelResultModel ChannelResultModel 받은 메시지 데이터
유저 접속 이벤트
새로운 사용자가 채팅방에 접속했을 때 호출되는 메서드입니다.
- 예제 코드
swift
func onJoinUser(_ channelResultModel: ChannelResultModel) {
addMyChatlog(channelResultModel)
}
1
2
3
2
3
파라미터 값
값 식별자 설명 channelResultModel ChannelResultModel 받은 메시지 데이터
유저 퇴장 이벤트
채팅방에 접속 중인 사용자가 퇴장했을 때 호출되는 메서드입니다.
- 예제 코드
swift
func onLeaveUser(_ channelResultModel: ChannelResultModel) {
addMyChatlog(channelResultModel)
}
1
2
3
2
3
파라미터 값
값 식별자 설명 channelResultModel ChannelResultModel 받은 메시지 데이터
커스텀 이벤트 수신 이벤트
커스텀 이벤트를 수신했을 때 호출되는 메서드입니다.
- 예제 코드
swift
func onCustom(_ channelResultModel: ChannelResultModel) {
// 개인의 CustomEvent에 맞는 코드 작성
}
1
2
3
2
3
파라미터 값
값 식별자 설명 channelResultModel ChannelResultModel 수신된 커스텀 이벤트 데이터
ChannelDelegate
프로토콜을 구현하고 Channel
객체의 delegate
속성에 인스턴스를 할당하면, VChatCloud 서비스에서 발생하는 다양한 채팅 이벤트를 앱 내에서 효과적으로 처리하고 사용자 인터페이스를 업데이트할 수 있습니다.