Skip to content

SongSongPaPa/back

Repository files navigation

Nest Logo

A progressive Node.js framework for building efficient and scalable server-side applications.

NPM Version Package License NPM Downloads CircleCI Coverage Discord Backers on Open Collective Sponsors on Open Collective Support us

Description

Nest framework TypeScript starter repository.

Installation

$ yarn install

Running the app

# development
$ yarn run start

# watch mode
$ yarn run start:dev

# production mode
$ yarn run start:prod

Test

# unit tests
$ yarn run test

# e2e tests
$ yarn run test:e2e

# test coverage
$ yarn run test:cov

Support

Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please read more here.

Stay in touch

License

Nest is MIT licensed.

handleConnection


handleConnection

request

// {
//   "access_token": "발급받은토큰"
// }

response

{

}

handleDisconnect

request

response

Chat

BroadCast


createChat

request

socket.on('createChatss', chat);

chat : {
  "name": "이름",
  "type": string ("public | private | protected" 셋 중 하나),
  "password" : string  (nullable)
}

response_me

socket.emit('single:chat:joinChat', data);
data: {
  "public": {
    "chatId" : number,
    "ownerId" : number,
    "adminId" : number,
    "type" : string ("public | private | protected"   하나),
    "name" : string
  },
  "private" : {
    "room" : string,
    "password" : '' (nullable),
    "users" : <int>[],
    "kicked" : [
      {
        "userId": number,
        "expiredAt": number
      }
    ],
    "muted" : [
      {
        "userId": number,
        "expiredAt": number
      }
    ],
  }
};

response_other

socket.emit('broad:chat:joinChat', data);
data: {
  "public": {
    "chatId" : number,
    "ownerId" : number,
    "adminId" : number,
    "type" : "public | private | protected",
    "name" : string
  },
  "private" : {
    "room" : string,
    "password" : '' (nullable),
    "users" : <int>[],
    "kicked" : [
      {
        "userId": number,
        "expiredAt": number
      }
    ],
    "muted" : [
      {
        "userId": number,
        "expiredAt": number
      }
    ],
  }
};

updateChat

request

socket.on('updateChat', chat);
chat : {
  "name": "이름",
  "type": "public | private | protected",
  "password" : " "  (nullable)
}

response

socket.emit('broadcast:chat:updateChat', data);
data: {
  "chatId" : number,
  "ownerId" : number,
  "adminId" : number,
  "type" : "public | private | protected",
  "name" : string
};

setAdmin

request

socket.on('setAdmin', data);
data : {
  "userId": number
}

response

socket.emit('broadcast:chat:setAdmin', data);
data: {
  "chatId": number,
  "adminId": number,
};

Group


joinChat

request

socket.on('joinChat', chat);
chat : {
  "chatId": number,
  "password" : string  (nullable)
}

response_me

socket.emit('single:chat:joinChat', data);
data: {
  "public": {
    "chatId" : number,
    "ownerId" : number,
    "adminId" : number,
    "type" : "public | private | protected",
    "name" : string
  },
  "private" : {
    "room" : string,
    "password" : '' (nullable),
    "users" : <int>[],
    "kicked" : [
      {
        "userId": number,
        "expiredAt": number
      }
    ],
    "muted" : [
      {
        "userId": number,
        "expiredAt": number
      }
    ],
  }
};

response_other

socket.emit('group:chat:joinChat', data);
data : {
  "userId": number
}

leaveChat

request

socket.on('setleaveChatAdmin');

response -> request를 했다면 꼭 받는 것

socket.emit('single:chat:leaveChat');
// 채팅방 나가기를 했다고 클라이언트에서 바로 나가기 처리하지말고,
// 이 리스폰스를 받아야 방을 나갈 수 있게 구현합시다
// ex, irc 논블로킹

//아래는 상황에 따라 추가로 받는 이벤트

response -> 내가 마지막으로 나간 사람일 경우

socket.emit('broadcast:chat:deleteChat', data);
data: {
  "chatId": number
};

response -> 나간 사람이 admin이나 owner일경우

socket.emit('broadcast:chat:setAdmin', data);
data: {
  "chatId": client.chat.id,
  "ownerId": chatState.ownerId, (undifinedable)
  "adminId": chatState.adminId  (undifinedable)
};

response -> 누가 나갔는지 알려주는 이벤트

socket.emit('group:chat:leaveChat', data);
data: {
  "chatId": number
};

sendMessage

request

socket.on('sendMessage', data);
data: {
  "message" : string
}

response

socket.emit('group:chat:sendMessage', data);
data: {
  "sourceId": number (보낸사람),
  "message": string,
  "direct": false,
};

kickUser

request

socket.on('kickUser', data);
data : {
  "userId": number
}

response

socket.emit('group:chat:kickUser', data);
data : {
  "userId": number
}

muteUser

request

socket.on('muteUser', data);
data : {
  "userId": number
}

response

socket.emit('group:chat:muteUser', data);
data : {
  "userId": number
}

Single


muteUser

request

socket.on('sendDirectMessage', data);
data : {
  "userId" : number,
  "message" : string
}

response

socket.emit('single:chat:sendMessage', data);
data: {
  "sourceId": number (보낸사람),
  "message": string,
  "direct": false,
};

inviteUser

request

socket.on('sendDirectMessage', data);
data: {
  "userId" : number
}

response

socket.emit('single:chat:inviteUser', data);
data: {
  "chatId":number,
  "sourceId": number
};


User

Broadcast


updateDisplayName

request

socket.on('updateDisplayName', data);
data: {
  "name" : string
}

response

socket.emit('broadcast:user:updateDisplayName', data);
data: {
  "userId": number,
  "name": string,
};

updateImage

request

socket.on('updateImage', data);
data: {
  "userId" : number,
  "mimeType": string
}

response

socket.emit('broadcast:user:updateImage', data);
data: {
  "userId": number,
  "imageUrl": string,
};

##Single

followUser

request

socket.on('followUser', data);
data : {
  "userId" : number
}

response

socket.emit('single:user:followUser', data);
data: {
  "userId": number
};

unFollowUser

request

socket.on('unFollowUser', data);
data : {
  "userId" : number
}

response

socket.emit('single:user:unFollowUser', data);
data: {
  "userId": number
};

blockUser

request

socket.on('blockUser', data);
data : {
  "userId" : number
}

response

socket.emit('single:user:blockUser', data);
data: {
  "userId": number
};

Game

Broadcase



createGame

request

socket.on('createGame', data);
data : {
  "speed" : number
}

response - 모두에게 알리는 메세지

socket.emit('broadcast:game:createGame', data);
data: {
  "gameId": number;
  "ownerId": number;
  "name": string;
  "speed": number;
};

response - 게임을 만든 사람한테 알리는 메세지 ( 게임만든 사람은 2개를 받는것임 )

socket.emit('single:game:createGame', data);
data: {
  //GameSession
  "public": {
    "gameId": number,
    "ownerId": number,
    "name": string,
    "speed": number
  },
  "private": {
    "room": string,
    "players": [ // 총 2개 길이의 배열이 날라감
      {//GamePlayerDto
        "userId": number,
        "score": number = 0,
        "position": number[]
      },
      {
        "userId": number,
        "score": number = 0,
        "position": number[]
      }
    ],
    "watcher": int[],
    "ball": {
      //GameBallDto
      "speed": number,
      "position": number,
      "deltaX": number,
      "deltaY": number
    },
    "totalScore": number,
    "round": number,
    "pause": boolean,
    "onGame": boolean,
    "onRound": boolean,
    "gameInterval": boolean, //무시하셈
    "roundInterval": boolean, //무시하셈
  }
};

Game

Group



joinGame

request

socket.on('joinGame', data);
data : {
  "gameId" : number
}

response - 방에 이미 접속중인 사람이 보는 메세지

socket.emit('group:game:joinGame', data);
data: { //GamePlayerDto
  "userId": number;
  "score": number = 0;
  "position": number[];
};

response - 방에 접속하려는 사람이 보는 메세지

socket.emit('single:game:joinGame', data);
data: {
  //GameSession
  "public": {
    "gameId": number,
    "ownerId": number,
    "name": string,
    "speed": number
  },
  "private": {
    "room": string,
    "players": [ // 총 2개 길이의 배열이 날라감
      {//GamePlayerDto
        "userId": number,
        "score": number = 0,
        "position": number[]
      },
      {
        "userId": number,
        "score": number = 0,
        "position": number[]
      }
    ],
    "watcher": int[],
    "ball": {
      //GameBallDto
      "speed": number,
      "position": number,
      "deltaX": number,
      "deltaY": number
    },
    "totalScore": number,
    "round": number,
    "pause": boolean,
    "onGame": boolean,
    "onRound": boolean,
    "gameInterval": boolean, //무시하셈
    "roundInterval": boolean, //무시하셈
  }
};

watchGame

request

socket.on('watchGame', data);
data : {
  "gameId" : number
}

response - 방에 이미 접속중인 사람이 보는 메세지

socket.emit('group:game:watchGame', data);
data: {
  "userId": number;
};

response - 방에 접속하려는 사람이 보는 메세지

socket.emit('single:game:watchGame', data);
data: {
  //GameSession
  "public": {
    "gameId": number,
    "ownerId": number,
    "name": string,
    "speed": number
  },
  "private": {
    "room": string,
    "players": [ // 총 2개 길이의 배열이 날라감
      {//GamePlayerDto
        "userId": number,
        "score": number = 0,
        "position": number[]
      },
      {
        "userId": number,
        "score": number = 0,
        "position": number[]
      }
    ],
    "watcher": int[],
    "ball": {
      //GameBallDto
      "speed": number,
      "position": number,
      "deltaX": number,
      "deltaY": number
    },
    "totalScore": number,
    "round": number,
    "pause": boolean,
    "onGame": boolean,
    "onRound": boolean,
    "gameInterval": boolean, //무시하셈
    "roundInterval": boolean, //무시하셈
  }
};

leaveGame

request

socket.on('leaveGame', data);
data : {
  "gameId" : number
}

response - 나가는 사람이 방의 오너면 -> 방에 접속하지 않은 사람이 보는 메세지

socket.emit('broadcast:game:deleteGame', data);
data: {
  "gameId": number;
};

response - 나가는 사람이 방의 오너면 -> 방에 접속한 사람이 보는 메세지

socket.emit('group:game:deleteGame', data);
data: {
  "gameId": number;
};

response - 나가는 사람이 방의 오너가 아니면 -> 방에 있는 사람들이 (나포함)

socket.emit('group:game:leaveGame', data);
data: {
  "userId": number;
};

startGame

request

socket.on('startGame');

response - 방에 있는 사람들에게

socket.emit('group:game:startGame');

response - 게임이 끝났을때

socket.emit('group:game:endGame', data);
data:{
  "winner" :{
    //GamePlayerDto
    "userId": number,
    "score": number,
    "position": number[]
  },
  "looser" :{
    //GamePlayerDto
    "userId": number,
    "score": number,
    "position": number[]
  },
}

movePaddle

request

socket.on('movePaddle', data);
data = {
  "keyCode" : number
}

response - 방에 있는 사람들에게

socket.emit('group:game:movePaddle', data);
data= {
  "userId": number,
  "position": number[]
}

Game

Single


About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages