Skip to content

Commit

Permalink
feat : join validation
Browse files Browse the repository at this point in the history
  • Loading branch information
flowersayo committed May 8, 2023
1 parent 810e43c commit 8388148
Show file tree
Hide file tree
Showing 4 changed files with 141 additions and 112 deletions.
58 changes: 32 additions & 26 deletions client/src/pages/LandingPage.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,9 @@ function LoginBox() {
var navigate = useNavigate();
const mode = useContext(LanguageContext);
const [createWebSocketConnection, ready, ws] = useContext(WebsocketContext); //전역 소켓 사용
const [isLoading, setIsLoading] = useState(false); // 버튼 클릭 후 처리 중인지

const _joinGame = () => {
const _joinGame = async () => {
if (name === "") {
alert(Language[mode].name_blank);
return;
Expand All @@ -60,35 +61,39 @@ function LoginBox() {
return;
}

var body = {
grant_type: "",
username: "rpsbro",
password: "rpsDance",
scope: "",
client_id: "",
client_secret: "",
};
if (!isLoading) {
setIsLoading(true);
console.log("요청!");
var body = {
grant_type: "",
username: "rpsbro",
password: "rpsDance",

This comment has been minimized.

Copy link
@salt26

salt26 May 8, 2023

Owner

패스워드를 이렇게 GitHub에 공개하시면 패스워드를 바꿔야 해용...
이건 환경 변수를 이용하게 하면 어떨까??

This comment has been minimized.

Copy link
@flowersayo

flowersayo May 8, 2023

Author Collaborator

앗... 그렇네용 좋아좋아!!

scope: "",
client_id: "",
client_secret: "",
};

axios
.post(
`${BASE_SERVER_URL}/token`,
/*json을 queryString 타입의 text로 변환*/
qs.stringify(body),
{
headers: {
"Content-Type": "application/x-www-form-urlencoded",
Accept: "application/json",
},
}
)
.then(function (response) {
try {
/*비동기 요청*/
const response = await axios.post(
`${BASE_SERVER_URL}/token`,
qs.stringify(body),
{
headers: {
"Content-Type": "application/x-www-form-urlencoded",
Accept: "application/json",
},
}
);
console.log(response);
localStorage.setItem("access_token", response.data.access_token);
createWebSocketConnection(name); // Socket Connection 생성
})
.catch(function (error) {

await createWebSocketConnection(name, setIsLoading); // Socket Connection 생성
} catch (error) {
console.log(error);
});
} finally {
}
}
};
return (
<BgBox width="250px" height="300px" color="white">
Expand Down Expand Up @@ -130,6 +135,7 @@ function LoginBox() {
height="40px"
text={Language[mode].join}
onClick={_joinGame}
disabled={isLoading}
/>
</Col>
</BgBox>
Expand Down
60 changes: 33 additions & 27 deletions client/src/pages/MobileLandingScreen.js
Original file line number Diff line number Diff line change
Expand Up @@ -115,8 +115,9 @@ function LoginBox() {
var navigate = useNavigate();
const mode = useContext(LanguageContext);
const [createWebSocketConnection, ready, ws] = useContext(WebsocketContext); //전역 소켓 사용
const [isLoading, setIsLoading] = useState(false); // 버튼 클릭 후 처리 중인지

const _joinGame = () => {
const _joinGame = async () => {
if (name === "") {
alert(Language[mode].name_blank);
return;
Expand All @@ -125,35 +126,40 @@ function LoginBox() {
alert(Language[mode].name_long);
return;
}
var body = {
grant_type: "",
username: "rpsbro",
password: "rpsDance",
scope: "",
client_id: "",
client_secret: "",
};

axios
.post(
`${BASE_SERVER_URL}/token`,
/*json을 queryString 타입의 text로 변환*/
qs.stringify(body),
{
headers: {
"Content-Type": "application/x-www-form-urlencoded",
Accept: "application/json",
},
}
)
.then(function (response) {
if (!isLoading) {
setIsLoading(true);
console.log("요청!");
var body = {
grant_type: "",
username: "rpsbro",
password: "rpsDance",

This comment has been minimized.

Copy link
@salt26

salt26 May 8, 2023

Owner

여기도 마찬가지!

scope: "",
client_id: "",
client_secret: "",
};

try {
/*비동기 요청*/
const response = await axios.post(
`${BASE_SERVER_URL}/token`,
qs.stringify(body),
{
headers: {
"Content-Type": "application/x-www-form-urlencoded",
Accept: "application/json",
},
}
);
console.log(response);
localStorage.setItem("access_token", response.data.access_token);
createWebSocketConnection(name); // Socket Connection 생성
})
.catch(function (error) {

await createWebSocketConnection(name, setIsLoading); // Socket Connection 생성
} catch (error) {
console.log(error);
});
} finally {
setIsLoading(false);
}
}
};
return (
<BgBox width="80%" height="30vh" color="white">
Expand Down
1 change: 0 additions & 1 deletion client/src/pages/RoomListPage.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ function RoomListPage() {
};
ws.send(JSON.stringify(request));
console.log(request);
navigate("/");
}
};
useEffect(
Expand Down
134 changes: 76 additions & 58 deletions client/src/utils/WebSocketProvider.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { Language } from "../db/Language";
import { LanguageContext } from "./LanguageProvider";
import { useContext } from "react";
import { BASE_WEBSOCKET_URL } from "../Config";

export const WebsocketContext = createContext([
() => {},
false,
Expand All @@ -29,64 +30,81 @@ export const WebsocketProvider = ({ children }) => {
const ws = useRef(null);
// 웹소켓 연결

function createWebSocketConnection(name) {
const token = localStorage.getItem("access_token");

console.log(token);
const socket = new WebSocket(
`${BASE_WEBSOCKET_URL}/signin?name=${name}&token=${token}`
);

socket.onopen = (event) => {
console.log("Socket open", event);
setIsReady(true);
};

socket.onclose = (event) => {
console.log("onclose!", event);

// 방목록에서 <- 버튼 눌렀을때는 제외하구

alert(Language[mode].reconnection_request);
setIsReady(false);
navigate("/");
};

socket.onmessage = function (event) {
const res = JSON.parse(event.data);
// 전달된 json string을 object로 변환
console.log("onmessage", res.type, res);
console.log(res);
if (res?.response === "error") {
alert(res.message);
return;
}

switch (res?.type) {
case "profile_and_room_list":
const { data } = res;

setUserName(data.name);

setUserId(data.person_id);
setIsLogin(true);
navigate(`/rooms`, { state: data.rooms });
break;
case "recon_data": //재접속시
setUserName(res.data.name);

setUserId(res.data.person_id);
// 재접속 분기
if (res.response === "reconnected_game") {
navigate(`/rooms/${res.data.room.id}/game`, { state: res.data });
}

if (res.response === "reconnected_result") {
navigate(`/rooms/${res.data.room.id}/result`, { state: res.data });
}
}
};
ws.current = socket;
function createWebSocketConnection(name, setIsLoading) {
return new Promise((resolve, reject) => {
const token = localStorage.getItem("access_token");

console.log(token);

const socket = new WebSocket(
`${BASE_WEBSOCKET_URL}/signin?name=${name}&token=${token}`
);

socket.onopen = (event) => {
console.log("Socket open", event);
setIsReady(true);
resolve(socket);
};

socket.onclose = (event) => {
console.log("onclose!", event);
const currentPath = window.location.href.replace(
window.location.origin,
""
);
console.log("경로명", currentPath);
// 방목록에서 <- 버튼 눌렀을때는 제외하구

if (currentPath === "/rooms") {
navigate("/");
return;
}

alert(Language[mode].reconnection_request);
setIsReady(false);
navigate("/");
reject();
};

socket.onmessage = function (event) {
const res = JSON.parse(event.data);
// 전달된 json string을 object로 변환
console.log("onmessage", res.type, res);
console.log(res);
if (res?.response === "error") {
alert(res.message);
return;
}

switch (res?.type) {
case "profile_and_room_list":
const { data } = res;

setUserName(data.name);

setUserId(data.person_id);
setIsLogin(true);
navigate(`/rooms`, { state: data.rooms });
break;
case "recon_data": //재접속시
setIsLoading(false);
setUserName(res.data.name);

setUserId(res.data.person_id);
// 재접속 분기
if (res.response === "reconnected_game") {
navigate(`/rooms/${res.data.room.id}/game`, { state: res.data });
}

if (res.response === "reconnected_result") {
navigate(`/rooms/${res.data.room.id}/result`, {
state: res.data,
});
}
}
};
ws.current = socket;
});
}

const ret = [createWebSocketConnection, isReady, ws.current];
Expand Down

0 comments on commit 8388148

Please sign in to comment.