[完]MMORPG_Server,Client[2010-2-5].zip

MapTool_3D Water, fog, snow 완료.zip


음...
DirectX 는 2009, 10월 버젼 이었던거 같네요.
VS 2008 작업입니다.

사실 지금 보면 보잘것 없는 소스이긴 한데, 공부하시는데 도움이 되길 바라는 마음으로 공개합니다..

저작자 표시 비영리 변경 금지
신고
블로그 이미지

프로그래머 지향자 RosaGigantea

바쁜 일상 생활중의 기억 장소


일본에 있으면서.. 슬슬 어학과정도 끝나고해서, 이전의 프로그래밍 감각을 살려볼까 하는 취지에
만들었습니다.

이전 학교에서 턴프로젝트로 만들었던 리눅스 epoll 소스를 사용해서 (덕분에 DB는 MySQL을 사용했습니다)
윈도우 IOCP 서버 구축에 1주일,
클라이언트 제작에 3일.. 서로 데이터 동기화에 3일
총 2주 걸렸네요 orz

일단 결과물 입니다..
<서버 화면>

별볼일 없는 콘솔 화면 입니다..
현재 서버 시간을 1초 마다 갱신하게 만들었습니다.
위의 /last 같은것은 명령어 입니다.


다음 클라이언트 화면 입니다.
3D를 하는것이 좋긴 하지만, 그런거 빠지다간 끝이 없기때문에,
간단하게 현재 서버가 잘 작동되는지 눈으로 확인 가능한 2D GUI 클라이언트 입니다.
DirectX 2D 조차 쓰지 않은 순전 MFC 입니다.. @_@
맵도 원래는 바둑판처럼 가이드선을 그을려고 했는데
재미 없을꺼 같아서 소프트맥스의 창세기 외전2 템페스트의 세계 지도를 가져와 멋대로 붙였습니다.

밑에 서버 IP, port 입력하고 (디폴트 127.0.0.1:9000) connect 하면 서버에 연결됩니다.

ID와 암호를 채팅창으로 입력하면
플레이어 (마리오), 주변의 적(쿠퍼) 들이 뜹니다.

월드의 전체 크기는 5000x3200 으로 적은 렌덤으로 1000개가 뿌려지게 했습니다.
그리고 내 주변의 적들의 위치(거리 약 400), 방향, 타입, 등등의 위치를 recv 받아서 근처에 뿌려줍니다.

물론 다른 플레이어(클라이언트)도 마리오 형상으로 띄어줍니다.
단, 마리오 머리 위에 해당 클라이언트의 ID를 띄어놓게 했습니다.

채팅서버가 기본이므로. 채팅이 제대로 되는지 확인하기 위해 3개의 클라이언트를 띄었습니다.
클라이언트의 채팅은, 자기 주변 (약 200)안의 것들만 통신이 되게 했습니다.

1번 클라이언트 Miss.Ninja의 화면


2번 클라이언트의  Miss.Kim의 화면


3번 클라이언트 Miss.Rin의 화면


채팅내용을 잘 살펴보시면
가운데 닌자 클라이언트는 Kim과 Rin의 이야기를 다 듣지만, 다른 클라이언트는 닌자 클라이언트만 통신이 됩니다.


저작자 표시 비영리 변경 금지
신고
블로그 이미지

프로그래머 지향자 RosaGigantea

바쁜 일상 생활중의 기억 장소


음.. mysql6.0 으로
rosagigantea db 에.. log, user, error 관련 DB 테이블을 생성해야 함...
저작자 표시 비영리 변경 금지
신고
블로그 이미지

프로그래머 지향자 RosaGigantea

바쁜 일상 생활중의 기억 장소

본 과제는 4학년 1학기 게임서버 프로그래밍 과목에서 했던 프로젝트 입니다.

환경은 아래와 같습니다.

OS

유분투 리눅스

Editer

Vi… 나중엔 Ultra Editer

System CPU

아마 펜티엄3 800Mhz 급으로 추정 ㅡ_ㅡ;;

SQL

MySQL

연결

Putty , Ultra Editer


과제의 요구사항

1. 가상의 2차원 공간에서 이동하며 서로 채팅 할 수 있는 시스템을 만든다
   가상공간의 크기는 x,y축 모두 -5000~ +5000 까지이며 meter 단위로 간주한다

2. 채팅서버는 telnet을 client로 이용한다 각 서버는 master mode와 slave mode로 실행이 가능하다

3. 한 채팅 서버 시스템에는 한 개의 마스터 모드 서버와 복수의 슬레이브 모드 서버가 존재한다.

4. 슬레이브 모드 서버는 클라이언트로부터의 telnet 연결을 처리하고, 마스터모드 서버와의 통신을 수행한다.

5. 마스터 모드 서버는 클라이언트로부터의 telnet연결을 처리하고, 필요한 DB access를 수행하며,
   슬레이브 모드 서버와의통신을 수행한다

6. 접속중인 전체 사용자의 모든 정보는 슬레이브 모드 서버에서도 유지되며, 접속중인 사용자에
   대한 중복 로그인 방지, /who 명령의 처리 등에 그 정보를 이용하여 마스터 – 슬레이브 모드 서버간
   통신량을 줄여야 한다.

7. 필요한 구체적 기능

  가. Login name/password를 DB에 저장(user table)
     telnet 연결후 로그인 / 패스워드 체크 후 일치할 경우만 입장 허용

  나. Login/logout 기록을 DB에 저장(log table)

  다. 중복된 로그인 체크/방지
     이미 로그인 한 사용자의 로그인 네임으로 로그인 할경우, 이미 사용중이란 메시지 띄우고 연결 해제.
     해당 로그인 클라이언트는 다른곳에서의 로그인 접속이 있다고 경고 메시지 보냄.
 
   라. 명령어.
      / 로 시작

명령어

기능

/user 

전체 사용자 목록

/who 

현재 접속중인 사용자 목록, 좌표등 관련 정보 표시

/who <login> 

특정 사용자의 정보
접속중 : 접속한시간, 현재 좌표 표시
접속중이 아닐 때 : 마지막 logout 시간, 그 좌표 표시

/passwd <password> 

패스워드 변경

/last <who> <num> 

사용자의 최근 사용내역 조회

/walk 

1m/s 속도로 전진. 3초마다 현재 위치 표시

/run 

10m/s 속도로 전진. 3초마다 현재 위치 표시

/stop 

현 위치에 정지

/toward <azimuth> 

방위각 전환(절대값)

/tleft <angle> 

왼쪽으로 <angle> 만큼 회전 (상대값)

/tright <angle> 

오른쪽으로 <angle> 만큼 회전(상대값)



   마. /toward, /tleft, /tright는 정지시에만 가능
  
   바. * '/'로 시작하지 않는 입력은 채팅 메시지로 간주

   사. 시야 내에 있던 상대방이 시야 밖으로 나가거나, 그 반대의 경우 이를 알려준다.

   아. 가시거리는 100m, 가청거리는 50m로 한다.

   자. 5분마다 현재 시간을 사용자에게 보여주도록 한다.
   
 8. 서버간 통신을 위한 패킷 구현 …

===========================================================================================
전 저기서 7번까지만 구현하구 GG 쳤습니다. ㅜㅜ
일정도 꼬였고.. visual studio로 소스 확인하면서 vi에 그대로 다시 치고.. make 하고…
어떻게 마스터 서버를 구현하고 슬레이브 만들려 하니... 좀 갈아 엎어야 하고..
기한 1주일 남았을 때.. ultra editer의 아주 편한 기능이 있었다는걸 알았을땐 ….
( http://rosagigantea.tistory.com/267 )


사용자 삽입 이미지

… 세상은 하얗더군요..

프로그램 자체는.. 정말 아주 단순한 심플한 게임서버 입니다.

제가 하는 에밀크로니클 온라인..(라그나로크 같은)처럼 3차원도 아니고
2차원에다가.. (아니.. 요즘 대다수 MMORPG 그래픽이 3D이지만 자세히 보면2D 좌표계…)
케릭터 뿌리는것도 없고
단지.. 이동만 가능. 그렇다고 케릭터 회전값이라던가 그런것도 없죠.
사거리에 따른 채팅 메시지 전달 (즉, 내 주변의 있는 클라이언트를 검출하는 알고리즘)
실시간 움직이고 있는 것을 예측하는 시스템(DRM)
DB와의 연동(MySQL)을 과부화 주지 말아야 하고(실시간 DB 저장보단 일정시간 후 저장)
네트워크 부하를 낮추기 위해 패킷을 한데 묶어 동시에 보내기(Queue)
사용자 감시를 위해 log table 따로 관리
중복 접속자 처리를 방지해야 하고..

음… 이런 복잡한 처리가 있는게 게임 서버 기술입니다 ;_;

신고
블로그 이미지

프로그래머 지향자 RosaGigantea

바쁜 일상 생활중의 기억 장소

사용자 삽입 이미지실행화면

 

messenger.ZIP

 

일단 이런 형식의 메신져가 만들었고.. 의외로 메신져가 만만한 프로그램이 아닌걸 깨닭았습니다
좀더 보강할점도 많고

프로그램을 올려보았습니다만.
이 컨텐츠를 이용하실땐 여기 댓글이나 이메일 galaxy_wiz@naver.com 정도는 해주세요

 

신고
블로그 이미지

프로그래머 지향자 RosaGigantea

바쁜 일상 생활중의 기억 장소

티스토리 툴바