Gamescom 2011 참가안내

by nettadmin / 2011. 08. 25. [09:43]

Gamescom 에 넷텐션이 참가 합니다.

행사안내
일정: 2011년 8월17일(수)~20일(토)
장소: Kolenmesse, Cologne, Germany

여러분의 많은 성원 부탁드립니다

3. 넷텐션 뉴스

ProudNet for Unity3D 클로즈 베타 버전 단계에 있습니다.

by nettadmin / 2011. 08. 24. [16:18]

ProudNet for Unity3D가 클로즈 베타 버전 단계에 있습니다.

 

ProudNet for Unity3D는 요새 많이 쓰이는 게임 엔진 '유니티'를 위한 게임 서버&네트워크 엔진입니다.

 

ProudNet과 ProudNet for Unity3D에 있는 패킷 암호화, 패킷 압축, RPC 기능등이 있고, 분산 서버 개발 모듈과 DB cache 시스템은 쉽게 온라인 게임을 만들 수 있게 합니다. 서버사이드 개발 언어는 C++과 C#이 사용 가능하고요. 1개 서버 프로세스에서 동시접속 수만명이 가능합니다. 멀티 샤드로 구축하면 훨씬 더 늘어나겠죠.

 

ProudNet for Unity3D와 C++용 ProudNet의 API는 동일하고, 심지어 C++ 클라이언트와 Unity3D 클라이언트간 멀티플레이도 가능합니다! FPS, MMORPG 뭐든지 개발 가능하죠.

 

당연히, ProudNet API에 있는 P2P 관련 기능도 Unity3D에서 쓸 수 있습니다. 

 

(평가판 신청은 http://www.nettention.com/ 에서 해주세요.)

4. 개발 이야기

ChinaJoy 2011 넷텐션 참가안내

by nettadmin / 2011. 08. 01. [09:43]

ChinaJoy 2011 에 넷텐션이 참가 합니다.

행사안내
일정: 2011년 7월28일(목)~29일(금)
장소: New International Expo Center, Shanghai, China

여러분의 많은 성원 부탁드립니다.

3. 넷텐션 뉴스

ProudNet for Flash가 베타 단계에 있습니다.

by nettadmin / 2011. 07. 20. [16:53]

ProudNet for Flash 클로즈 베타 버전 단계에 있습니다.

 

ProudNet for Flash는 요새 대세인 '웹 게임', '소셜 게임'을 위한 게임 서버&네트워크 엔진입니다.

 

ProudNet과 ProudNet for Flash에 있는 패킷 암호화, 패킷 압축, RPC 기능등이 있고, 분산 서버 개발 모듈과 DB cache 시스템은 쉽게 온라인 게임을 만들 수 있게 합니다. 서버사이드 개발 언어는 C++과 C#이 사용 가능하고요. 1개 서버 프로세스에서 동시접속 수만명이 가능합니다. 멀티 샤드로 구축하면 훨씬 더 늘어나겠죠.

 

ProudNet for Flash와 C++용 ProudNet의 API는 동일하고, 심지어 C++ 클라이언트와 Flash 클라이언트간 멀티플레이도 가능합니다! 성능도 잘 나옵니다. ProudNet for Flash는 실시간 멀티플레이 MMORPG(턴 방식이 아니라, World of Warcraft처럼 실시간 전투)도 개발할 수 있게 해줍니다.

 

당연히, ProudNet API에 있는 P2P 관련 기능도 Flash에서 쓸 수 있습니다. 다만, 플래시는 TCP만 사용하기 때문에 플래시 클라이언트와 다른 클라이언트는 P2P가 relay로 작동한다는 차이만 있을 뿐입니다.

 

아직 소셜 게임이나 웹게임에서 MMORPG류 장르는 미개척지입니다. ProudNet for Flash를 사용해서, 그 미개척지의 정상에 서보십시오!

 

(평가판 신청은 http://www.nettention.com/ 에서 해주세요.)

4. 개발 이야기

"서울 게임 콘텐츠 센터" 1기 입주기업 중 성과 평과 1위 득!

by nettadmin / 2011. 07. 13. [10:54]

서울시 SBA에서 지원하는 "서울 게임 콘텐츠 센터" 1기 입주기업 10개 중 저희 회사 넷텐션이 성과 평가 1위를 득 했습니다!

 

두둑한 포상도 주어졌습니다! 룰루랄라~

 

서울시 SBA에서 지원하는 "서울 게임 콘텐츠 센터"... 우량 신생 게임 기업들에게는 좋은 지원이 됩니다. 많은 관심 바래요.

 

3. 넷텐션 뉴스

(주)펀트리와 ProudNet 라이선스 공급 계약

by nettadmin / 2011. 06. 22. [07:45]

2011년 6월30일자로 펀트리의 "본 투 파이어" 프로젝트에 ProudNet 라이선스를 공급하게 되었습니다.

항상 최선을 다하는 넷텐션이 되겠습니다.

감사합니다. 

2. 고객사 소식

(주)NNG랩과 ProudNet 라이선스 공급 계약

by nettadmin / 2011. 06. 01. [07:44]

2011년 5월30일자로 NNG랩의 "서유기전" 프로젝트에 ProudNet 라이선스를 공급하게 되었습니다.

항상 최선을 다하는 넷텐션이 되겠습니다.

감사합니다. 

2. 고객사 소식

ITS GAMES 2011 게임 수출 상담회 참가 안내

by nettadmin / 2011. 05. 12. [09:42]

ITS GAMES 2011 게임 수출 상담회에 넷텐션이 참가 합니다.

행사안내
일정: 2011년 5월16일(월)~17일(화)
장소: 서울, 워커힐 호텔 비스타홀

여러분의 많은 관심 부탁드립니다.

3. 넷텐션 뉴스

LOGIN 2011 Conference 참가 안내

by nettadmin / 2011. 05. 12. [09:42]

LOGIN 2011 Conference에 넷텐션이 참가 합니다.

행사안내
일정: 2011년 5월16일(월)~18일(수)
장소: Meydenbauer Center, 11100 NE 6th Street, Bellevue, WA, USA

여러분의 많은 성원 부탁드립니다.

3. 넷텐션 뉴스

패킷 송수신 코딩 중 실수를 예방하는 법

by nettadmin / 2011. 04. 29. [14:56]

넷텐션에서 타사 파견 기술지원이나 기술 영업 미팅을 나가서 개발중인 게임 소스를 보다 보면 간혹 패킷 송수신 처리를 실수하거나 관련 고생을 하는 경우를 자주 봅니다.

 

그럴만도 한게, 패킷 송수신 처리는 많은 노가다 코딩을 수반하기 때문입니다. (아래는 그 예)

// Message header ID definitions
#define Message_Knight_Move_ID 12
#define Message_Knight_Attack_ID 13// Message format definitions
struct Message
{int m_msgID;
};
struct Message_Knight_Move:public Message
{int m_id;   float m_x,m_y,m_z;
};
struct Message_Knight_Attack:public Message
{int m_id;int m_target;int m_damage;
};// A function which send a formatted message
void Knight_Move(int id,float x,float y,float z)
{Message_Knight_Move msg;msg.m_msgID=Message_Knight_Move_ID;msg.m_id=id;msg.m_x=x;msg.m_y=y;msg.m_z=z;Send(msg);
}// A function which send a formatted message
void Knight_Attack(int id,int target,int damage)
{Message_Knight_Attack msg;msg.m_msgID=Message_Knight_Attack_ID;msg.m_id=id;msg.m_target=target;msg.m_damage=damage;Send(msg);
}// Identified a received message and call an appropriate function for message handling
void DoReceivedMessage(Message* msg)
{switch(msg->m_msgID){case Message_Knight_Move_ID:{Message_Knight_Move* msg2= (Message_Knight_Move*)msg;Do_Knight_Move(msg2->m_id,msg2->m_x,msg2->m_y,msg2->m_z);}break;// ... cases for other message typescase Message_Knight_Attack_ID:{Message_Knight_Attack* msg2=(Message_Knight_Attack*)msg;Do_Knight_Attack(msg2->m_id,msg2->m_target,msg2->m_damage);}break;// ... cases for other message types}
}

코딩하는 것도 노가다이지만, 무엇보다도, 코딩하다가 행여나 실수라도 하면 찾기 힘든 버그가 되기도 합니다. 오랫동안 소스를 유지보수하다보면 저기서 실수를 하는 사람들이 꼭 있습니다. 이 글을 쓰는 이유는, 오늘도 그런 실수를 하는 케이스를 제보받았기 때문입니다. (프라우드넷 쓰는 업체는 아니었음)

 

저런 노가다 코딩을 사람 대신 기계가 자동으로 해줄 수 없을까?라는 할 수 있죠. 그리고 나온 결론은 RPC or RMI를 쓰자~! 입니다. 다행히 RPC나 RMI는 이미 Java나 Win32 등에서도 제공하지만 그것들은 게임에 쓰기에는 너무 범용적이고 불필요한 기능이 많죠. 시각을 다투는 게임 프로그램에서는 부담스럽습니다.

 

그래서 RPC 시스템을 직접 만드는 것이 좋습니다. 그렇게 하면 사람이 직접 상기 코드를 짜는 것과 처리 속도가 같습니다.

 

가령,

Knight_Move([in] int id,[in] float x,[in] float y,[in] float z);
Knight_Attack([in] int id,[in] int target,[in] int damage);

 

이렇게 선언해주면 위의 노가다 코드를 기계가 생성해주는거죠. 일도 쉬워지고, 무엇보다도 실수를 원천봉쇄합니다.

 

자체 RPC 시스템을 만드는 법은 Game Programming Gems 5에서 배현직님이 기고해 주셨습니다.

 

참고로, 프라우드넷에서도 같은 기능을 (물론 Game Programming Gems 책에 나온 것보다 앞서 있는 기능을 가진) 기능을 제공합니다.

4. 개발 이야기