이벤트

Prev Next

Classic/VPC 환경에서 이용 가능합니다.

이벤트

Ncloud Chat에서는 클라이언트 측에서 발생하는 다양한 이벤트를 처리할 수 있는 이벤트 리스너(Event Listener) 기능을 제공합니다. 이 기능을 통해 사용자는 채팅 어플리케이션 내에서 일어나는 여러 상황을 실시간으로 모니터링하고 적절하게 반응할 수 있습니다. 아래는 주요 이벤트들과 이벤트 핸들링 방법에 대한 설명입니다.

주요 이벤트 타입

  1. 메시지 수신: 새로운 메시지가 수신되었을 때 트리거됩니다.
  2. 메시지 삭제: 메시지가 삭제되었을 때 트리거됩니다.
  3. 오류 메시지: 오류가 발생했을 때 트리거됩니다.
  4. 접속 성공: 서버에 성공적으로 연결되었을 때 트리거됩니다.
  5. 접속 종료: 서버 연결이 종료되었을 때 트리거됩니다.
  6. 타이핑 시작/종료: 사용자가 타이핑을 시작하거나 종료할 때 각각 트리거됩니다.
  7. 멤버 추가/제거: 채널에 사용자가 추가되거나 제거될 때 트리거됩니다.
  8. 멤버 정지/탈퇴: 사용자가 채널에서 정지 당하거나 탈퇴할 때 트리거됩니다.

다음은 클라이언트 측에서 이벤트를 수신하는 방법입니다.

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 사용자는 채팅 환경의 변화를 실시간으로 파악하고 적절히 대응할 수 있습니다.