-
Notifications
You must be signed in to change notification settings - Fork 5
Socket 명세
강성준 edited this page Nov 30, 2022
·
8 revisions
-
ws://localhost:3333
- 아마도 https 환경에서는
wss://localhost:3333
로 변경될 예정
-
header
에 다음 필드 필수.
{ // headers authorization : {cookie.accessToken} room : {URL에서 갖고온 현재 채널명(‘town’ || userId)} }
- 성공시
userInitiated
이벤트 발생 - 접속 한 유저 - 현재 접속 중인 모든 유저들 정보 불러오기
[ // 현재 접속중인 모든 유저 정보 (자신 포함) { "id": "IZI_1Wzwhqblu0A4KA_TCrtkl4mM55Qstc_FDKMv_sY", "social": "naver", "nickname": "연어초밥", "characterName": "nohair", "iat": 1669789117, "exp": 1669875517, "x": -25, "y": 400, "direction": "right", "state": "wait", "roomName": "town" }, { "id": "Z-NVwpPpbw7oOjHEn-CYEZ8V9nU3P9IIChz_9PuuVak", "social": "naver", "nickname": "stouter", "characterName": "longhair", "iat": 1669782828, "exp": 1669869228, "x": -25, "y": 400, "direction": "right", "state": "wait", "roomName": "town" } ]
-
userCreated
이벤트 발생 - 내가 이미 접속한 상태에서 새로 접속한 유저 정보 불러오기
// 방금 들어온 유저 정보 { "id": "IZI_1Wzwhqblu0A4KA_TCrtkl4mM55Qstc_FDKMv_sY", "social": "naver", "nickname": "연어초밥", "characterName": "nohair", "iat": 1669789117, "exp": 1669875517, "x": -25, "y": 400, "direction": "right", "state": "wait", "roomName": "town" },
- 아마도 https 환경에서는
-
다른 유저 접속 해제 시, 접속 중인 모든 유저에게
userLeaved
로 유저 정보 전달- 없음
- 성공시
userLeaved
이벤트 발생 - 접속 중인 모든 유저에게 전달
{ // 방금 나간 유저 정보 "id": "IZI_1Wzwhqblu0A4KA_TCrtkl4mM55Qstc_FDKMv_sY", "social": "naver", "nickname": "연어초밥", "characterName": "nohair", "iat": 1669789117, "exp": 1669875517, "x": -25, "y": 400, "direction": "right", "state": "wait", "roomName": "town" }
-
move
이벤트를 통해 서버에 움직임 전달.- 다음 4가지 데이터 담아서
move
이벤트 emit.
{ x: number; y: number; direction: string; state: string; }
- 가능한 direction 및 state 범위 (all 소문자 권장)
export enum directionOptions { LEFT = 'left', RIGHT = 'right', } export enum stateOptions { WAIT = 'wait', RUN = 'run', WALK = 'walk', ROLL = 'roll', JUMP = 'jump', }
- 성공시
move
이벤트로 채널 내 broadcast.
{ // 해당 유저의 바뀐 위치를 포함한 유저 정보 전달 "id": "Z-NVwpPpbw7oOjHEn-CYEZ8V9nU3P9IIChz_9PuuVak", "social": "naver", "nickname": "stouter", "characterName": "longhair", "iat": 1669782828, "exp": 1669869228, "x": -25, "y": 400, "direction": "right", "state": "wait", "roomName": "town" }
- 다음 4가지 데이터 담아서
-
publicChat
이벤트를 통해 서버에 전체 채팅 전달. -
휘발성 채팅.
-
message
필드를 채워서publicChat
이벤트 emit.
{ message: "보낼 전체 채팅 내용" }
- 성공시
publicChat
이벤트로 채널 내 broadcast. - 해당 유저의 id, 닉네임, 보낸 시간, 메시지 내용 전달
{ // 해당 유저 id, 닉네임, 보낸 시간, message를 전달 "fromUserId": "IZI_1Wzwhqblu0A4KA_TCrtkl4mM55Qstc_FDKMv_sY", "nickname": "연어초밥", "timestamp": 1669819694425, "message": "" }
-
-
1:1 채팅방 입장 시.
chatRoomEntered
이벤트로 서버에 전달 -
채팅 보내기 전, 채팅 방 생성을 위한 이벤트
-
메시지를 수신, 발신하지 않더라도 채팅방이 내부적으로 생성되어야해서
- 상대방의 userId와 함께
chatRoomEntered
이벤트 emit.
{ targetUserId: "싱대방 userId" }
- 응답 없음.
- 채팅 방이 내부적으로 생성
- 상대방의 userId와 함께
-
1:1 채팅방 떠날 시.
chatRoomLeaved
이벤트로 서버에 전달. -
읽은 메시지 마킹 최신화를 위한 이벤트
- 상대방의 userId와 함께
chatRoomLeaved
이벤트 emit.
{ targetUserId: "싱대방 userId" }
- 응답 없음
- 채팅방을 떠난 후, 채팅방 목록을 다시 불러와야 메시지 읽음 부분이 해결됨으로 로직 순서를 다음과 같이 강제해주세요.
-
chatRoomLeaved
발생 후, - chat/roomList 불러오기 (
API
)
-
- 상대방의 userId와 함께
-
1:1 채팅 전송 시,
privateChat
이벤트로 서버에 전달- 상대방의 userId, message내용과 함께
privateChat
이벤트 emit.
{ targetUserId: "싱대방 userId", message: "메시지 내용" }
- 상대방의 메시지 내용이 전달됩니다.
{ // 해당 유저의 id, 닉네임, 메시지 보낸 시간, 메시지 내용 전달 "fromUserId": "IZI_1Wzwhqblu0A4KA_TCrtkl4mM55Qstc_FDKMv_sY", "nickname": "연어초밥", "timestamp": 1669820748590, "message": "개인 메시지 입니다.." }
- 상대방의 userId, message내용과 함께