블로그 이미지
fiadot_old

칼퇴근을 위한 게임 서버 개발 방법론에 대한 심도있는 고찰 및 성찰을 위한 블로그!

Rss feed Tistory
Idea/portpolio 2003. 9. 25. 23:24

RealTime Rendering Using HeightMap(진행중)

현재 8Bit 레벨데이터를 가지고 지형을 생성하는데

초점을 맞추고 진행중에 있다.

스샷(와이어출력)



현재 조명과 텍스쳐까지 진행되었으며

앞으로 카메라에 대한 모듈이 추가되어야 한다.

자세한 진행사항은 위키에서 [GenerationOfTerrain] 을 참고...
,
Idea/portpolio 2003. 9. 20. 11:55

포트스케너 [소스포함]

[개발기간]
2003년 초 몇일 ^^;

[플랫폼]
Based Windows 9X/NT

[팀]
해커스쿨 연구소 WiseGuys 1기


[설명]
간단한 포트스케너
TCP계층에서 Connect의 여부에 따라 포트 ON/OFF를 체크

,
Idea/portpolio 2003. 9. 20. 11:51

[Infinity Engine Ver 5.2.0] 스노우팡EX 서버 관리툴

[개발기간]
2003년 8월 말~ 2003년 9월 15일

[플랫폼]
Based Windows 9X/NT


[설명]

이전에 테스터의 확장판이라고 볼수있다.

매번 폰번호 조회좀 해달라.. 순위좀 보자..

이런거 할때 짜증나서...

이번에는 내가 좀 편해보자고 제대로 짰다 ^^..

(나름대로 ㅡㅡ;; 하지만 이것도 하다보니 지겨워 져서 꼭 필요한 기능만 넣었다...ㅋㅋ)





아무나 쓰면 큰일나지.. 인증과정을 거친다.



전체 서버의 메니지먼트를 담당한다.
서버가 살았나 죽었나 체크해볼때 쓰는 탭.



공지사항이나 정보이용료안내(KTF네트워크게임 필수사항)을
수정할때 SQL메니저 띄울필요없이 바로 할수있다.
간단한놈이지만 만들어놓으니까 꽤나 쓸만하다..ㅋㅋ



제일 많이 쓰이는 놈이다.
폰번호를 통해 유저정보를 조회해볼수 있기때문에...
그리고 캐릭수정,삭제,추가 등등 쿼리 맹글필요없이
바로바로 할수있어서.... 몸이 편해진다 ^^



게임서버엔트리 정보를 긁어와서 보는데 쓰인다.
현재사용자 정보를 통해 이놈이 언제접속하고 마지막으로 패킷보낸게 언제인지 확인할수있다(게임서버에서도 가능 ^^)..



파일서버의 리소스를 하나씩 올리는걸 넣으려다가
그냥 복사하는게 더 편할꺼 같아서 다 빼버리고
서버에 리소스업데이트 패킷하나만 추가해서 복사하고 버튼찍 누르면 리소스풀을 자동으로 릴리즈하고 다시 할당해준다 ^^
,
Idea/portpolio 2003. 9. 20. 11:32

[Infinity Engine Ver 5.2.0] 스노우팡EX 서버

[개발기간]
2003년 7월 중순 ~ 2003년 9월 15일

[플랫폼]
Based Windows NT계열


[설명]

장장 3개월에 걸친 대작(?) 이었다..으흐흐..

스탠드얼론형의 스노우팡의 차기 버젼으로

네트워크 대전게임이다.

클라이언트의 이미지를 올리려 했으나...

귀찮아서 놔두고 있다. (사실 클라이언트는 내가 안짰기 때문에 ^^;)



이번에 서버를 짜면서 가장 염두해둔부분은 확장성이다.

모듈의 확장성이 아니라...

동시접속자의 증가에 따라 실시간으로 게임서버를 늘릴수 있게...

뭐 요즘나오는 대부분의 게임에서 다 지원하는 기능이지만...

처음으로 확장성을 고려해서 짰다는데 의의를 둔다 ^^


스노우팡EX와 관련된 서버는

파일서버, 로그인서버, 게임서버, DB서버, 더미서버로 총 5개로 구성된다.

자세한 설명은 그림과 함께 밑으로..

//
//        Infinity Engine
//
//        Written by Lee Gun-Ho(FiaDot)
//        lovin@hellonet.co.kr
//        http://www.fiadot.com
//
//        CopyRight 2003 (c)Hellonet & Lee Gun-Ho(FiaDot).
//



#define        PRJ_TITLE                        "SnowPangEX"
#define        PRJ_VERSION                        "5.2.0"
#define        CREATOR_INFO                "FiaDot(lovin@hellonet.co.kr)"
#define        CREATOR_HOMEPAGE        "http://www.fiadot.com"


//
// History~~
//

// 5.2.0
// 관리툴 프로젝트 추가!

// 5.1.0
// 더미 추가!

// 5.0.1
// 방 관련 루틴!

// 5.0.0
// 스노우팡EX용

// 4.1.1
// 로그 포맷 변경
// what? #2 버그 패치 - 패킷 사이즈 못알아올떄

// 4.1.0
// OLEDB접근을 ATL로 하며 다이나믹 엑세서 적용
// DBUser를 통해 각 서버에 하나의 소켓을 할당해서 클라이언트처럼 처리!

// 4.0.3
// 스크립트~~ 넣어야지~ 후후

// 4.0.2
// OLE DB 접근시 Lowlevel API와 ATL을 이용한 2개의 접근 방법을 포함
// API는 아직 테스트 단계, ATL은 바로 응용가능 수준.






로그인 서버는 처음 접속했을때 DB로 부터 사용자의 정보를 긁어오고, 게임서버의 목록을 가지고 각게임서버별 사용자수와 정보를 클라이언트에게 보내준다.




게임서버는 100개의 고정 방을 가지고 게임을 운영하는 역할을 한다. 만약에 대전할 상대가 없을때 더미서버를 통해 로봇을 집어넣어 사용자가 게임을 진행할수 있도록 해준다.





유저와 관련된 모든정보를 읽고 저장하는 역할을 담당한다.
그리고 유저의 순위, 전체순위등등 랭킹정보도 긁어온다~
(쿼리만든다고 죽는주 알았다 ㅡㅡ;;)


캐릭터와 맵을 업데이트 가능하도록 추가되는 리소스는
파일서버가 가지고 클라이언트에게 보내준다.
파일풀을 가지고 주기적으로 사용될때 파일을 엑세스 함으로써 발생하는 오버헤드를 줄이려고 했다.



게임서버와 연결되서 임시유저를 생성한다.
FSM(Finite State Machine)방식으로 구동되는 AI는 아이템이나 스페셜기능등을 확률과 상태에 따라 돌아가게 구현되어 있다.




뭐 별달리 대단한건 없다.

처음으로 실시간게임을 위한 서버를 구현했다는거...

(사실 클라이언트에서 보간및 실제 동기화를 다해서 나는 별로 할게 없었다 ^^;;)

확장성을 고려했다는거..

그리고 AI에 대해서 한번 생각해보는 계기가 됐다는거 정도...

우야동동 3개월동안 지긋지긋하게 텍스트만 봐서.. 죽는줄알았다.
,
Idea/portpolio 2003. 9. 20. 11:09

압축 모듈(Huffman, LZ77) + 리소스 합치기

[개발기간]
2003년 5월 15일 ~ 2003년 5월 22일

[플랫폼]
Crossflatform Lib.
  

[설명]
스노우팡의 네트워크 버젼 개발을 앞두고 대기실이나 필살기나 기타 등등...
여러가지 추가되야 할 리소스가 있는데 StandAlone버젼만 해도 200Kb가까이 되서
어쩔수 없이 만들게 됐다 ^^
  
첨에 압축을 구현하려고 할때는 자료 조사좀 하다 ZIP이나 PNG에서 사용된 Deflate알고리즘을
사용하려고 마음먹었다. 근데 압축풀때의 메모리와 CPU 효율성이 제일 중요한 폰에서는
좀 부적합한 형태라고 분석됐다.
그래서 디코딩이 빠르고 압축효율도 그럭저럭 괜찮고 별도의 메모리가 더 소비되지 않는 LZ77
을 사용해서 작업했다. 한 30%정도의 압축률을 보여주고 있어 대체로 만족한다 ^^



,
Idea/portpolio 2003. 9. 20. 11:08

스노우팡 (접속방법:멀티팩-아케이드/액션-스노우팡)

[개발기간]
2003년 5월(실제 3주정도)

[플랫폼]
Based Brew


[설명]
4일동안 비공식 대강(?) 집계 결과 1004건 다운로드.. 으하하하 대박게임~~ ㅋㅋ....
1주일에 2000건도 돌파가능할듯 하다.

,
Idea/portpolio 2003. 9. 20. 11:07

016 멀티팩 테스트 시그너쳐 자동 등록기

[개발기간]
2003년 5월...1주일정도

[플랫폼]
Based Windows 9X/NT

[설명]
3달에 한번씩 웹으로 신청해줘야 하는데.... 그게 귀찮아서 만든 놈.
트레이에 박아놓으면 알아서 돌아감 ^^
  
,
Idea/portpolio 2003. 9. 20. 11:05

[Infinity Engine Ver4.1.0] 급조한 서버 테스터

[개발기간]
2003년 4월


[플랫폼]
Based Windows 9X/NT


[설명]
뭐 하나 할때마다 마우스 열라 두들기는게 귀찮아서 아~~~~ 짜증을 왜치며
만든놈이다. 급조한 티가 팍팍 나는 큼지막한 버튼 ^^ ...
그래도 이놈이 디버깅 하는데 얼마나 편한 놈인데..아무렴..
  
,
Idea/portpolio 2003. 9. 20. 11:02

[Infinity Engine Ver4.1.0] OleDB Module

[개발기간]
2003년 4월

[플랫폼]
Based Window NT계열


[설명]
작년 초 MFC Database소켓 가지구 놀던거 생각하면 장족의 발전 ^^v
OLEDB 모듈은 따로 작성해뒀지만 주로 게임서버에만 사용되므로 DB모듈을 IOCP와 합쳐
DB서버로 돌리고 있다.


,
Idea/portpolio 2003. 9. 20. 11:00

[Infinity Engine Ver4.1.0] IOCP Server Module

[개발기간]
2003년 4월

[플랫폼]
Based Windows NT


[설명]
MFC 소켓 per 스레드를 시작으로 서버를 짜기 시작하다...
지은이 행님의 도움으로 IOCP를 접하고... MoonD서버엔진... 그담에 태어난놈이 이놈이다.
  
문디는 진짜 심혈을 기울였는데..ㅠㅠ.. 2달가까이 설계하고 코딩시작한놈이였는데..
Infinity서버의 간결함에 빠져... 버렸다 ㅡㅡ;
  
서버라 볼품은 없다. 스샷은 나중에 찍은거라 버젼과 홈페이지 주소가 안맞네..흐흐
다시한번 강조! http://www.fiadot.com ㅋㅋ
  

,
TOTAL TODAY