드디어 로비 부분을 거의 다 만들었습니다. 너무 공부를 안해서 엄청 오래 걸렸는데 그래도 조금씩 꾸준히 해서 거의 완성이 되었네요. 이제 게임 시작하는 부분이랑 게임 내부만 만들면 완성입니다. 이제는 개강도 다가와서 얼른 끝내고 패킷 직렬화나 유니티 같은 나머지 게임 공부들을 해야죠. 일단 게임 서버 부분은 인프런 루카스님의 게임서버 강의를 많이 참고했습니다만, 책에서 배운 내용도 많이 썼습니다. 다만 처음 써보는 거라 통신을 하는 부분들이 조금 어려움이 많았네요. 원래는 IOCP를 사용해 보려고 했지만, 처음인 만큼 만들기 쉬운 WSAEventSelect 서버를 사용했습니다. 먼저 서버를 간단하게 설명드리자면 네트워크 부분을 거의 static 형식으로 다 묶어서 사용할 수 있게 만들었습니다. 서버 네트..
요즘 공부가 너무 손에 안잡혀서 미로 대결이라는 간단한 사이드 프로젝트를 시작했습니다. 게임은 옛날에 만들었던 미로 탈출 게임을 변경해서 만들 생각이고, 목표는 대기방 만들어서 1:1 대결을 할 수 있는 걸 만드는게 목표입니다. P2P 형식으로 만들까, 아니면 서버 - 클라 형태로 만들까 했는데 서버 - 클라 형태로 만들기로 했습니다. 그래서 전체적인 미로맵 생성이나 이런건 서버쪽에서 하고, 클라는 말 그대로 받아먹는 형태로 한번 제작을 하려고 합니다. 각 역활별 정리 서버 클라 대기열 방 생성해주기 연동할 수 있게 데이터 전송 게임 시작 시, 맵 생성 후 전달 키 입력받으면 이동 후 상대편에게 전달 게임 전체 적인 관리 클라이언트 방 생성 또는 방 입장 게임 진행 이렇게 간단하게 만들려고 하는데, 쉽지..
때는 이번주 화요일.. 저번주에 본가에 제사가 있어서 갔다온 저는 월요일날 집에 돌아왔습니다. 그런데 화요일부터 목이 칼칼해지기 시작했습니다. 그래서 혹시 몰라 학교 등교를 멈추고 다음날까지는 상황을 지켜 보려고 했죠.. 그런데 정말 다음날 목이 더 아파진겁니다. 오우 쒯.. 설마하는 마음으로 저는 편의점으로 달려가 PCR 검사기를 사왔습니다. 그리고 두근거리는 심장을 뒤로 한채 검사를 시작했죠.. 한방울.. 두방울.. 마지막 세방울이 떨어지고, 칸에 액체가 점점 채워지는 그 순간, 저는 시간이 멈추는 듯 했습니다. 정말로 두줄이 떠버린거죠. 저는 그 사실을 바로 부모님과 누나에게 알렸습니다. 정말 마음이 아팠죠..왜냐하면 그 전에는 한번도 걸린 적이 없었거든요. 친구들이 다 걸릴때도 저는 걸리지 않았습..
책 : 뇌를 자극하는 윈도우즈 시스템 프로그래밍 우리가 흔히 말하는 Heap이란, malloc, new 등을 통해서 동적으로 생성할 수 있는 메모리 공간을 뜻합니다. 보통 malloc 등을 통해서 선언된 동적 배열 공간은, 멀티쓰레드 환경에서 쓰레드들 간의 공유하는 상황이 발생하게 됩니다. 그러다보니, 다른 쓰레드가 그 공간을 건들여서 해제를 하거나 하는 상황이 발생할 수 있습니다. 그래서 Windows에서는 쓰레드 별로 사용할 힙을 별도로 할당해줄 수 있습니다. 이것을 Dynamic Heap이라고 합니다. 다이나믹 힙같은 경우에는 해제할 경우 힙에 있는 모든 데이터가 해제되므로 링크드 리스트 같은 자료구조 형에서도 유용합니다. - 디폴트 힙(Default Heap) : 공유하고 있는 기본적인 힙 - 힙..
책 : 뇌를 자극하는 윈도우즈 시스템 프로그래밍 1 ) 이름있는 뮤텍스(NamedMutex) 동기화 - 원래 선언된 Mutex는 하나의 프로세스에서 내부 쓰레드들만 사용할 수 있는데, 이름있는 뮤텍스를 사용하면 다른 프로세스들이 그 뮤텍스를 사용할 수 있습니다. 코드를 예시로 확인해 보겠습니다. if 1 -> 이름있는 뮤텍스를 생성하는 코드 else -> 외부 프로세스에서 뮤텍스 접근하여 사용하는 코드 예제 더보기 #include #include #include #include HANDLE hMutex; DWORD dwWaitResult; void ProcessBaseCriticalSection() { dwWaitResult = WaitForSingleObject(hMutex, INFINITE); swi..
책 : 뇌를 자극하는 윈도우즈 시스템 프로그래밍 1 ) 뮤텍스(Mutex) 기반 동기화 - 뮤텍스 생성 hMutex = CreateMutex( NULL, // 디폴트 보안관리자. FALSE, // 누구나 소유 할 수 있는 상태로 생성. //(TRUE일 경우, 뮤텍스를 생성하는 쓰레드가기회를 얻음) NULL // numaned mutex ); - Mutex 사용 WaitForSingleObject(hMutex, INFINITE); /********************* 임계영역 *********************/ ReleaseMutex(hMutex); 예제 더보기 #include #include #include #include #define NUM_OF_GATE6 LONG gTotalCount = ..
책 : 뇌를 자극하는 윈도우즈 시스템 프로그래밍 1 ) 임계영역(Critical Section) 동기화 - 크리티컬 섹션 오브젝트 변수 선언 CRITICAL_SECTION hCriticalSection; - 오브젝트 초기화 InitializeCriticalSection(&hCriticalSection); - 임계영역 지정 EnterCriticalSection(&hCriticalSection); //임계영역 지정 /************* 임계영역 *************/ LeaveCriticalSection(&hCriticalSection); //임계영역 탈출 - 임계영역 삭제 DeleteCriticalSection(&hCriticalSection); 예제 더보기 #include #include #in..
책 : 뇌를 자극하는 윈도우즈 시스템 프로그래밍 커널 레벨(Kernel Level) 쓰레드 : 프로그래머 요청에 따라 쓰레드를 생성 및 스케줄링하는 주체가 커널 인 경우, 이럴 경우에는 쓰레드를 생성해주고, 스케줄링하는 대상이 커널이 된다. 커널 영역 : 유저 영역을 제외한 나머지 영역 유저 영역 : 프로세스의 산하 쓰레드들이 가지고 있는 코드 영역, 데이터 영역, 스택 및 힙 영역을 가리킴. 장점 : 커널에서 직접 제공하기 때문에 안전성과 다양한 기능성이 제공된다. 단점 : 커널에서 제공해 주는 기능이기 때문에 유저 모드에서 커널 모드로의 전환이 빈번하게 일어난다. 따라서 이는 성능의 저하로 이어지게 된다. 유저 레벨(User Level) 쓰레드 : 커널이 쓰레드 모델을 지원하지 않을 경우(혹은 커널이..
- Total
- Today
- Yesterday
- c++
- 드림핵
- 시스템보안
- 개발
- STL
- queue
- Dreamhack
- 멀티쓰레드
- 야경
- 보안
- 백준
- 알고리즘
- 링크드 리스트
- 컨퍼런스
- 고양이
- 인제대학교
- 정보보안
- 학교
- 자료구조
- 더블버퍼링
- Select모델
- BFS
- 레지스터
- 스레드풀
- 워셜알고리즘
- 지뢰찾기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |