C# Game Server
NDC2018 [silbeobain seobeo enjin 2] seolgye ribyureul batangeuro jaeguseonghan C# IOCP & Stackless Fiber seobeo
1. peurojegteu sogae
- peurojegteu myeong: C# GameServer (Silvervine Engine 2 Reference)
- seolmyeong: mabinogi mobaileseo sayongdoen silbeobain seobeo enjinyi gujoreul hagseubhago IOCP gibanyi bidonggi sokes tongsingwa singgeul seuredeu geim rojig ceorireul C#euro guhyeonhan peurojegteu
2. haegsim gisul seutaeg
- eoneo: C#
- neteuweokeu: IOCP
- deiteo hyeongsig: JSON[risoseu rodeu, paekis jigryeolhwa(ilbuneun ProtoBuf teseuteu sayong)]
- deiteobeiseu: MySQL, Dapper(ORM)
- roging: Serilog(Seq yeondong)
3. akitegceo
deiteo heureumdo
keulraieonteuyi yoceongi IOCPreul tonghae susindoeeo singgeul seuredeu geim rojigeseo ceoridoego, bidonggi DB jageobeuro ieojineun jeonce paipeurain
seobeo keomponeonteu gujo
seobeoyi juyo domein ganyi gwangyewa gujo
silbeobain seobeoenjin2 akitegceo ddarahagi
- Stackless Fiber giban rojig ceori
- silbeobainyi Stackful Fiber gujoreul bunseoghayeo C#yi
async/awaitwa Taskreul hwalyonghayeoStacklessbangsigeuro guhyeon - bidonggi IO daegi gugani pohamdoen rojigeul donggisig sunca kodeuceoreom jagseonghal su issge hayeo saengsanseongeul nopineun gujoro seolgye
- silbeobainyi Stackful Fiber gujoreul bunseoghayeo C#yi
- Single-Thread Game Loop
- modeun geim rojigeul
singgeul seuredeurupeueseo suncajeogeuro ceorihayeodeiteo ilgwanseongeul bojang - meoltiseuredeu hwangyeongyi
gyeongjaengsangtaewadedeuragmunjereul geunbonjeogeuro jegeohayeo rojig seolgye nanidoreul najcum
- modeun geim rojigeul
- Job Queue siseutem
neteuweokeu IOwaDBjageobeulgeim rojig seuredeuwa bunrihayeo byeongmog hyeonsang eobsneun gujoro seolgye
seongneung jipyo
- ceoriryang: dongsi jeobsogja 500myeong, codang 10man paekis(idong paekis 200/s) munanhage ceori ganeung
- anjeongseong: daegyumo beurodeukaeseuting sanghwangeseodo pyeonggyun rupeu taim 8ms miman yuji(rupeuneun monseuteo, peulreieo beurodeu kaeseuteu rojigdo ceori jungin sangtae)
neteuweokeu
- IOCP giban bidonggi neteuweokeu
- jeogeun suyi seuredeuro yeoreo jeobsogjareul hyoyuljeogeuro ceori
- sesyeonmada beopeopulgwa SocketAsyncEventArgsreul hwalyonghayeo GC budameul coesohwa
- ArraySegmentreul hwalyonghaneun RecvBuffer keulraeseureul tonghae memori jeolyag
deiteobeiseu
- bidonggi DB weokeo
- byeoldoyi DB jeonyong seuredeuro bunrihayeo geim rojigyi jungdan(Blocking) eobsi anjeonhage deiteoreul jeojanghago bulreool su issdorog seolgye
MMORPG geim kontenceu siseutem guseong
| siseutem myeongcing | juyo yeoghal mic sangse gineung |
|---|---|
| injeung siseutem | keulraieonteu jeobsog jeeo, DB yeondongeul tonghan sayongja injeung mic kaerigteo jeongbo roding |
| entiti gwanri | peulreieo mic monseuteo gaegceyi saengmyeongjugi mic sangtae gwanri |
| weoldeu siseutem | geim nae maeb deiteo gwanri mic guyeogbyeol entiti donggihwa |
| sanghojagyong siseutem | NPC daehwa, kweseuteu surag/wanryo rojig mic bosang ceori |
| aitem siseutem | inbentori gwanri, aitem hoegdeug mic sayong rojig ceori |
| risoseu rodeu siseutem | JSON giban risoseu gwanri keulraeseureul tonghae kodeu sujeongeobsi kontenceu hwagjang ganeung |
peurojegteu gujo
Root/
+-- GameLogicThread.cs
+-- Program.cs
+-- Protocol.cs
+-- protocol.proto
+-- Common/
| +-- Packet.cs
+-- DataManage/
| +-- DataManager.cs
| +-- ItemData.cs
| +-- MapData.cs
| +-- MonsterData.cs
| +-- NpcData.cs
| +-- QuestData.cs
| +-- DataManage/Template/
| +-- ItemTemplate.cs
| +-- MapTemplate.cs
| +-- MonsterTemplate.cs
| +-- NpcTemplate.cs
| +-- QuestTemplate.cs
+-- DB/
| +-- DbManager.cs
| +-- DbJob.cs
| +-- DbTransactionWorker.cs
| +-- Dto/
| +-- RequestDto.cs
+-- Game/
| +-- Game/Dialogue/
| | +-- DialogueBase.cs
| | +-- DialogueSimple.cs
| | +-- DialogueOk.cs
| | +-- DialogueNext.cs
| | +-- DialogueAcceptDecline.cs
| | +-- DialogueSelection.cs
| +-- Game/Quest/
| +-- QuestComponent.cs
| +-- QuestCondition.cs
| +-- QuestProgress.cs
+-- GameData/
| +-- Item/ (Item01.json ~ Item04.json)
| +-- Map/ (Map01.json)
| +-- Monster/ (monster01.json ~ monster03.json)
+-- GameObject/
| +-- Player.cs
| +-- Monster.cs
| +-- Map.cs
| +-- Inventory.cs
+-- Manager/
| +-- PlayerManager.cs
| +-- MapManager.cs
| +-- SessionManager.cs
| +-- LoginManager.cs
| +-- NpcManager.cs
| +-- ItemManager.cs
+-- Network/
+-- UserSession.cs
+-- PacketHandler.cs
+-- PacketMaker.cs
+-- PacketSerializer.cs
+-- RecvBuffer.cs
+-- PacketParser.cs