TIL
TIL_2025-01-07
explosion149
2025. 1. 7. 09:25
오늘 할일 순서
영단어
점심 - 밥을 하면서 수면 상태에 들어가자!
tcp-game 서버 코드 분석
코드카타
최근 잊어 먹은 단어
단어 | 뜻 |
knew | know 의 과거형 <알고 있다는 듯이> |
already | 이미, 벌써 <yet은 부정문에 already는 긍정문에 사용> |
watch | 보다, 지켜보다, 주시하다 <watch는 주의깊게 본것 see는 우연히 본것> |
just | 딱, 꼭, 정확히, 똑같이 <아무때나 사용하는듯함> |
all right | 자, 저 <말하기전에 어그로를 끌기 위함> |
spent - spend | 의 과거형 <use는 효율적인 사용, spend는 소비나 소모에 초점> |
server.js - [code] 서버 실행 코드
더보기
/*
이 코드는 TCP 서버를 초기화하고 실행하는 기능을 제공합니다.
서버는 클라이언트의 연결을 처리하기 위해 `onConnection` 이벤트 핸들러를 사용하며,
서버가 성공적으로 시작되면 실행 중인 주소를 로그로 출력합니다.
초기화 과정에서 오류가 발생할 경우, 오류 메시지를 출력하고 프로세스를 종료합니다.
*/
import net from 'net'; // net 모듈 임포트
import initServer from './init/index.js'; // 서버 초기화 함수 임포트
import { config } from './config/config.js'; // 설정 파일 임포트
import { onConnection } from './events/onConnection.js'; // 연결 이벤트 핸들러 임포트
const server = net.createServer(onConnection); // 서버 생성
// 서버 초기화 및 실행
const startServer = async () => {
try {
await initServer(); // 서버 초기화
server.listen(config.server.port, config.server.host, () => {
console.log(`서버가 ${config.server.host}:${config.server.port}에서 실행 중입니다.`);
console.log(server.address()); // 서버 주소 출력
});
} catch (err) {
console.error(err); // 오류 로그 출력
process.exit(1); // 오류 발생 시 프로세스 종료
}
};
// 서버 초기화 및 실행
startServer();
index.js - [code] 서버 초기화 코드
더보기
/*
이 코드는 서버 초기화 작업을 수행하는 함수를 정의합니다.
게임 자산과 프로토타입을 로드하고, 데이터베이스 연결을 테스트합니다.
오류가 발생하면 로그를 출력하고 프로세스를 종료합니다.
*/
import { loadGameAssets } from './assets.js'; // 게임 자산 로드 함수
import { loadProtos } from './loadProtos.js'; // 프로토타입 로드 함수
import { testAllConnections } from '../utils/db/testConnection.js'; // 데이터베이스 연결 테스트 함수
import pools from '../db/database.js'; // 데이터베이스 풀
// 서버 초기화 함수
const initServer = async () => {
try {
await loadGameAssets(); // 게임 자산 로드
await loadProtos(); // 프로토타입 로드
await testAllConnections(pools); // 데이터베이스 연결 테스트
// 다음 작업
} catch (e) {
console.error(e); // 오류 로그 출력
process.exit(1); // 오류 발생 시 프로세스 종료
}
};
export default initServer; // 초기화 함수 내보내기
assets.js - [code] 게임 자산 관리
더보기
/*
이 코드는 게임 자산을 로드하고 관리하는 기능을 구현합니다.
JSON 파일에서 게임 자산을 비동기적으로 읽어와 전역 객체에 저장하며,
자산을 반환하는 함수도 포함되어 있습니다.
*/
import fs from 'fs'; // 파일 시스템 모듈
import path from 'path'; // 경로 모듈
import { fileURLToPath } from 'url'; // URL 모듈
// import.meta.url은 현재 모듈의 URL을 나타내는 문자열
// fileURLToPath는 URL 문자열을 파일 시스템의 경로로 변환
// 현재 파일의 절대 경로. 이 경로는 파일의 이름을 포함한 전체 경로
const __filename = fileURLToPath(import.meta.url);
// path.dirname() 함수는 파일 경로에서 디렉토리 경로만 추출 (파일 이름을 제외한 디렉토리의 전체 경로)
const __dirname = path.dirname(__filename);
const basePath = path.join(__dirname, '../../assets'); // 자산 파일이 저장된 기본 경로
let gameAssets = {}; // 전역 변수로 게임 자산을 저장
// 파일을 비동기적으로 읽는 함수
const readFileAsync = (filename) => {
return new Promise((resolve, reject) => {
fs.readFile(path.join(basePath, filename), 'utf8', (err, data) => {
if (err) {
reject(err); // 오류 발생 시 거부
return;
}
resolve(JSON.parse(data)); // JSON 데이터를 객체로 변환하여 해결
});
});
};
// 게임 자산을 로드하는 비동기 함수
export const loadGameAssets = async () => {
try {
// 여러 파일을 비동기적으로 읽기
const [stages, items, itemUnlocks] = await Promise.all([
readFileAsync('stage.json'),
readFileAsync('item.json'),
readFileAsync('item_unlock.json'),
]);
gameAssets = { stages, items, itemUnlocks }; // 읽어온 데이터 저장
return gameAssets; // 게임 자산 반환
} catch (error) {
throw new Error('Failed to load game assets: ' + error.message); // 오류 발생 시 예외 처리
}
};
// 게임 자산을 반환하는 함수
export const getGameAssets = () => {
return gameAssets; // 전역 변수에서 게임 자산 반환
};
삼각함수
소흐-카흐-토아


역삼각 함수


단위원과 삼각함수 애니메이션