Giter Site home page Giter Site logo

sungminworld's Introduction

SUNGMIN WORLD

프로젝트 설명

Sungmin World 에 오신걸 환영합니다. 본 프로젝트는 게임회사 서버/네트워크 직군 구직용으로 사용할 개인 포트폴리오 입니다.

시연 영상

클릭시 이동 (클릭시 이동)

서버 클래스

class description
IocpBase IOCP 부모 클래스
MainIocp IocpBase를 상속받는 메인 서버 클래스
DBConnector DB 쿼리 수행 클래스

구현 기능

sungminworld's People

Contributors

limsungmin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

sungminworld's Issues

세션 생성 방식 개선

현재 성민월드의 최대 클라이언트 갯수는 100개로 제한되어 있습니다
클라이언트는 0~99 사이의 숫자를 랜덤 생성해 서버에게 등록을 하고요
하지만 이 방식은 동일한 세션 아이디도 나올 수 있고 관리가 어려워지기 때문에
사용자 계정을 기준으로 세션을 생성해 서버에서 관리할 필요가 있습니다

완료 조건

  • 사용자 계정 기준으로 세션을 생성할 수 있도록 한다

서버에서 비정상종료 클라이언트 감지

클라이언트가 비정상종료되면 서버에 반영이 안되 정보가 그대로 남아있는 문제가 있습니다.
서버에서 스레드하나를 추가로 만들어 일정 시간마다 전체 클라이언트 소켓에게 신호를 쏴
응답이 없는 클라이언트가 있는지 감시하는 기능이 필요합니다.

완료 조건

  • 비정상종료 클라이언트 감지 기능 추가

채팅시 서버 hang 버그

iocp 클래스 재편 후 채팅시 서버가 hang 상태가 되는 버그가 있습니다

완료 조건

  • 정상적인 채팅이 가능하도록 함

통신 최적화

플레이어 동기화는 각각 클라이언트가 틱마다 서버에게 자신의 정보를 전달하고 서버는 다른 플레이어의 정보를 클라이언트에게 전송해주는 방식을 사용하고 있습니다.
하지만 매 틱마다 통신을 시도하기에 부하가 굉장히 많이 걸립니다. (144hz 인경우 초당 144번 통신)
따라서 매 틱이 아닌 일정 시간마다 동기화 할 수 있도록 해야합니다.

완료 조건

  • 플레이어간 동기화 통신량을 줄일 수 있도록 한다

새 플레이어 입장 로직 개선

현재 클라이언트에선 새 플레이어 입장했을때 스폰 처리를 비효율적으로 하고 있습니다
매 틱마다 서버의 정보를 토대로 월드를 스캔해 없으면 스폰하는 방식을 사용하고 있지요
이를 개선해 서버에서 새 플레이어 입장 신호가 있을때만 클라이언트에서 스폰할 수 있도록 해야합니다

완료 조건

  • 서버에서 클라이언트 입장 패킷을 받았을 때 에만 캐릭터를 스폰할 수 있도록 한다

다른 캐릭터 이동시 애니메이션 플레이

다른 플레이어의 캐릭터를 SetActorLocation 를 통해 옮기면
위치만 옮겨지고 애니메이션이 보여지지 않는 문제가 있음

완료 조건

  • 다른 플레이어 캐릭터의 애니메이션도 볼 수 있도록 한다

중복 로그인 방지

지금 로그인 기능은 중복 로그인 확인을 안하고있습니다
이미 로그인된 계정엔 들어갈 수 없도록 개선해야합니다

완료 조건

  • 중복 로그인 방지 기능을 추가한다

사용자 비밀번호 암호화 & 복호화

현재 로그인 화면에서 로그인시 사용자의 암호가 평문 그대로 전달되고 있습니다
이를 암호화 한 후 서버에게 전달할 필요가 있지요

완료 조건

  • 사용자의 비밀번호를 암호화 & 복호화 할 수 있도록 한다

Translate

Hy, can you translate to english maybe?

함수 포인터를 사용한 패킷 처리

switch 문을 이용해 패킷의 종류에 따라 처리하는 방식은 case가 많아질수록 성능이 저하될 수 있습니다
관리도 어려워지고 가독성도 떨어지지요
이를 함수 포인터로 관리할 수 있도록 해야합니다

완료 조건

  • 기존의 switch 문으로 처리하던 패킷처리를 함수 포인터로 처리할 수 있도록 한다

클라이언트 recv 스레드를 Game Instance 로 변경

현재 클라이언트의 socket recv 스레드는 ClientSocket 클래스를 통해 PlayerController 에서 만들어지고 있습니다.
하지만 이를 Game Instance 클래스로 옮길 필요가 있습니다.
Player Controller 는 없어지거나 변경될 수 있는 반면 Game Instance는 게임이 종료될 때 까지 없어지지 않거든요.
나중에 게임의 레벨이 여러개가 되었을때 공유 자원 정보를 담아두기에도 안전할 것 같고요

완료 조건

  • recv 스레드를 Game Instance 로 옮긴다

iocp base 클래스 구현

지금은 하나의 iocp 서버가 모든 패킷을 처리하고 있지만, 로그인 서버 DB 서버 메인 로직 서버등으로 나눠 분산처리 할 필요가 있습니다
이를 위한 base iocp 클래스 구현이 필요합니다

완료 조건

  • iocp base 클래스를 구현한다

다른 플레이어의 정보 HUD 추가

다른 플레이어의 정보가 게임에 전혀 노출되지 않습니다.
이름과 체력등의 정보를 캐릭터 위에 HUD로 보여줄 필요가 있습니다.

완료 사항

  • 플레이어의 이름과 체력정보가 캐릭터 위에 HUD로 뜨게 한다
  • (optional) 때릴 때만 체력정보가 뜨게 한다

AI 몬스터 추가

지금은 플레이어들끼리만 게임에서 볼 수 있습니다.
이걸로도 충분할 수 있지만 몬스터가 추가되면 더 재밌겠지요.
언리얼 엔진의 비헤이비어트리를 활용해 AI 몬스터를 추가 해야합니다.
이 몬스터들에 대한 서버와 클라이언트의 동기화가 상당히 까다로울 것 같군요

완료 조건

  • 서버와 동기화가 가능한 AI 몬스터를 추가한다.

오디오 추가

게임에 아무런 오디오가 없이 굉장히 밋밋합니다.
이동, 점프, 타격, 배경음악 등을 추가해 좀 더 다이나믹한 게임을 만들 필요가 있습니다
이부분은 전적으로 클라이언트단에서 이루어질것이기 때문에 블루프린트를 잘 활용해야겠군요

완료 조건

  • 클라이언트에 오디오를 추가한다

SungminWorld 구현이 필요한 기능

SungminWorld 프로젝트는 구직 및 공부 목적으로 만들어지는 포트폴리오 입니다.

클라이언트는 Unreal Engine 4 를 사용
서버는 C++ IOCP 모델을 사용하였습니다

서버 / 네트워크 직군 신입으로 구직할것이기 때문에 서버사이드 위주로 개발 예정입니다..

아래 각 조건에 대해 서브 이슈를 만들어 처리할 예정입니다

완료 조건(Acceptance criteria)

  • Server
    • C++ IOCP 서버 구축
    • 패킷 프로토콜 설계
    • DB 구축 및 연계
  • Client
    • 레벨 디자인
    • 게임 모드 디자인
    • 애셋
    • ~~~재밌게 만들기~~~

패킷 서버/클라이언트 분리

현재 패킷의 종류를 담은 구조체인 EPacketType 은 서버/클라이언트의 enum 값을 모두 담고있습니다
이를 서버/클라이언트로 분리해 관리할 필요가 있습니다

완료 조건

  • 서버 패킷과 클라이언트 패킷 정의를 분리한다

회원가입 기능

완료 조건

  • 서버에 회원가입 로직을 추가한다
  • 클라 메인 로그인 화면에 회원가입 UI 를 추가한다

언리얼 클라이언트에 dll 모듈 임포트

서버는 패킷 클래스 모듈을 임포트해서 쓰고 있지만 언리얼 클라이언트는 그대로 복사만 해서 사용하고 있습니다
클라이언트쪽에도 dll 모듈을 쓸 수 있도록 해야합니다
사실 예전에 시도했었는데 언리얼 빌드 시스템이 잘 이해되지 않아 팬딩했던.... 다시 시도해야겠음

완료 조건

  • 언리얼 클라이언트에서 dll 모듈을 쓸 수 있도록 한다

캐릭터 타격/피격 애니메이션 추가

타격/피격 기능은 있지만 애니메이션이 플레이 되지 않고 있습니다
좀 더 다이나믹안 게임 경험을 위해 애니메이션을 추가하도록 합시다

완료 조건

  • 타격 애니메이션을 추가한다
  • 피격 애니메이션을 추가한다

README.md 업데이트

SUNGMIN WORLD

프로젝트 설명

Sungmin World 에 오신걸 환영합니다. 본 프로젝트는 게임회사 서버/네트워크 직군 구직용으로 사용할 개인 포트폴리오 입니다.

시연 영상

클릭시 이동
(클릭시 이동)

서버 클래스

class description
IocpBase IOCP 부모 클래스
MainIocp IocpBase를 상속받는 메인 서버 클래스
DBConnector DB 쿼리 수행 클래스

구현 기능

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.