<알아둘 것>

  1. 판넬소켓 연결 주소 : ws://j8d2101.p.ssafy.io:8080/panelSocket

    (판넬뒤집기 산책을 시작할 때 연결하시면 됩니다)

    보물소켓 연결 주소 : ws://j8d2101.p.ssafy.io:8080/treasureSocket

    (얘도 보물찾는 산책을 시작할 때 연결하시면 되요!)

  2. 보내는 값 : (String) json을 Stringify해서 보내주세요!

    1. 가장 큰 param은
      1. event : (String) 이벤트 코드를 주세요
      2. data : 데이터를 제이슨형식의 파일을 스트링으로변환해서 주세요
  3. 받는 값 : (String) json을 Stringify해서 보내줘요!

    1. 가장 큰 param은
      1. code : 받는 코드에요 (String)
      2. value : 받는 값이에요 (String이 된 json)
  4. 보내는 값의 형식

    <보낼값>
    {
    	event: 이벤트 코드를 적어주세요
    	data: {
    		보낼 데이터를 json형식으로 담아 주세요
    	}
    }
    
    <예시>
    JSON.stringify({
        event: "access",
        data: {
            challengeId: 1,
            loginId: "[email protected]"
        }
    }
    
  5. 받는 값의 형식

    <받는사람>
    1. 자기 자신일 수도 있고
    2. 같은 방에 사람일 수 있음
    
    <받을값>
    {
    	code: 이벤트 코드를 적어주세요
    	value: {
    		받을 데이터가 json형식으로 담겨져 와요
    	}
    }
    
    <예시>
    JSON.stringify({
        code: "access",
        value: {
            challengeId: 1,
            loginId: "[email protected]"
        }
    }
    

<판넬 뒤집기>

  1. 산책시작하기

    1. 산책을 시작한 사람이 보낼 값

      JSON.stringify({
          event: "access",
          data: {
              challengeId: 1,
              loginId: "[email protected]"
          }
      })
      
    2. 받을 값

      <받는 사람>
      나 자신
      
      {
      	code : "access"
      	value : { 
      		mapInfo : (200) [Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), Array(200), …]
      		rankInfo : [
      			{
      				panelCount : 0
      				teamId : 1
      				teamRank : 1 // 판넬 카운트가 같으면 같은 랭킹이에요
      												(예시) 1등(3개) 1등(3개) 3등(2개)
      			},
      			{
      				panelCount : 0
      				teamId : 2
      				teamRank : 1
      			}
      		]
      	}
      }
      
  2. 누군가가 판넬을 뒤집음

    1. 판넬 뒤집은 사람이 보낼 값

      JSON.stringify({
          event: "signaling",
          data: {
              lat: 36.0001,
              lng: 127.0001,
              challengeId: 1,
              loginId: "[email protected]"
          }
      })
      
    2. 받을 값

      <받는 사람>
      같은 방에 있는 모두
      
      <받는 값> 스트링화 된 json이 와요
      {
      	code:"signaling"
      	value: {
      		indexC: 100
      		indexR: 99,
      		rankInfo: [
      			loginId: [email protected]
      			name: 잉동하
      			profile: 사진주소
      			teamRank: 1
      			indiRank: 1 //개인전 : teamRank == indiRank  ,  팀전 : teamRank = 1 or 2  ,  indiRank 개인 등수
      			teamId: 1
      			point: 1
      		]
      		teamId: 1
      		teamDraw: false
      	[}
      }](<https://tame-soarer-696.notion.site/Api-315f4c7e86c94cda9cfe7082cb0c5969>)
      
  3. 게임 중 정보 불러오기<deprecated>

    1. 정보를 보고 싶은 사람이 보낼 값

      JSON.stringify({
          event: "signaling",
          data: {
              lat: 36.0001,
              lng: 127.0001,
              challengeId: 1,
              loginId: "[email protected]"
          }
      })
      
    2. 받을 값

      <받는 사람>
      자기 자신
      
      <받는 값> 스트링화 된 json이 와요
      {
      	code: "getInfo"
      	value: {
      		endDate: "2023-03-29"
      		entryFee: 10
      		gameType: 1
      		rankInfo: [
      			{
      				teamId: 1, 
      				teamRank: 1, 
      				panelCount: 1
      			},
      			{
      				teamId: 2,
      				teamRank: 2,
      				panelCount: 0
      			}
      		]
      		startDate: "2023-03-27"
      	}
      }
      

<보물 찾기>

  1. 산책을 시작해요

    1. 산책을 시작할 때 보내면 되는 값

      JSON.stringify({
          event: "access",
          data: {
              challengeId: 1
          }
      })
      
    2. 받을 값

      <받는사람>
      자기자신
      
      <받는 값>
      {
      		code: "access",
      		value: {
      				rankInfo: [
      						{
      								teamid: 1,
      								point: 0,
      								teamRank: 1,
      								loginId: "[email protected]"
      						},
      						{
      								teamid: 2,
      								point: 0,
      								teamRank: 1,
      								loginId: "[email protected]"
      						}
      						...
      				],
      				treasureInfo: [
      						{
      								idx: 0,
      								lat: 35.99943659009007, 
      								lng: 127.00500359933517,
      								point: -1, // 포인트는 -10 ~ 20사이 랜덤값이에요
      								isOpened: false, // 누군가가 연 보물인지를 나타내요
      								inPocket: false, // 누군가가 산책중인 현재 보물을 주웠는지를 나타내요
      								// 보물상자가 오픈되지 않고 누군가가 산책중에 줍지 않은 경우만 다른사람이 주울 수 있어요
      								type: true // 타입이 true면 보물이고 false면 폭탄이에요
      						},
      						{
      								idx: 1,
      								lat: 35.99943659009007, 
      								lng: 127.00500359933517,
      								point: null, // type의 value가 false면 point는 null이에요
      								isOpened: false,
      								inPocket: false,
      								type: false // 타입이 true면 보물이고 false면 폭탄이에요
      						},
      						...
      				]
      		}
      }
      
  2. 누군가가 보물을 주웠어요

    1. 보물을 주은 사람이 보낼 값

      JSON.stringify({
      	  event: "signaling",
          data: {
      				challengeId: 1,
              treasureIdx: 1 // 산책을 시작하면 받는 값의 보물 배열에는 idx가 있어요
      				// loginId는 안줘도 되요. 이 이벤트는 해당 챌린지의 보물이 다른 누군가에 의해 주워 졌으므로 더이상 주울 수 없음을 다른 사람들에게 알리기 위함입니다.
      				// 클라이언트가 주운 보물 정보는 프론트에서 관리하고 있다가 후에 산책이 종료되고 획득할 보물을 유저가 결정한 후에 socket이 아닌 http request를 통해 알려주세요
          }
      })
      
    2. 받을 값

      <받는사람>
      같은 방의 모든 사람
      
      <받는 값>
      {
      		code: "signaling",
      		value: {
      				treasureInfo: [
      						{
      								idx: 0,
      								inPocket: false,
      								isOpened: false,
      								lat: 36.00007670365224,
      								lng: 127.00106009405691,
      								point: 1,
      								type: true,
      						},
      						{
      								idx: 1,
      								inPocket: false,
      								isOpened: false,
      								lat: 36.00007670365224,
      								lng: 127.00106009405691,
      								point: 1,
      								type: true,
      						},
      						...
      				]
      		}
      }
      
  3. 획득할 보물 선택을 완료했어요

    1. 보물 선택을 완료한 클라이언트가 보낼 값

      conn.send(JSON.stringify({
          event: "selecting",
          data: {
              selectList: [1,2,3], // 선택한 보물을 모두 모아서 한번에 보내주세요
              loginId: "[email protected]",
              challengeId: 12
          }
      })
      
    2. 받을 값

      <받는사람>
      같은 방의 모든 사람
      
      <받는 값>
      {
      		code: "selecting",
      		value: {
      				treasureInfo: [
      						{
      								idx: 0,
      								inPocket: false,
      								isOpened: false,
      								lat: 36.00007670365224,
      								lng: 127.00106009405691,
      								point: 1,
      								type: true,
      						},
      						{
      								idx: 1,
      								inPocket: false,
      								isOpened: false,
      								lat: 36.00007670365224,
      								lng: 127.00106009405691,
      								point: 1,
      								type: true,
      						},
      						...
      				],
      				rankInfo: [
      						{
      								teamid: 1,
      								point: 15,
      								teamRank: 1,
      								loginId: "[email protected]"
      						},
      						{
      								teamid: 2,
      								point: 0,
      								teamRank: 2,
      								loginId: "[email protected]"
      						}
      						...
      				]
      		}
      }