본 과제는 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

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

티스토리 툴바