Classic/VPC 환경에서 이용 가능합니다.
이벤트
Ncloud Chat에서는 클라이언트 측에서 발생하는 다양한 이벤트를 처리할 수 있는 이벤트 리스너(Event Listener) 기능을 제공합니다. 이 기능을 통해 사용자는 채팅 어플리케이션 내에서 일어나는 여러 상황을 실시간으로 모니터링하고 적절하게 반응할 수 있습니다. 아래는 주요 이벤트들과 이벤트 핸들링 방법에 대한 설명입니다.
주요 이벤트 타입
- 메시지 수신: 새로운 메시지가 수신되었을 때 트리거됩니다.
- 메시지 삭제: 메시지가 삭제되었을 때 트리거됩니다.
- 오류 메시지: 오류가 발생했을 때 트리거됩니다.
- 접속 성공: 서버에 성공적으로 연결되었을 때 트리거됩니다.
- 접속 종료: 서버 연결이 종료되었을 때 트리거됩니다.
- 타이핑 시작/종료: 사용자가 타이핑을 시작하거나 종료할 때 각각 트리거됩니다.
- 멤버 추가/제거: 채널에 사용자가 추가되거나 제거될 때 트리거됩니다.
- 멤버 정지/탈퇴: 사용자가 채널에서 정지 당하거나 탈퇴할 때 트리거됩니다.
다음은 클라이언트 측에서 이벤트를 수신하는 방법입니다.
Javascript/Typescript
nc.bind("onMessageReceived", function (channel, message) {
console.log("received a new message: ", e);
});
Android (Kotlin)
val chatHandler = object : ChatHandler {
override fun onMessageReceived(message: com.nbase.adpater.cloudchat.model.Message) {
println("Message received: $message")
}
}
NChat.addHandler("CloudChatHandler", chatHandler)
iOS (Swift)
class ChatViewController: ConnectDelegate {
// CloudChat message reception event
func onMessageReceived(data: NCMessage) {
print("NcloudChat: New message received - \(data)")
}
}
Unity
nc.dispatcher.onMessageReceived += message =>
{
Console.WriteLine("received a new message: ", message);
}
이벤트 핸들러 연결 및 해제
이벤트 핸들러를 사용하여 다양한 이벤트를 수신하고, 필요한 로직을 구현할 수 있습니다. 아래 코드는 각 이벤트에 대한 이벤트 핸들러 연결 및 해제 방법을 보여줍니다.
Javascript/Typescript
nc.bind("onMessageReceived", function (channel, message) {
console.log(message);
});
nc.bind("onMessageDeleted", function (channel, message) {
console.log(message);
});
// 오류 메시지
nc.bind("onErrorReceived", function (error) {
console.log(error);
});
// 접속 성공
nc.bind("onConnected", function (socket) {
console.log("connected");
});
// 접속 종료
nc.bind("onDisconnected", function (reason) {
console.log("disconnected");
});
nc.bind("onStartTyping", function (data) {
console.log("Typing Start");
});
nc.bind("onStopTyping", function (data) {
console.log("Typing Stop");
});
nc.bind("onMemberJoined", function (data) {
console.log("onMemberJoined");
});
nc.bind("onMemberLeft", function (data) {
console.log("onMemberLeft");
});
// mark Updated
nc.bind("onSubscriptionUpdated", function (channelId, data) {
console.log("onSubscriptionUpdated");
});
Android (Kotlin)
val chatHandler = object : ChatHandler {
override fun onMessageReceived(message: com.nbase.adpater.cloudchat.model.Message) {
println("Message received: $message")
}
override fun onConnected() {
println("onConnected")
}
override fun onDisconnected(reason: String) {
println("onDisconnected")
}
override fun onErrorReceived(error: String) {
println("onErrorReceived")
}
override fun onStartTyping(option: String) {
println("onStartTyping")
}
override fun onStopTyping(option: String) {
println("onStopTyping")
}
override fun onMemberJoined(member: Member) {
println("onMemberJoined")
}
override fun onMemberLefted(member: Member) {
println("onMemberLefted")
}
override fun onMemberUpdated(member: Member) {
println("onMemberUpdated")
}
override fun onMessageDeleted(message: com.nbase.adpater.cloudchat.model.Message) {
println("onMessageDeleted")
}
override fun onMessageUpdated(message: com.nbase.adpater.cloudchat.model.Message) {
println("onMessageUpdated")
}
override fun onUserBanned(user: User) {
println("onUserBanned")
}
override fun onUserDeleted(user: User) {
println("onUserDeleted")
}
override fun onUserUpdated(user: User) {
println("onUserUpdated")
}
override fun onSubscriptionUpdated(member: com.nbase.adpater.cloudchat.model.Member) {
println("onSubscriptionUpdated")
}
}
NChat.addHandler("CloudChatHandler", chatHandler)
iOS (Swift)
class ChatViewController: ConnectDelegate {
// CloudChat Socket connection event
func onConnect() {
print("NcloudChat: Socket connected")
}
// User-triggered CloudChat Socket disconnection event
func onDisconnect() {
print("NcloudChat: Socket disconnected by user")
}
// CloudChat Socket connection status change event
func onStatusChange(status: Any) {
print("NcloudChat: Socket connection status changed - \(status)")
}
// CloudChat message reception event
func onMessageReceived(data: NCMessage) {
print("NcloudChat: New message received - \(data.content)")
}
// CloudChat message deletion event
func onMessageDeleted(data: Any) {
print("NcloudChat: Message deleted - \(data)")
}
// CloudChat "start typing" reception event
func onStartTyping(data: Any) {
print("NcloudChat: Other party started typing")
}
// CloudChat "stop typing" reception event
func onStopTyping(data: Any) {
print("NcloudChat: Other party stopped typing")
}
// CloudChat "event" reception event
func onEvent(data: Any) {
print("NcloudChat: Event occurred - \(data)")
}
// CloudChat new member joined the subscribed channel event
func onMemberJoined(data: Any) {
print("NcloudChat: New member joined - \(data)")
}
// CloudChat subscribed channel member left event
func onMemberLeft(data: Any) {
print("NcloudChat: Member left - \(data)")
}
// CloudChat channel member update event
func onMemberUpdated(data: Any) {
print("NcloudChat: Member updated - \(data)")
}
// CloudChat channel member deletion event
func onMemberDeleted(data: Any) {
print("NcloudChat: Member deleted - \(data)")
}
// CloudChat channel member banned event
func onMemberBanned(data: Any) {
print("NcloudChat: Member banned - \(data)")
}
// CloudChat Socket reconnection event
func onReconnect(data: Any) {
print("NcloudChat: Socket reconnected - \(data)")
}
// CloudChat Socket reconnection attempt event
func onReconnectAttempt(data: Any) {
print("NcloudChat: Socket reconnection attempt in progress - \(data)")
}
// CloudChat error occurred, Socket disconnected event
func onError(error: Any) {
print("NcloudChat: Error occurred - \(error)")
}
// CloudChat mark updated event
func onSubscriptionUpdated(data: Any) {
let dataString = String(describing: data)
print("NcloudChat: Mark Updated - \(dataString)")
}
}
Unity
// 메시지 수신
nc.dispatcher.onMessageReceived += e =>
{
Console.WriteLine("onMessageReceived: ", e);
};
// 메시지 삭제
nc.dispatcher.onMessageDeleted += e =>
{
Console.WriteLine("onMessageDeleted: ", e);
};
// 오류 메시지
nc.dispatcher.onErrorReceived += e =>
{
Console.WriteLine("[CloudChatSample] onErrorReceived: ", e);
};
// 접속 성공
nc.dispatcher.onConnected += e =>
{
Console.WriteLine("[CloudChatSample] Connected to server with id: {0} ", e);
};
// 접속 종료
nc.dispatcher.onDisconnected += e =>
{
Console.WriteLine("Disconnected");
};
// 타이핑을 시작할 경우
nc.dispatcher.onStartTyping += e =>
{
Console.WriteLine("onStartTyping: ", e);
};
// 타이핑을 종료할 경우
nc.dispatcher.onStopTyping += e =>
{
Console.WriteLine("onStopTyping: ", e);
};
// 채널에 사용자가 구독 한 경우
nc.dispatcher.onMemberAdded += e =>
{
Console.WriteLine("onMemberAdded: ", e);
};
// 채널에 사용자가 구독 해지 경우
nc.dispatcher.onMemberLeft += e =>
{
Console.WriteLine("[CloudChatSample] onMemberLeft: ", e);
};
// 채널에 사용자가 정지를 당한 경우
nc.dispatcher.onMemberBanned += e =>
{
Console.WriteLine("[CloudChatSample] onMemberBanned: ", e);
};
// 채널에 사용자가 탈퇴를 한 경우
nc.dispatcher.onMemberDeleted += e =>
{
Console.WriteLine("[CloudChatSample] onMemberDeleted: ", e);
};
nc.dispatcher.onSubscriptionUpdated += e =>
{
Console.WriteLine("[CloudChatSample] onSubscriptionUpdated: ", e);
};
이벤트 리스너를 활용함으로써, Ncloud Chat 사용자는 채팅 환경의 변화를 실시간으로 파악하고 적절히 대응할 수 있습니다.