# 채널 이벤트 위임

채팅 이벤트 수신 시 Channeldelegate속성을 통해서 이벤트가 처리됩니다.
사용자는 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

아래에는 각각의 이벤트에 대한 설명과, 샘플 앱 에서 사용한 예제코드가 첨부되어 있습니다. 필요한 메서드들을 새로운 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
  • 파라미터 값

    식별자 설명
    channelResultModel ChannelResultModel 받은 메시지 데이터

# 귓속말 수신 이벤트

귓속말 수신 시 실행되는 함수입니다.

  • 예제 코드
func onWhisper(_ channelResultModel: ChannelResultModel) {
    addMyChatlog(channelResultModel)
}
1
2
3
  • 파라미터 값

    식별자 설명
    channelResultModel ChannelResultModel 받은 메시지 데이터

# 공지사항 수신 이벤트

운영자의 공지사항 수신 시 실행되는 함수입니다.

  • 예제 코드
func onNotice(_ channelResultModel: ChannelResultModel) {
    addMyChatlog(channelResultModel)
}
1
2
3
  • 파라미터 값

    식별자 설명
    channelResultModel ChannelResultModel 받은 메시지 데이터

# 유저 접속 이벤트

유저 접속 시 실행되는 함수입니다.

  • 예제 코드
func onJoinUser(_ channelResultModel: ChannelResultModel) {
    addMyChatlog(channelResultModel)
}
1
2
3
  • 파라미터 값

    식별자 설명
    channelResultModel ChannelResultModel 받은 메시지 데이터

# 유저 퇴장 이벤트

접속중인 유저가 퇴장 시 실행되는 함수입니다.

  • 예제 코드
func onLeaveUser(_ channelResultModel: ChannelResultModel) {
    addMyChatlog(channelResultModel)
}
1
2
3
  • 파라미터 값

    식별자 설명
    channelResultModel ChannelResultModel 받은 메시지 데이터

# 커스텀 이벤트 수신 이벤트

커스텀 이벤트 수신 시 실행되는 함수입니다.

  • 예제 코드
func onCustom(_ channelResultModel: ChannelResultModel) {
    // 개인의 CustomEvent에 맞는 코드 작성
}
1
2
3
  • 파라미터 값

    식별자 설명
    channelResultModel ChannelResultModel 받은 메시지 데이터
Copyright 2022. E7Works Inc. & JOYTUNE Corp. All Rights Reserved.