๋ชฉ๋ก์ ์ฒด ๊ธ (1099)
KoreanFoodie's Study
[C++ ๊ฒ์ ์๋ฒ] 6-1. ์ฑํ ์ค์ต ํต์ฌ : 1. Chat ์๋ฒ๋ฅผ ๋ง๋ค์ด๋ณด์. ๊ฐ๋จํ๊ฒ๋ ์ฑํ ์ด ์ ํ๋ Room ๊ณผ ์ฑํ ํจํท๋ง ๋ง๋ค์ด ์ฃผ๋ฉด ๋๋ค. 2. ์ฑํ ์ ์ ํํ ๋๋ง๋ค, Room ์์ WRITE_LOCK ์ ์ก์ผ๋ฉด ๋ณ๋ชฉํ์์ด ์๊ธธ ์ ์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, ์ถํ JobQueue ๋ฅผ ๋์ ํ ๊ฒ์ด๋ค. ์ด๋ฒ์๋ ์ฑํ ํจํท์ ๋ง๋ค์ด ๋ณด๋ฉด์, ๊ฐ๋จํ๊ฒ ์ค์ ๋ก ํจํท์ ์ถ๊ฐํ๋ ์์ ์ ์ด๋ป๊ฒ ์งํํ๋์ง ์ดํด๋ณผ ๊ฒ์ด๋ค. ์ผ๋จ, ์ฐ๋ฆฌ๊ฐ ์์ ํ๋ Protocol.proto ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ ํด ์ฃผ์. syntax = "proto3"; package Protocol; import "Enum.proto"; import "Struct.proto"; message C_LOGIN { } message S_LOG..
[C++ ๊ฒ์ ์๋ฒ] 5-9. ํจํท ์๋ํ #2 ํต์ฌ : 1. ํ์ด์ฌ๊ณผ jinja2 ๋ฅผ ์ด์ฉํด, ํจํท ํธ๋ค๋ฌ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํด ๋ณด์. 2. ์ด ํฌ์คํ ์์ ๋ง๋ ProtoParser ๋ Protocol.proto ์ ํจํท ๋ช ์ธ๋ฅผ ์ฝ์ด PacketHandler ์ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ค. ์ ๋ฒ ์๊ฐ์ ํจํท ์๋ํ๋ฅผ ์ํ ๋ฐ์์ (?) ์ ๋ณด์ฌ์ค ๋ฐ ์๋ค. ์ฌ์ค ์ ๋๋ก ํจํท ์๋ํ๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํด์๋, data-driven ํ๊ฒ ์์ ์ด ์ด๋ฃจ์ด์ ธ์ผ ํ ๊ฒ์ด๋ค. ๊ฐ๋จํ Flow ๋ฅผ ์๊ฐํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค : Protocol.proto ์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ํจํท(๋ฉ์์ง)์ ์ ์ธํ๋ค. ์๋ํ ํด์ด ๋์๊ฐ์ Packet ๊ณผ PacketHandler ํด๋์ค๋ฅผ ์์ฑํ๋ค. ํ๋ก๊ทธ๋๋จธ๋ ๊ฐ ํจํท์ ๋ํ ์ปค์คํ ๋์๋ง ์ง์ ๊ตฌ..
[C++ ๊ฒ์ ์๋ฒ] 5-8. ํจํท ์๋ํ #1 ํต์ฌ : 1. ํจ์จ์ ์ธ ์์ ์ ์ํด, ํจํท์ด ๋ณ๋๋ ๋ ๋น๋๋ฅผ ํ๋ฉด ๊ด๋ จ protoc ํ์ผ ๋ฑ์ด ์๋์ผ๋ก ์ ๋๋๊ฒ ๋ง๋ค๋ฉด ์ข๋ค. ๋ฐฐ์นํ์ผ๊ณผ .vcxproj ๋ฅผ ์ ์์ ํด ๋ณด์. 2. ์ด๊ธฐํ ๋จ๊ณ์์ ๊ฐ ํจํท ๋ณ๋ก ํธ์ถ๋์ด์ผ ํ๋ ํจ์๋ฅผ Functor ๋ก ๋ง๋ค์ด ๊ฐ ํจํท์ ๋์์์ผ ๋์ผ๋ฉด, ๊ฐ ์ปจํ ์ธ ๋ด๋น์๋ ํจํท์ด ์ถ๊ฐ๋ ๋ ํด๋น ํจํท์ ๋ํ ๊ตฌํ๋ง ์ ๊ฒฝ์ฐ๋ฉด ๋๋ค. ์ ๋ฒ ์๊ฐ์๋ Protobuf ๋ฅผ ์ธํ ํ๋ฉด์, ํจํท ์์ ์ ์ด๋ป๊ฒ ํ๋ฉด ๋๋์ง์ ๋ํด ๋ฐฐ์ ๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ์ค ๋์ด์ผ ๋ณด๋ฉด ๋ถํธํ ์ ์ด ์ด๊ณณ ์ ๊ณณ์ ์ฐ์ฌํ๋ค๋ ๋๋์ด ๋ ๋ค. ์๋ํ๋ฉด ๊ฒฐ๊ตญ ์ฐ๋ฆฌ๊ฐ ํจํท์ ๋ง๋ค๊ฑฐ๋ ์์ ํ๋ฉด, .protoc ํ์ผ์ ๋งค๋ฒ ์๋ก ์์ฑํด ์ค์ผ ํ๋๋ฐ, ์ฌ์ง์ด ์ด ์์ ์ Gam..
[C++ ๊ฒ์ ์๋ฒ] 5-7. Protobuf ํต์ฌ : 1. protobuf ๋ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํํ๋ ๋ฐฉ์์ผ๋ก, ๊ตฌ๊ธ์์ ์ ๊ณตํ๋ ํด์ ์๋ฏธํ๊ธฐ๋ ํ๋ค. 2. protobuf ๋ฅผ ์ฌ์ฉํ๋ฉด ์์ ๊ฐ์ฒด์ ๋ํ ๋ณต์ฌ๋ ๋ฐ์ํ ์๋ ์์ผ๋, ์ง๋ ฌํ์ ์ญ์ง๋ ฌํ ๊ณผ์ ์ด ๋งค์ฐ ํธ๋ฆฌํด์ง๋ค๋ ์ฅ์ ์ด ์๋ค. 3. protobuf ๋ ์ธํฐํ์ด์ค๊ฐ ๊ฐ๋จํ๊ณ ๋ช ํํ๋ฉฐ, ๋ค๋ฅธ ์ธ์ด ๋ฐ OS ๋ฅผ ์ฌ์ฉํ๋ ํ ์๋ฒ์์ ์ฐ๋์ด ์ฌ์ ํ์ ์๋ ๋งค์ฐ ์ ๋ฆฌํ๋ค. ์ด๋ฒ ์๊ฐ์๋ ๊ตฌ๊ธ์์ ๋ง๋ ๋ฐ์ดํฐ ์ง๋ ฌํ ํด์ ์ง๊ธ๊น์ง ๋ง๋ ์ํ ํ๋ก์ ํธ์ ์ ์ฉํด ๋ณผ ๊ฒ์ด๋ค. ์ด๋ฒ์๋ ๊ฒฐ๊ณผ๋ง ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด ์๋๋ผ, ์ค์น ๋ฐ ์ธํ ํ๋ ๊ณผ์ ์ ์์ธํ ๊ธฐ๋กํ ๊ฒ์ด๋, ์ถํ ์ธํ ์ ์ด๋ ค์์ ๊ฒช์ ๋ ์ด ๊ธ์ด ๋์์ด ๋์์ผ๋ฉด ์ข๊ฒ ๋ค. ๐ค ๋จผ์ , protobu..
[C++ ๊ฒ์ ์๋ฒ] 5-6. ํจํท ์ง๋ ฌํ #3 ํต์ฌ : 1. ๊ฐ๋ณ ๋ฐ์ดํฐ ์์ ๊ฐ๋ณ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋ ๊ฒฝ์ฐ๋, ๊ฒฐ๊ตญ Offset ๊ณผ Count ๋ฅผ ์ด์ฉํด ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋กํ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ค. 2. ์ถํ์ ์๊ฐํ ProtoBuf ๋ฅผ ์ด์ฉํ๋ฉด, ํจํท์ ๋ง๋ค ๋ ๊ฐ๋ณ ๋ฐ์ดํฐ๋ฅผ ์ผ์ผํ ์ฝ๋๋ก ๋ฃ๋ ๊ท์ฐฎ์์ ์ค์ผ ์ ์๋ค(๋ค๋ง ๋ถํ์ํ ๋ณต์ฌ๊ฐ ์์ ์๋ ์์). ์ ๋ฒ์๋ ๊ฐ๋ณ ๋ฐ์ดํฐ๋ฅผ ํจํท์ ๋ฃ์ด ๋ณด์๋๋ฐ... ๋ง์ฝ ๊ฐ๋ณ ๋ฐ์ดํฐ ์์ ๋ ๊ฐ๋ณ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น? ์๋ฅผ ๋ค์ด, BuffListItem ์ด๋ผ๋ ๊ตฌ์กฐ์ฒด์ ํด๋น ๋ฒํ์ ๋์๋ค ์ ๋ณด(Victims ๋ผ๊ณ ํ์)๋ฅผ ๋ด๋๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น? struct BuffsListItem { uint64 buffId; float remainTime;..
[C++ ๊ฒ์ ์๋ฒ] 5-5. ํจํท ์ง๋ ฌํ #2 ํต์ฌ : 1. ๊ฐ๋ณ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ PacketList ๋ฅผ ๋ง๋ค๋ฉด, ๋ฒํผ๋ฅผ ์ฝ์ ๋ ์์ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์๊ณ ์บ์คํ ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฝ์ด๋ค์ผ ์ ์๋ค. ์, ์ผ๋จ ์ ๋ฒ ์๊ฐ์๋ ๊ฐ๋ณ ๋ฐ์ดํฐ ํ์์ธ buffs ์ ๋ํด ํจํท ์ง๋ ฌํ๋ฅผ ์ํํ์๋ค. ๊ทธ๋ฐ๋ฐ ์ฝ๋๋ฅผ ์ ๋ณด๋ฉด, ์กฐ๊ธ ๋ง์์ ๋ค์ง ์๋ ๋ถ๋ถ์ด ์๋ค. vector buffs; buffs.resize(pkt.buffsCount); for (int32 i = 0; i > buffs[i]; ๋ฐ๋ก buffs ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ ์์ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ ๊ฒ์ธ๋ฐ... ์๊ฐํด๋ณด๋ฉด ๊ตณ์ด ๊ทธ๋ด ํ์๊ฐ ์๋ ์ถ๋ค. ๐ค ์ด ๋ถ๋ถ์ ์ต์ ํํ๊ธฐ ์ํด, ์ด๋ฒ ๊ธ์์..
[C++ ๊ฒ์ ์๋ฒ] 5-4. ํจํท ์ง๋ ฌํ #1 ํต์ฌ : 1. ํจํท ์ง๋ ฌํ๋, ํฌ์ธํฐ ๋ฐ ๊ฐ๋ณ ๋ฐ์ดํฐ ์ ๋ณด๋ฅผ ํจํท์ผ๋ก ์ฃผ๊ณ ๋ฐ์ ๋ ์ด๋ฅผ ์์ ํ๊ฒ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ฌ ์ ์๋๋ก ํ์ฑํ๋ ๊ธฐ๋ฒ์ด๋ค. 2. ๊ฐ๋ณ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ, Offset ๊ณผ Count ๋ฅผ ์ด์ฉํด ์ง๋ ฌํ๋ฅผ ์ฝ๊ฒ ์งํํ ์ ์๋ค. 3. ์ง๋ ฌํ๋ ๋ฐ์ดํฐ๋ xml ๋๋ json ํฌ๋งท์ผ๋ก ์ธ์ด๋ธ & ๋ก๋๋ฅผ ํ๋ฉฐ ๊ด๋ฆฌํ๊ฒ ๋๋ค. xml ์ ๊ฐ๋ ์ฑ์ด ์ข์ ์ ์์ผ๋ ๋ณต์กํ๋ฉฐ, json ์ ํํ๊ฐ ๊ฐ๋จํ๋ฉฐ ํ์ฑ ์๋๊ฐ ๋น ๋ฅด๋ค. ์ด๋ฒ ๊ธ์์๋ ํจํท ์ง๋ ฌํ์ ๋ํด ์์๋ณด์. ์์ด๋ก๋ ์ฌ์ค Serialization ์ธ๋ฐ, ์ง๋ ฌํ๋ผ๊ณ ํ๋ ์ด์ง ์ด์ํ๊ฒ ๋๊ปด์ง๊ธฐ๋ ํ๋ค. ๐ ์ธ๋ฆฌ์ผ์์๋ Serialization ์ด๋ผ๋ ์ฉ์ด๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๊ทธ ๋๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ ..
[C++ ๊ฒ์ ์๋ฒ] 5-3. Unicode ํต์ฌ : 1. ๋ฌธ์์ด์ ํธ๋ค๋ง์๋ 2๊ฐ์ง ์์๊ฐ ์๋ค. ํ๋๋ Character Set ์ด๊ณ , ๋ค๋ฅธ ํ๋๋ Encoding ์ด๋ค. 2. Unicode ๋ ๋ค์ํ ๋ฌธ์์ด์ ๋์ํ ์ ์๋ Set ์ผ๋ก, ์ธ์ฝ๋ฉ ๋ฐฉ์์ ๋ฐ๋ผ UTF-8 ์ด๋ UTF-16 ๋ฑ์ผ๋ก ๋๋๊ฒ ๋๋ค. 3. MBCS ๋ ๋ฌธ์์ ํน์ง๋ง๋ค ์ฌ์ฉํ๋ ๋ฐ์ดํธ๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํ๋ฉฐ, WBCS ์ ๋ชจ๋ ๋ฌธ์์ด์ด ๋์ผํ ๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค. ์ด๋ฒ ๊ธ์์๋ ๋๊ตฌ๋ ์ต์ํ์ง๋ง ๋ฌผ์ด๋ณด๋ฉด ํญ์ ํท๊ฐ๋ฆฌ๋ ๋ด์ฉ, ์ ๋์ฝ๋์ ๋ํด ๋ค์ ์ง๊ณ ๋์ด๊ฐ๋๋ก ํ๊ฒ ๋ค. ์ผ๋จ Unicode ์ ๋ํด ์ ๋๋ก ์ดํดํ๋ ค๋ฉด ๋ฌธ์์ด ์ธ์ฝ๋ฉ์ ๋ ์์, 'Character Set' ๊ณผ 'Encoding' ์ ๊ตฌ๋ถํด์ผ ํ๋ค. ๋จผ์ ,..
[C++ ๊ฒ์ ์๋ฒ] 5-2. PacketHandler ํต์ฌ : 1. ๋ค์ํ ํจํท์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ๋์ํ๊ธฐ ์ํด์, ํจํท๋ณ๋ก enum ์ ๋ง๋ค๊ณ , ๊ฐ enum ๋ณ๋ก ํจํท์ ํธ๋ค๋งํ๋ ํจ์๋ฅผ ๋ง๋ค์ด ์ฃผ๋ฉด switch ๋ฌธ์ผ๋ก ํ๋ฒ์ ์ฒ๋ฆฌํ ์ ์์ ๊ฒ์ด๋ค. 2. ๊ฐ๋ณ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๋ ๊ฒฝ์ฐ๋ Primitive Type ์ ์ฝ๋ ๊ฒฝ์ฐ์ ๊ฑฐ์ ๋น์ทํ๋ค. ๋ฒกํฐ์ ํฌ๊ธฐ๋ ๊ฐฏ์ ์ ๋ณด๋ฅผ ๋ฃ์ด์ฃผ๊ธฐ๋ง ํ๋ฉด ํด๊ฒฐ๋๋ค! ์ด์ ์๊ฐ์๋ Buffer Helper ํด๋์ค๋ฅผ ๋ง๋ค์ด ๋ฒํผ๋ฅผ ์กฐ๊ธ ๋ ์ฉ์ดํ๊ฒ ์ฝ๊ณ ์ธ ์ ์๋๋ก ํ๋ค. ํ์ง๋ง ์์ง ๋ถ์กฑํ๋ค! ์ผ์ผํ ์์์ ๊ฐ์ผ๋ก ๋ฒํผ์ ๋ด์ฉ์ ์ฑ์ ํจํท์ ์กฐ๋ฆฝํ๊ณ ๋ถํดํ๋ ๊ฒ๋ณด๋ค, ์ข ๋ ์ ํํ๋ ํํ๋ก ํจํท์ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ๊ฒ์ด ์ข๋ค. ๊ทธ๋์ ์ด๋ฒ ๊ธ์์๋ PacketHandler ..
[C++ ๊ฒ์ ์๋ฒ] 5-1. BufferHelper ํต์ฌ : 1. Buffer ๋ฅผ ์ฝ๊ฒ ์ฝ๊ณ ์ธ ์ ์๊ฒ ํด ์ฃผ๋ Buffer Helper ํด๋์ค๋ฅผ ๋ง๋ค์ด ๋ณด์. 2. '>>' , '>' ๋ฅผ ์ค๋ฒ๋ก๋ฉํ ๋ถ๋ถ์ด๋ค. ํ์ฌ ๋ฒํผ์์ ์ฝ์ ๋ถ๋ถ์ ์ ์ ํ ํ์ ์ผ๋ก ์บ์คํ ํด ์ฝ์ด๋ธ ํ, _pos ๋ฅผ ์ด๋์ํค๋ฉด, ์ฐ์ํด์ '>>' ์ฐ์ฐ์ ์ํํ ์ ์๋ค. ์ค์ ์์๋ ์๋ ๋ถ๋ถ์ DummyClient ํด๋์ค๋ฅผ ํตํด ํ์ธํ ์ ์์ ๊ฒ์ด๋ค ๐ BufferReader.cpp BufferReader::BufferReader() { } BufferReader::BufferReader(BYTE* buffer, uint32 size, uint32 pos) : _buffer(buffer), _size(size), _pos(po..