이벤트


이벤트

  유챗은 비동기 로딩을 기본으로 하고 있습니다. 그렇기 때문에 API를 이용하실 때는 콜백을 이용하여 이벤트 기반으로 코드를 작성하셔야 합니다. 
콜백은 다음과 같이 등록할 수 있습니다: U.chat('채팅방ID').on('이벤트 종류', function(room, data){ ··· 사용자 정의 코드 ··· });
콜백의 첫번째 인자는 이벤트의 종류 (before.create, after.join ···)이고, 두번째 인자는 이벤트 발생시 실행할 콜백 함수입니다. 모든 콜백 함수는 room, data 인자만을 가져야 합니다.

  콜백 함수의 인자인 room과 data는 수정이 가능합니다. (pass by reference) 대신, 값을 수정했을때 채팅방이 정상 작동이 안될 수 있습니다. 또한 일부 값의 경우 수정 사항이 저장되지 않을 수도 있습니다.

  한편, 스크립트 로딩전에 콜백을 잠시 보관하는 코드가 필요합니다. 해당 코드및 설명은 2.1 먼저 해야할것들을 참고해 주시기 바랍니다.

room 구조

  room 인스턴스의 구조는 모든 콜백에서 같습니다. 자세한 사항은 이어지는 챕터(2.3 채팅방 API)에서 확인하시길 바랍니다. room의 구조를 미리 보자면, 아래와 같습니다.

room
이벤트 발생 전

before.create

  유챗 스크립트가 로딩되고 채팅방 서버에 접속하기 전에 이벤트가 발생합니다. 채팅방 서버에 접속하기 전이므로 접속 정보를 수정할 수 있습니다. 채팅방 접속시 수정된 접속정보로 서버와 연결됩니다. 회원 연동 채팅방의 경우, 접속 정보를 수정하면 토큰값 검증에 실패하여 접속시 오류가 발생할 수 있습니다.
상황에 따라서 스킨이 완벽히 로딩되지 않은 시점일 수 있습니다. 기본 스킨, 플러그인등의 로딩이 완료는 after.create에서 보장합니다.

data
이벤트 발생 전

after.create

  스킨, 라이브러리등의 로딩이 끝났을때 발생합니다. 아직 채팅 서버로의 접속이 되기 전입니다. 스킨등의 요소가 로딩이 끝난 상태입니다.

data
이벤트 발생 전

before.join

 채팅방에 접속하기 전에 발생합니다. 채팅방 인스턴스가 생성된 후 (after.create) 채팅 서버에 접속하기 전 (그 사이에) 이벤트가 발생합니다. 서버에 접속하기전에 발생하는 이벤트 입니다.

data
이벤트 발생 전

after.join

  자신이 채팅방에 성공적으로 접속한 후에 발생합니다. 입장 비밀번호가 걸린 채팅방에서는, 비밀번호 인증을 성공적으로 끝나서 채팅방을 이용할 수 있는 상황에서 이벤트가 발생합니다. 채팅 쓰기 권한등이 부족하면 채팅 메세지가 전송되지 않습니다.

  data인자는 수정은 가능하나, 실제 적용되지는 않습니다. data['my']['nick'] 을 수정해봤자 아무런 의미 없습니다.

data
이벤트 발생 전 (data 데이터 구조를 확인하고 싶으시면 페이지 맨 아래에 있는 채팅방에 입장하시면 됩니다.)

before.disconnect

  접속 종료가 처리되기 전에 발생합니다.

  접속 종료 절차는 다음과 같습니다: 종료 시작 -> before.disconnect -> 서버에 종료 명령 -> after.disconnect

  접속 종료전에 이벤트가 꼭 발생한다는 보장은 없습니다. 브라우저 강제 종료등 정상적이지 않게 (not gracefully) 접속이 끊길 경우, 이벤트가 발생하지 않을수 있습니다. (이벤트 발생전 브라우저등이 종료되어 이벤트 발생이 안될 수 있음)

data
이벤트 발생 전 (맨 아래에 있는 채팅방을 접속 종료하시면 data 값을 보실 수 있습니다. - 같은 IP에서 중복 접속, 새 창으로 접속등)

after.disconnect

  접속 종료가 완전히 이루어지고 발생합니다. 

  접속 종료 절차는 다음과 같습니다: 종료 시작 -> before.disconnect -> 서버에 종료 명령 -> after.disconnect

  접속 종료전에 이벤트가 꼭 발생한다는 보장은 없습니다. 브라우저 강제 종료등 정상적이지 않게 (not gracefully) 접속이 끊길 경우, 이벤트가 발생하지 않을수 있습니다. (이벤트 발생전 브라우저등이 종료되어 이벤트 발생이 안될 수 있음)

data
이벤트 발생 전 (맨 아래에 있는 채팅방을 접속 종료하시면 data 값을 보실 수 있습니다. - 같은 IP에서 중복 접속, 새 창으로 접속등)

before.control

  서버에서 유저의 스킨등을 제어할 때 발생합니다. 이 이벤트는 서버가 접속자의 스킨의 옵션을 바꿀때 대표적으로 발생합니다. 서버에서 명령을 받고, 처리하기 전에 이벤트가 발생합니다. 

  이벤트 절차는 다음과 같습니다: 서버에서 명령 수신 -> before.control -> 명령 처리 완료(스킨, 방 인스턴스···) -> after.control

data
이벤트 발생 전

after.control

  서버에서 유저의 스킨등을 제어할 때 발생합니다. 이 이벤트는 서버가 접속자의 스킨의 옵션을 바꿀때 대표적으로 발생합니다. 서버에서 명령을 받고, 처리한 후에 이벤트가 발생합니다.

  이벤트 절차는 다음과 같습니다: 서버에서 명령 수신 -> before.control -> 명령 처리 완료(스킨, 방 인스턴스···) -> after.control

data
이벤트 발생 전

before.message

  서버에서 메세지를 수신하고 처리하기 전에 (보여주기 전에) 이벤트가 발생합니다. 채팅방 접속 직후 나오는 과거 채팅 내용도 이 이벤트를 거칩니다. 본인이 발신한 채팅 메세지 또한 해당 이벤트를 거처서 표시 됩니다.

  이벤트 절차는 다음과 같습니다: 접속자가 채팅 전송(본인 포함) -> 서버 처리 -> 유저가 서버에서 채팅 메세지를 받음 -> before.message -> 채팅 메세지 처리 -> after.message

data
이벤트 발생 전

after.message

  서버에서 메세지를 수신하고 처리를 끝낸 후에 이벤트가 발생합니다. 채팅방 접속 직후 나오는 과거 채팅 내용도 이 이벤트를 거칩니다. 본인이 발신한 채팅 메세지 또한 해당 이벤트를 거처서 표시 됩니다.

  이벤트 절차는 다음과 같습니다: 접속자가 채팅 전송(본인 포함) -> 서버 처리 -> 유저가 서버에서 채팅 메세지를 받음 -> before.message -> 채팅 메세지 처리 -> after.message

data
이벤트 발생 전

before.user.list

  서버에서 접속자 목록를 수신받고, 처리하기 전에 발생합니다. 접속자 목록을 수신 받을때만 이 이벤트가 발생합니다. 접속자 목록은 입·퇴장시 매번 수신되지 않습니다. 접속자 목록이 가려져있다가 열릴때, 또는 100명 이하일때 최초 접속시에만 수신됩니다. 

  접속자 100명 이상의 중·대규모 채팅방이나 <접속자 목록 가리기> 옵션을 사용중인 경우 초기 접속때도 이벤트가 발생하지 않을 수 있습니다. 이 경우, 유저가 접속자 목록을 수동으로 연 경우에만 이벤트가 발생합니다.

data
이벤트 발생 전

after.user.list

 서버에서 접속자 목록를 수신받고, 처리한 후에 발생합니다. 접속자 목록을 수신 받을때만 이 이벤트가 발생합니다. 접속자 목록은 입·퇴장시 매번 수신되지 않습니다. 접속자 목록이 가려져있다가 열릴때, 또는 100명 이하일때 최초 접속시에만 수신됩니다. 

  접속자 100명 이상의 중·대규모 채팅방이나 <접속자 목록 가리기> 옵션을 사용중인 경우 초기 접속때도 이벤트가 발생하지 않을 수 있습니다. 이 경우, 유저가 접속자 목록을 수동으로 연 경우에만 이벤트가 발생합니다.

data
이벤트 발생 전

before.user.join

  채팅방에 다른 유저가 접속했을때 발생합니다. 이벤트 발생 순서는 다음과 같습니다: before.user.join -> 스킨 / 플러그인(api) 처리 -> after.user.join

  본인이 채팅방에 접속했을때는 before.user.join 대신, before.join이 발생합니다.

data
이벤트 발생 전

after.user.join

  채팅방에 유저 접속 처리가 완료된 후에 발생합니다. 이벤트 발생 순서는 다음과 같습니다: before.user.join -> 스킨 / 플러그인(api) 처리 -> after.user.join

  본인이 채팅방에 접속했을때는 after.user.join 대신, after.join이 발생합니다.

data
이벤트 발생 전

before.user.quit

  채팅방에서 다른 유저가 나갔을때 발생합니다. 이벤트 발생 순서는 다음과 같습니다: before.user.quit-> 스킨 / 플러그인(api) 처리 -> after.user.quit

  본인이 채팅방에서 나갔을때는 before.user.quit 대신, before.disconnect이 발생합니다.

data
이벤트 발생 전

after.user.quit

  채팅방에서 다른 유저가 나갔을때 발생합니다. 이벤트 발생 순서는 다음과 같습니다: before.user.quit-> 스킨 / 플러그인(api) 처리 -> after.user.quit

  본인이 채팅방에서 나갔을때는 after.user.quit 대신, after.disconnect이 발생합니다.

data
이벤트 발생 전

before.user.count

  채팅방의 접속자 수가 바뀔때 발생합니다. 이 이벤트는 채팅방 접속자 목록 보기가 꺼져있을때만 수신됩니다. 채팅방 접속자 목록이 열려있는 경우, 직접 목록의 길이를 구하셔야 합니다.

data
이벤트 발생 전

after.user.count

  채팅방의 접속자 수가 바뀌고, 관련 처리가 완료되었을때 발생합니다. 이 이벤트는 채팅방 접속자 목록 보기가 꺼져있을때만 수신됩니다. 채팅방 접속자 목록이 열려있는 경우, 직접 목록의 길이를 구하셔야 합니다.

data
이벤트 발생 전

before.whisper

  귓속말을 보내거나, 수신할 때 발생합니다.

  귓속말을 수신하는 경우, 서버에서 귓속말을 받자마자 해당 이벤트가 발생합니다. 귓속말을 발신하는 경우, 메세지를 서버로 보내기 직전에 발생합니다. 해당 이벤트 처리가 완료되면 비로소 서버로 귓말을 전송합니다.

data
이벤트 발생 전

after.whisper

  귓속말을 보냈거나, 수신했을 때 발생합니다. 스킨 및 API에서 처리를 다 하고 발생합니다.

data
이벤트 발생 전

before.error

  채팅방에서 에러가 발생한 직후에 이벤트가 발생합니다. 해당 이벤트는 에러 발생후 스킨이 처리하기 전에 발생합니다.

data
이벤트 발생 전

after.error

  채팅방에서 에러가 발생한 후에 스킨 및 플러그인이 처리를 다 끝냈을때 발생합니다.

data
이벤트 발생 전

before.system

  시스템 메세지를 출력하기 전에 발생합니다. 시스템 메세지는 플러그인에서 발생될 수도 있고, 채팅방에서 발생될 수도 있습니다. 시스템에서 발생하는 메세지는 room.language.system에서 확인하실 수 있습니다.

data
이벤트 발생 전

after.system

  시스템 메세지를 출력한 후에 발생합니다.

  해당 이벤트는 기존의 채팅방 접속자가 가지고 있는 권한이 바뀌었을때 발생합니다. 접속할 때의 권한은 user.modi 이벤트 대신, before.user.join, after.user.join 에서 확인하셔야 합니다.

data
이벤트 발생 전

before.user.modi

  채팅방 접속자의 권한이 변경될 때 발생합니다.

  해당 이벤트는 기존의 채팅방 접속자가 가지고 있는 권한이 바뀌었을때 발생합니다. 접속할 때의 권한은 user.modi 이벤트 대신, before.user.join, after.user.join 에서 확인하셔야 합니다.

auth 코드 설명
0 손님 권한을 뜻합니다.
1 일반 접속자 (회원)을 뜻합니다.
2 부 관리자(은색 왕관) 권한을 뜻합니다.
3 관리자 권한(금색 왕관) 권한을 뜻합니다.
data
이벤트 발생 전

after.user.modi

  채팅방 접속자의 권한이 변경되었을때 발생합니다.

data
이벤트 발생 전

before.send

  채팅 메세지를 전송하기 전에 발생합니다. 발생 순서는 다음과 같습니다: 채팅 메세지 입력후 엔터 -> before.send -> 서버로 전송 -> after.send -> 서버에서 수신 -> before.message -> 채팅 메세지 처리 -> after.message

  before.send, after.send는 채팅 서버로 메세지를 전송할 때의 이벤트입니다. 채팅 메세지의 처리 여부는 before.error, after.error, before.message, after.message 에서 확인하셔야 합니다.

data
이벤트 발생 전

after.send

  채팅 메세지를 전송한 후에 발생합니다. 발생 순서는 다음과 같습니다: 채팅 메세지 입력후 엔터 -> before.send -> 서버로 전송 -> after.send -> 서버에서 수신 -> before.message -> 채팅 메세지 처리 -> after.message

  after.send는 서버로 메세지를 발신했다는것 밖에 보장하지 않습니다. 채팅 권한상의 문제등으로 서버에서 메세지 처리를 거부할 수도 있습니다. 메세지 발신 및 서버 처리가 정상적으로 되었는지 확인하기 위해서는 before.message, after.message, before.error 또는 after.error 등을 사용하셔야 합니다.

data
이벤트 발생 전

before.command

  사용자가 명령어를 실행한 직후에 발생합니다. 플러그인에서는 before.command 등을 이용해서 직접 명령어를 파싱할 팔요는 없습니다. 채팅방 또는, 플러그인에서 처리될, 처리된 명령어를 보고 싶을떄 사용 할 수 있는 이벤트 입니다. 

  data는 띄어쓰기 기준으로 나뉘어진 값입니다. 예를들어 /ban 1234 5678 명령어를 사용했을때, type에는 ban이, data에는 ["1234", "5678"]이 들어갑니다.

data
이벤트 발생 전

after.command

  사용자가 명령어를 입력하고 스킨등에서 처리 된 후에 이벤트가 발생합니다.

data
이벤트 발생 전

before.plugin

플러그인 통신 프로토콜을 통해 데이터가 수신되면 발생합니다.

data
이벤트 발생 전

after.plugin

플러그인 통신 프로토콜을 통해 데이터가 수신되고, receiver를 통해 적절히 처리 된 후에 발생합니다.

data
이벤트 발생 전

테스트용 채팅방

아래 채팅방은 API 테스트용으로 제공되는 채팅방입니다. 접속 비밀번호는 1234입니다.