OGP, Online Game Protocols #
ÀÌ ±ÛÀº »ý°¢³ª´Â´ë·Î ÆíÁýÁßÀÔ´Ï´Ù. Å»°íÇÏÁö ¾ÊÀº »óÅÂÀ̹ǷΠÀ¯³äÇÏ¿© ºÁ ÁÖ¼¼¿ä.
ÇÁ·ÎÅäÄÝ º£À̽º, Áï °¡Àå ±âº»ÀûÀÎ ¾à¼ÓÀ» ¸»ÇÑ´Ù. ÇÁ·ÎÅäÄÝ º£À̽º´Â 1) °³°³ÀÇ ÆÐŶÀ» ±¸ºÐÇÏ´Â ¹æ¹ý°ú 2) ÆÐŶÀÇ ±¸Á¶¸¦ ÀǹÌÇÑ´Ù. ÀϹÝÀûÀÎ ÇÁ·ÎÅäÄÝ¿¡¼´Â PCÅë½Å ¹æ½ÄÀÇ Line Buffering ¹æ½Äµµ ÀÌ¿ëµÇÁö¸¸, ÃÖ±ÙÀÇ ¿Â¶óÀΰÔÀÓ¿¡¼´Â Binary Structured PacketÀÌ °¡Àå ¸¹ÀÌ »ç¿ëµÇ¾îÁø´Ù.
Line ±â¹Ý Text ÇÁ·ÎÅäÄÝ #
ÇÑ ¶óÀÎÀÇ ³¡ÀÎ CR ȤÀº LF¸¦ ±âÁØÀ¸·Î ÇÏ¿©, ÇϳªÀÇ ÆÐŶÀ¸·Î Ãë±ÞÇÏ´Â Åë½Å¹æ½ÄÀÌ´Ù. HTTP, TELNET, FTP, NNTP, SMTP, rlogin µî ´ëºÎºÐÀÇ À¯¸íÇÑ ÀÎÅÍ³Ý ¼ÒÇÁÆ®¿þ¾îµéÀº ÀÌ ¹æ½ÄÀÇ ±â¹ÝÇÁ·ÎÅäÄÝ·Î ±¸¼ºµÇ¾î ÀÖ´Ù. ÀÎÅͳÝÀÇ ÃÊâ±â¸¦ ÁöÈÖÇÏ´ø unix ¼¹öµéÀÇ ÄܼÖƯ¼º¿¡¼ À¯·¡µÈ µíÇÏ´Ù.
ÀÌ ÇÁ·ÎÅäÄÝÀº, ¿À·ù¿¡ °ÇÏ°í µð¹ö±ëÀÌ ¿ëÀÌÇÏÁö¸¸ CR À̳ª LF¸¦ ¸¸³ª±â Àü±îÁö ¾ó¸¶¸¸ÅÀÌ ÇϳªÀÇ ÆÐŶÀÎÁö ¾Ë ¼ö ¾ø°í, ÇϳªÀÇ ÆÐŶÀ» Àü¼Û¹Þ¾Ò´Ù°í ÇÏ´õ¶óµµ º°µµÀÇ ÆĽÌÀ» ÅëÇØ ÆĶó¹ÌÅ͵éÀ» ºÐ¸®Çس»¾ß ÇϹǷΠ- µ¢´Þ¾Æ ¹®ÀÚ¼ýÀÚ¸¦ ¼ýÀÚ·Î ¹Ù²Ù´Â Àϸ¶Àú ÇØ¾ß ÇÑ´Ù - ÇÁ·Î±×·¡¸ÓµéÀÌ ´ëü·Î ½È¾îÇÏ´Â °æÇâÀÌ ÀÖ´Ù. Áï, ¾ÈÁ¤¼º/µð¹ö±ëÆí¸®¼ºÀº ¿ì¼öÇÏÁö¸¸ °³¹ßÀÌ ±î´Ù·Ó´Ù. À¯¿¬¼ºÀÌ ÁÁ´Ù.
±¸Çö¿¹ (¼Û½Å)
sprintf(packet, "%d %d %d %s\n", packet1.id, packet1.count, packet1.action, packet1.charname);
socket.send(packet, strlen(packet));
±¸Çö¿¹ (¼ö½Å)
nsize = DetectCR(socket.recvbuffer); // 1°³ÀÇ ÆÐŶ ¿Ï¼º È®ÀÎ
if(!nsize) return;
memcpy(packet, socket.recvbuffer, nsize); // ¼ö½Å¹öÆ۷κÎÅÍ º¹»ç
ParseString(packet, " ", arr_packet); // ÆÐŶ ¿ä¼Ò ±¸ºÐ
...
Structure ±â¹Ý Binary ÇÁ·ÎÅäÄÝ #
±¸Á¶Ã¼¸¦ Åë°·ÎÇÏ¿© ¹ÙÀ̳ʸ®·Î Àü¼ÛÇÏ´Â ¹æ½ÄÀÌ´Ù. 1¹ÙÀÌÆ®ÀÇ ¿À·ù¸¸À¸·Î Åë½ÅÀÌ ³¡À峪´Â Ä¡¸íÀûÀÎ ´ÜÁ¡À» °¡Áö°í ÀÖÁö¸¸, ±¸Á¶Ã¼ ±×´ë·Î Àü¼ÛÇÏ°í Àü¼Û¹ÞÀ» ¼ö ÀÖÀ¸¹Ç·Î ÇÁ·Î±×·¡¸ÓµéÀÌ ¼±È£ÇÑ´Ù. ¾ÈÁ¤¼º/µð¹ö±ëÆí¸®¼ºÀÌ ¶³¾îÁø´Ù. À¯¿¬¼ºÀÌ ¾ø´Ù. °³¹ßÀÌ ½¬¿îÆíÀÌ´Ù.
±¸Çö¿¹ (¼Û½Å)
socket.send(&packet, sizeof(packet));
±¸Çö¿¹ (¼ö½Å)
if(ispacket(socket.recvbuffer)) // 1°³ ÆÐŶ¿Ï¼º°Ë»ç
memcpy(packet, socket.recvbuffer, sizeof(packet)); // ÆÐŶ ±¸Á¶Ã¼·Î º¹»ç
...
Flexibility #
°³¹ß ´Ü°è¿¡¼ ÀÚÁÖ ¹ß»ýÇÏ´Â ÆĶó¹ÌÅÍÀÇ °¹¼öº¯È³ª µ¥ÀÌÅÍÀÇ ¹üÀ§º¯È¿¡ ´ëÇؼ ÇÁ·ÎÅäÄÝÀº ¹öÀüÀ» ¿Ã¸®Áö ¾Ê´õ¶óµµ ¹Ù·Î ó¸®ÇÒ ¼ö ÀÖµµ·Ï ÀÛ¼ºµÇ¾îÁ® ÀÖ¾î¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î Á¤¼ö 4°³¸¦ ½Ç¾î º¸³½´Ù°í ÇÒ ¶§¿¡ ´ÙÀ½ µÎ°¡Áö »óȲÀ» °í·ÁÇØ º¸ÀÚ. ¸¹Àº °³¹ßÀÚµéÀº ´ÜÁö! ÇÁ·Î±×·¡¹ÖÇϱ⠽±´Ù´Â ÀÌÀ¯¸¸À¸·Î 1)°ú °°Àº ¼³°è¸¦ Çعö¸®°í½ÍÀº °ÇÑ À¯È¤À» ¹Þ´Â´Ù.
// #1
// ¼ýÀÚ¸¦ 3ÀÚ¸®·Î Á¦ÇÑÇÏ¿©, ºóÀÚ¸® 0 À» ä¿ìµµ·Ï ÇÑ´Ù.
// ¿¹) 001:002:003:004
// #2
// ¼ýÀÚÀÚ¸®¼ö¿¡ Á¦ÇÑÇÏÁö¾Ê´Â´Ù.
// ¿¹) 1:2:3:4
¾î¶² ÀÌÀ¯¿¡ ÀÇÇؼ 3ÀÚ¸®¸¦ ÃÊ°úÇÏ´Â ¼ýÀÚ°¡ Àü´ÞµÇ¾î ¿Ã ¼öµµ ÀÖ°í, ÆĶó¹ÌÅÍ°¡ 5°³ ÀÌ»óÀÌ ¿Ã ¼öµµ ÀÖ´Ù. ÇÁ·Î±×·¥Àº ÀÌ·± ³ÍÅ©¸®Æ¼Äà ¿À·ùµé¿¡ ´ëÇؼµµ ´ëºñ¸¦ ÇØ¾ß ÇÏÁö¸¸, ÇÁ·ÎÅäÄݵµ ÀÌ Á¤µµÀÇ À¯¿¬¼ºÀ» °¡Áö°íµµ·Ï ¼³°è µÇ¾î¾ß ÇÑ´Ù.