1์ฐจ ํ๋ก์ ํธ์ ์๋ ์ฝ๋๋ฅผ ๊ทธ๋๋ก ์ฎ๊ฒจ์ค๋ฉด ๋ ๊ฑฐ๋ผ ์๊ฐ์ ํ๋๋ฐ, ์์๋ณด๋ค ๊ฝค ์ค๋ ์๊ฐ ์ฝ์ง์ ํ๋ค. ๋ด๊ฐ ๋ชป์ฐพ๋๊ฑด์ง ํ์ ์ ๋ํ ์ ๋ณด๊ฐ ๋ณ๋ก ์์์. ์ผ๋จ ๋ฌธ์๋ฅผ ๋ณด๊ณ ์ด๋ฌ์ฟต ์ ๋ฌ์ฟต ํ๋ ๋๊ธด ํ๋๋ฐ, ์ด๊ฒ ์ ํํ ๋ฐฉ๋ฒ์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค. ์ผ๋จ ์ ๋์๊ฐ๋ ๊ธฐ๋ก.
์ ๋ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํจํค์ง ๋งค๋์ ์์ socket.io-client
๋ฅผ ์ค์นํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ ํ์
์ ์๋ฅผ ํด์ฃผ๋ ค๊ณ ํ๋๋ฐ,
์์ฐ๋๊ฒ ์ข์ ๊ฒ ๊ฐ๋ค๋๊ฑด ์๊ฒ ๋ค.. ์ผ๋จ!!
import io, { Socket } from 'socket.io-client';
io
์ ํจ๊ป Socket
๋ import ํด์ค๋ค.
const [socket, setSocket] = useState<Socket<ServerToClientEvents>>();
์์ผ ๊ฐ์ฒด๋ฅผ ์์ฑํด state์ ์ ์ฅํ๋ ๋ฐฉ์์ด์๋ค. ์๋ Socket ํ์
์ ์ ๋ค๋ฆญ์ผ๋ก <ListenEvents, EmitEvents>
๋๊ฐ๊ฐ ๋ค์ด๊ฐ๋๋ฐ, ์ง๊ธ์ ์ ๋ณด ์์ ๋ง ํ ๊ฑฐ๋๊น ListenEvents๋ง ์ง์ ํด๋ . (์ด๋ ๊ฒ ํด๋ ๋๋๊ฑด๊ฐ)
TicketQR.tsx
event ์ด๋ฆ์ผ๋ก ํฐ์ผ์ uuid๋ฅผ ์ฌ์ฉํ๋๋ก ๋์ด ์๋ค.
socket.on(ticketId, (data: SocketData) => {
if (data.success) {
// ์๋ต..
} else {
// ์๋ฌ์ฒ๋ฆฌ..
}
});
๊ทธ๋๋ก ํด๋ดค์. ๊ทธ๋ฆฌ๊ณ ์ด๋ฐ ํ์ ์๋ฌ๊ฐ ๋ํ๋ฌ๋ค.
ServerToClientEvents
๋ ์๋ฒ์์ ์ด๋ฒคํธ๋ฅผ ์์ ํ ๋์ ๋ฆฌ์ค๋ ํจ์ ํ์
์ผ๋ก ์ฐ์ธ๋ค. socket.on(EventName, Listener)
์์, ์ด๋ฒคํธ ์ด๋ฆ์ด 'noArg'์ธ ๊ฒฝ์ฐ์ ๋ฆฌ์ค๋ ํจ์์ ํ์
์ ()=>void
์ฌ์ผ ํ๋ค. ๋ญ ์ด๋ฐ ์์.
๋ด ๊ฒฝ์ฐ์ ticketId๋ฅผ eventName์ผ๋ก ์ฌ์ฉํ๊ณ , ๋ฆฌ์ค๋ ํจ์๋ก (data) => void
ํ์์ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค. eventName๊ณผ ๊ทธ ๋ฆฌ์ค๋ ํจ์์ ํ์
์ ์ง์ ํด์ฃผ์ง ์์์ ๋์ ์ด๋ฐ ์ค๋ฅ๊ฐ ์๊ธฐ๊ฒ ๋๋ค.
/type/socket.ts
export interface ServerToClientEvents {
noArg: () => void;
basicEmit: (a: number, b: string, c: Buffer) => void;
withAck: (d: string, callback: (e: number) => void) => void;
ticketId: (data: any) => void;
}
export interface ClientToServerEvents {
hello: () => void;
}
export interface InterServerEvents {
ping: () => void;
}
export interface SocketData {
uuid: string;
success: boolean;
date: 'YB' | 'OB';
ticketStatus: '์
์ฅ์๋ฃ' | '์
๊ธํ์ธ' | 'ํ์ธ๋๊ธฐ' | '๊ธฐํ๋ง๋ฃ';
message: string;
name: string;
phoneNumber: string;
adminName: string;
}
์ด๋ ๊ฒ ํ์ ์ ์ ์ํด์ค๋ค. ๊ฐ์ด๋ฐ ๋๊ฐ๋ ํ์์๋๋ฐ ๊ทธ๋ฅ ๋ฌธ์์์ ๊ธ์ด์ฌ๋ ๊ฐ์ด ๊ธ์ด์๋ค. data๋ง ๋ฐ์์ ์ธ ์ ์๋๋ก ํ์.
const ticketIdForSocket = ticketId as keyof ServerToClientEvents;
socket.on(ticketIdForSocket, (data: SocketData) => {
if (data.success) {
// ์๋ต..
} else {
// ์๋ฌ์ฒ๋ฆฌ..
}
});
keyof
ํค์๋๋ฅผ ์ด์ฉํ๋ค. ServerToClientEvents
๊ฐ์ฒด์ key๋ผ๊ณ ๋จ์ธ์ ํด์ฃผ๊ณ ์ด๋ฒคํธ ์ด๋ฆ์ผ๋ก ๋ฃ์ด์ค๋ค. ๊ทธ๋ผ ๋ฆฌ์ค๋ํจ์์ ํ์
์ด ์ง์ง๊ฟ์ด ์ ๋ง์์ง๋ฉด์(...) ์ค๋ฅ๊ฐ ์ฌ๋ผ์ง๋ค.
์ฝ๋ฉํ๊ธฐ ์ ์ ๊ธ๋ถํฐ ์์ฐ๊ณ ์ถ๋ค.