ÆÐŶ Á÷·ÄÈ­/Çڵ鸵 ¶óÀ̺귯¸® (blog/091007) to upper level
What a Wontaefful World/¿äÁòÀÇ »ðÁú #1 ¿¡ Æ®·¢¹é

ÄÄÆ÷³ÍÆ®ÀÇ ÇöÀç »óÅ¿¡ ´ëÇÑ ´ÙÇü¼ºÀº ÁÖ·ù OO ¾ð¾î¿¡¼­ State Pattern ±¸ÇöÇÏ´Â ¹æ¹ýÀÌ ¸¹ÀÌµé ³ª¿Í ÀÖÀ¸´Ï ±×°É ¾²¸é µÉ °Å°í, °¢ ¸Þ¼¼Áö¿¡ ´ëÇÑ Ã³¸® ¹æ¹ýÀÌ ¿©·¯ »óÅ¿¡ °ÉÃÄ Áߺ¹µÉ °Í °°À¸¸é if-then-else ·Î ¹Ù¸£´Â °Ô ³´°Ú°í¿ä.

Á÷·ÄÈ­¶û ¸Þ¼¼ÁöÀÇ Á¾·ù¿¡ ´ëÇÑ ´ÙÇü¼ºÀÌ ¹®Á¦°Ú´Âµ¥
ȸ»ç¿¡¼­´Â ÀÌ·¸°Ô ÇØ°áÇß¾ú½À´Ï´Ù.

(ÄÚµå ¾È º¸°í »õ·Î ÀÛ¼ºÇÏ´Â Áß :p)

SomeHandler.h:
class SomeHandler : public IHandler
{
public:
    virtual void OnPacket( const RawPacket* p, int size );

protected:
    template< typename P >
    void OnPacket( const P& p );
};

SomeHandler.cpp:
// SomeHandler¿¡ ÇØ´çÇÏ´Â ÆÐŶ Çڵ鸵 ¸Ê¿¡ ´ëÇÑ Àü¿ª Á¢±Ù °æ·Î´Ù.
// DEFINE_HANDLER_FUNC¿¡¼­ ¸Ê¿¡ µ¥ÀÌÅ͸¦ ä¿ö³Ö°í
// Dispatch¿¡¼­ ¸Ê¿¡ ¹ÙÀÌÆ® ½ºÆ®¸²À» ´øÁ®³Ö°Ô µÇ´Âµ¥
// ¶óÀ̺귯¸®ÀÇ »ç¿ëÀÚ°¡ Á÷Á¢ °Çµå¸± ÀÏÀº ¾ø´Ù.
PACKET_HANDLER_MAP( SomeHandler );

void SomeHandler::OnPacket( const RawPacket* p, int size )
{
    ::Dispatch( this, p, size );
    // Dispatch ¾È¿¡¼­´Â pÀÇ Ã¹ µÎ ¹ÙÀÌÆ®¸¦ ±îº¸°í ±×°ÍÀ» ±âÁØÀ¸·Î ÆÐŶ Çڵ鸵 ¸ÊÀ» Á¶È¸ÇÑ´Ù.
    // ÆÐŶ Çڵ鸵 ¸Ê¿¡´Â °¢ ÆÐŶ ŸÀÔÀ» ¿ªÁ÷·ÄÈ­ÇØ¼­ SomeHandler::OnPacket<...>() À¸·Î
    // Àü´ÞÇÏ´Â °´Ã¼µéÀÌ ÁÖ··ÁÖ·· ´Þ·Á ÀÖ´Ù.
}

DEFINE_HANDLER_FUNC( SomeHandler, MeatPacket )
void SomeHandler::OnPacket( const MeatPacket& p )
{
    // do meat with p
}

DEFINE_HANDLER_FUNC( SomeHandler, SpinPacket )
void SomeHandler::OnPacket( const SpinPacket& p )
{
    // do spin with p
}

GamePackets.h:
BEGIN_PACKET_ENUM()
    PACKET_ENUM( Meat )
    PACKET_ENUM( Spin )
END_PACKET_ENUM()

PACKET0( Meat );

PACKET2( Spin,
    MEMBER( int, right ),
    MEMBER( string, round ) );

º¸³»´Â ÂÊ¿¡¼­´Â:
user->SendPacket( SpinPacket().Set( 42, "you spin me" ) );
ÀÌ·¯¸é right¿¡ 42°¡ ´ã±â°í round¿¡ "you spin me" °¡ ´ã±ä SpinPacket ±¸Á¶Ã¼°¡ ³×Æ®¿öÅ©¸¦ °ÅÃļ­~ ¸ñÀûÁö °´Ã¼¿¡ ÀÖ´Â Çڵ鷯 ÇÔ¼öÀÇ ÀÎÀÚ·Î ³Ñ¾î°©´Ï´Ù.


½±ÁÒ?



ÅÛÇø´ Ưȭ, ¸â¹ö ÇÔ¼ö Æ÷ÀÎÅÍ, Àü󸮱⸦ ºý¼¼°Ô µ¿¿øÇؼ­ ¸¸µé¾ú½À´Ï´Ù. ½ºÆ®¸² ¶óÀ̺귯¸®µµ °°ÀÌ ºÙ¾î ÀÖ°í¿ä.
³»ºÎ ±¸ÇöÀº ÀÌ ºí·Î±×¿¡ ¿©¹éÀÌ ºÎÁ·ÇϹǷΠ»ý·«ÇÕ´Ï´Ù.
¼ÒÀ¯±Çµµ ȸ»ç¿¡ ÀÖ°í :p

Ŭ¶ó-¼­¹ö ¸ðµÎ ÀÚ¹Ù ¾µ °Å¸é ÆÐŶ Ŭ·¡½ºµéÀ» implements Serializable ÇÏ°í ÆÐŶ °´Ã¼¸¦ ¹Ù·Î ¹ÙÀÌÆ® ½ºÆ®¸²À¸·Î ½á¹ö¸®¸é µÇÁÒ. ¹Þ´Â ÂÊÀÇ ¼ÒÄÏ ½ºÆ®¸²¿¡¼­ °´Ã¼¸¦ ²¨³»¸é ŸÀÔ Á¤º¸°¡ ºÙ¾î ÀÖÀ¸´Ï±î, type À» ¸Þ¼¼Áö¸¶´Ù µû·Î ¼³Á¤Çϱ⺸´Ù´Â, RTTI ½á¼­ if-else üÀÎÀ» ¸¸µé¸é µÇ°Ú³×¿ä.~

...ÀÌ·¸°Ô ¾²°í º¸´Ï ¿ÏÀü »ðÁúÇÑ °Í °°ÀݾÆ... ÀÚ¹Ù·Î ÇÏ¸é ¼³¸íµµ ¼¼ ÁÙÀÌ¸é ³¡³ª°í;;
·Î·¹º§ ¶óÀ̺귯¸® ±¸ÃàÇÏ´Â ³ë·ÂÀÌ ÀüÇô µéÁö ¾ÊÀ» µí... ¤Ì¤Ð

±×·¡µµ Ãʱ⿡ ÅõÀÚ¸¦ Àß ÇØ ³õÀ¸´Ï,
MMORPG Çϳª ¸¸µé¸é¼­ ÆÐŶÀÌ °è¼Ó Ãß°¡µÇ°Å³ª º¯°æµÇ¾îµµ ÀüÇô ±«·ÓÁö ¾Ê¾Ò½À´Ï´Ù. (ÀÚ¶û)
Áß°£¿¡ »ó¼Ó±¸Á¶¸¦ µû¶ó Çڵ鷯 ¸ÊÀ» ã´Â ±â´ÉÀ̶û, ÆÐŶº°·Î ¶ó¿ìÆÃ ¸ñÀûÁö³ª ÇÊÅ͸µ Ư¡ °°Àº °Íµµ ¼­¼úÇÒ ¼ö ÀÖ°Ô Ãß°¡ÇÏ´Â ÇÏ·çÀÌÆ²Â¥¸® ±â´ÉÃß°¡°¡ ¸î ¹ø ÀÖ¾ú³×¿ä.


¿©·¯ºÐÀÇ ÀÏÅÍ¿¡¼­´Â ¾î¶² ½ºÅ¸ÀÏ·Î ÆÐŶ Á÷·ÄÈ­/Çڵ鸵À» ÇÏ°í °è½Å°¡¿ä +_+)
ű×: C++ ÇÁ·Î±×·¡¹Ö
»õ±Û ¼öÁ¤ ÀÛ¼º: 2009-10-07. 16:27 / ÃÖÁ¾¼öÁ¤: 2009-10-07. 16:27 / [Æ®·¢¹é]
 
Tracked from rein's world (09-10-09 00:40)
Á¦¸ñ: ÆÐŶ Á÷·ÄÈ­ / Çڵ鸵 ¶óÀ̺귯¸®
What a Wontaeful World: ¿äÁòÀÇ »ðÁú #1 ¿¡¼­ Æ®·¢¹é ¸®Ä«³Ý: °¡Â¥ºí·Î±× – ÆÐŶ Á÷·ÄÈ­/Çڵ鸵 ¶óÀ̺귯¸®¿¡¼­ Æ®·¢¹é + IRC ¿¡¼­µµ ¸î °¡Áö »çÇ×À» ³íÀÇ Çß´ø°É ´ýÇÁ. ÀÏ´Ü ¹ß´ç±ºÀÌ IRC¿¡¼­ ¸»Çß´ø, °¢ ¸Þ½ÃÁö ŸÀÔ º°·Î ºñÁöÅÍ ÆÐÅÏ(visitor pattern)À» ¾²´Â °ÍÀÇ ¹®Á¦ °¢°¢ÀÇ ÆÐŶ Çڵ鷯¸¶´Ù Ŭ·¡½º¸¦ Á¤ÀÇ ÇØÁà¾ßÇÏ´Â ¹®Á¦ — À͸í Ŭ·¡½º·Î ¾à°£ ´Ü¼øÈ­´Â ÇÒ ¼ö ÀÖÀ½ ÆÐŶ ±¸Á¶(¸Þ½ÃÁö¿¡ ´ã±ä......more
 
rein (09-10-07 16:54) ¡¿
ÀÌÂÊ¿¡¼± º¸³¾ ¸Þ½ÃÁöµéÀ» ÆÄÀÏ Çϳª(xmlÀε¥ yaml·Î ¹Ù²Ù¸é ÁÁ°ÚÁö¸¸)¸¦ ÁöÁ¤ÇØÁÖ¸é, Åë½ÅÇÏ´Â ¾çÂÊ ´Ü¿¡¼­ ÀúÁþÇÏ´Â Äڵ带 ÀÚµ¿ »ý¼ºÇÏÁö(...). º¸³»´Â ÄÚµå / ¹Þ¾Æ¼­ °¢ ¸Þ½ÃÁö¸¶´Ù Á¤ÇØÁø ƯÁ¤ÇÔ¼ö¸¦ ÀÚµ¿À¸·Î È£ÃâÇØÁÜ.

½ÇÁ¦·Î ½Ã¸®¾ó¶óÀÌÁîÇÏ´Â ºÎºÐÀº ±âº»ÀûÀ¸·Ð templateÀ̰í (int like ³ª stringÀ̳ª STL ÄÁÅ×À̳ʴ ±×³É º¸³¿), ³ª¸ÓÁö´Â ƯÁ¤ interface ±¸ÇöÇÏ´Â Çü½ÄÀ¸·Î...
À̰ŠÅ×½ºÆ® ÄÚµå C++·Î Â¥±â ±ÍÂú¾Æ¼­ python ´ÜÀ» ¸¸µé¾î¹ö¸®´Â ÁßÀÓ; 
rein (09-10-07 16:59) ¡¿
±Ùµ¥ »ý°¢Çغ¸¸é À̰Š¾î¶² Àǹ̿¡¼± Google Protocol BufferÀÇ ºÎºÐÁýÇÕÀÏÁöµµ 
½Âµ¹ (09-10-07 20:42) ¡¿
Àú¸¶´Ù ÆÐŶ Çڵ鸵À» ¾î¶»°Ô Çϸé ÀÚµ¿È­½Ãų±î ÇÏ´Â ¹®Á¦¿¡ ºÀÂøÇÏ´Â ¸ð¾çÀÌ´õ¶ó. ³­ Ŭ¶óÀ̾ðÆ®/¼­¹ö ½ºÅ¸Æ®¾÷¶§ ÆÐŶ Çì´õÀÇ ¸Þ½ÃÁö ID¿Í ÇÔ¼ö¸íÀ» ¸ÅÇνÃŲ XMLȯ°æ¼³Á¤À» ÀÐ°í ³×Æ®¿öÅ© ¿£Áø¿¡¼­ GetProcAddress·Î »Ì¾Æ³»´Â ÇüÅ·Π°¡°í ÀÖÀ½. ±Ùµ¥ ÀÌ°Ô OO°¡ ¾Æ´Ï°ÚÁö... -_-;; ·Îº¿ÀÌ ÀÛ¼ºµÇ´Â °É ÇÇÇϱⰡ ¾î·Æ°ÚÁö¸¸... °³¹ßÇϱ⠽¬¿î°Ô ÀÏ´Ü ÃÖ°í´Ù ¶ó´Â »ý°¢¿¡.

³ªµµ °¡´ÉÇϸé ÅÛÇø´ µîÀ» Ȱ¿ëÇÏ°í ½ÍÀºµ¥ ÃæºÐÈ÷ »ý°¢Çغ¼ ½Ã°£ÀÌ ¾ø´Ù´Â °Í°ú ÁÖº¯ °³¹ßÀÚµéÀÇ Áö½Ä°ú ´É·Â¿¡ ¸ÂÃç¾ß µÈ´Ù´Â °ÍÀÌ Âü Èûµé¾î... ¾î´À ¼¼¿ù¿¡ ÅÛÇø´ °³³ä ¼³¸íÇÏ°í ±× ¼ö¸¹Àº Äڵ带 ÀüºÎ ÀüȯÀ» Çϳª... -_- 
Þ«è¡ (09-10-07 22:06) ¡¿
¼³¸íÇϽб¸Á¶°¡ ÀÏÅÍ¿¡¼­ º¸´Â Àͼ÷ÇÑ ±¸Á¶ÀÎ °Í °°Àº ´À³¦ÀÌ µå´Â °Ç ±âºÐ Å¿À̰ÚÁÒ?[...] 
¾¦°« (09-10-08 02:12) ¡¿
Àú´Â
struct S2U_CONNECT
{
int universeID;
};
D_PACKET_1( S2U_CONNECT, packet_id_US::S2U_CONNECT, universeID );
ÀÌ·¸°Ô ÇØ¼­ struct¿¡ °ª ä¿ì°í send_packet¿¡ struct ³Ö¾î ¹ö¸³´Ï´Ù. 
tokki7 (09-12-28 21:48) ¡¿
À¸Èæ.. »õ·Î ÇÏ´Â ÇÁ·ÎÁ§Æ®¿¡¼­µµ °á±¹ ÆÐŶ Á÷·ÄÈ­¸¦ ÇØ¾ß ÇÏ´Â ´Ü°è¿¡ À̸£·¶´Ù.

¿¾³¯ÀÌ ±×¸³´Ù... 
   

¸®ÇÃÀº ¹Ý¸»·Î ÀÛ¼ºÇϰí, "´Ù." ȤÀº "°¡?"·Î ³¡³»µµ·Ï ÇÑ´Ù.
 
ricanet.com
¹Ý¸» ºí·Î±×

¼Ò°³ :: ºí·Î±× :: »çÁø :: ¹æ¸í·Ï

¨Þ 6½Ã°£ Àü, rein: ºô·ÁÁáÀ» ¶§ ¿¹±âÇß¡¦
¡Ü 8½Ã°£ Àü, Ã¥ÀÐÑÀ - ¼öÇÐÀÇ È®½Ç¼º {¡¦
¨Þ 11ÀÏ Àü, Dish: ºñ°ÌÇÏ´Ù? ... ±Ù¼º¡¦
¨Þ 16ÀÏ Àü, Rica: @landy ½ÃÀû Çã¿ëÀÌ¡¦
¨Þ 16ÀÏ Àü, landy: ÀÌ ¾÷µ¥ÀÌÆ®ÀÇ ¸ñÀû¡¦
¨Þ 24ÀÏ Àü, Rica: @QnA_joaa ¼öÁ¤Çß´Ù¡¦
¡á 25ÀÏ Àü, flickr/4767238445
¡á 25ÀÏ Àü, flickr/4767870418
¨Þ 27ÀÏ Àü, Rica: @QnA_joaa A¤¿.....¡¦
¨Þ 28ÀÏ Àü, QnA_joaa: Rename Ç÷¯±×ÀΡ¦


XML-RSS:Blogºí·Î±×RSS
XML-RSS:Pictures»çÁøRSS