Giter Club home page Giter Club logo

lbengine's Introduction

LBEngine

LBEngine는 C++ Boost.Asio 소켓을 이용하여 개발한 게임 서버 엔진입니다. C++17을 이용했고, 비동기 멀티쓰레드 구조로 작동합니다. 현재는 Windows만 지원합니다.

Codacy Badge

Feature

게임서버 개발에 쉽게 사용이 가능합니다. 비동기 방식의 IO 멀티쓰레드 지원

Environment

Support Windows OS Only Visual Studio 2017 or later boost Lib 1.70

How To Use

GameObject

CGameObject는 서버 접속하는 유저에게 할당되는 기본 오브젝트입니다. 사용자는 해당 클래스를 상속받아서 클래스를 구현하여 게임에 필요한 정보를 저장하고 플레이어 로직을 구현합니다.

Config

CConfig클래스는 서버 구동에 필요한 정보를 저장하는 클래스입니다. 사용자는 서버 설정을 CConfig클래스에서 설정합니다. 또한 Application에서 추가로 설정 정보가 필요한 경우 CConfig클래스를 상속받아 확장합니다.

GameServer

CGameServer는 게임서버의 메인 로직 클래스입니다. 템플릿 인자는 사용자가 구현한 CGameObject클래스를 넣습니다. 사용자는 Game Server Application 구현시 해당 클래스를 상속받아서 구현합니다. 사용자가 구현 가능한 함수는 3개가 있습니다.

  • Initialize() : Initialize()함수는 서버의 초기화를 담당하는 함수입니다. 사용자는 해당 함수 구현시 __super::Initialize() 함수를 먼저 호출 후 Application에 필요한 초기화 로직을 작성합니다.

  • LazyInitialize() : LazyInitialize() 함수는 초기화 단계 이후 서버 실행 전 마지막으로 필요한 정보를 초기화 하는 함수입니다. 사용자는 해당 함수 구현시 __super::Initialize() 함수를 먼저 호출 후 Application에 필요한 마지막 초기화 로직을 작성합니다.

  • Close() : Close() 함수는 서버가 종료되기전에 자원 해제 등의 정리를 담당하는 함수입니다. 사용자는 해당 함수 구현시 Application에 필요한 정리 로직을 작성 후 __super::Close() 함수를 호출합니다.

    CGameServer클래스 구현 후 사용자는 main 함수에서 해당 클래스를 생성하고 SetConfig, Initialize, LazyInitialize, Run, Close 함수를 순서대로 호출합니다.

Packet Handler

패킷 처리 이벤트 등록은 CTcpHandler클래스를 통해 등록합니다. 패킷 처리 함수는 std::function<ErrCode(CPacketHeader*, Size, SharedObject<CGameObject>&)> 형식으로 사용합니다. 위와 같은 형식으로 함수, 람다를 구현하고 CTcpHandler::Register함수를 사용하여 패킷 번호와 함께 추가합니다. 패킷 형식은 CPacketHeader클래스를 상속받은 형식으로 사용합니다.

Example

기본 사용 예제는 Test Server프로젝트를 참고하시기 바랍니다.

Document

Project Reference Project Todo List

License

Copyright © 2019-2020 light8reeze.

lbengine's People

Contributors

light8reeze avatar

Stargazers

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

Watchers

 avatar

Forkers

harang90

lbengine's Issues

vs 2019 컴파일 오류 수정

vs 2019 컴파일 오류

LBTimer.h** 헤더 Include 변경

#pragma once
#include "LBServer.h"
#include "LBFactory.h"
#include "LBIOContext.h"
#include <boost/asio/steady_timer.hpp>

LBLogger.Inl 파일에 주석 처리

/*

  • template <>
    void CLogBuffer::PushLogData<const char*>(const char*& pData)
    {
    LB_ASSERT(__mUseSize < eSzLogMsg, "Error!");

    Size aLength = static_cast(StrLen(pData, eSzLogMsg - __mUseSize));
    if (__mUseSize + aLength >= eSzLogMsg)
    return;

    char* aDataBuffer = reinterpret_cast<char*>(__mBuffer + __mUseSize);
    std::copy(pData, pData + aLength, aDataBuffer);
    __mUseSize += aLength;
    }

template <>
void CLogBuffer::PushLogData<const char*>(const char*&& pData)
{
LB_ASSERT(__mUseSize < eSzLogMsg, "Error!");

Size aLength = static_cast<Size>(StrLen(pData, eSzLogMsg - __mUseSize));
if (__mUseSize + aLength >= eSzLogMsg)
	return;

char* aDataBuffer = reinterpret_cast<char*>(__mBuffer + __mUseSize);
std::move(pData, pData + aLength, aDataBuffer);
__mUseSize += aLength;

}
*/

CSession.obj에서 LNK 2019 에러 발생

1>LBSession.obj : error LNK2019: "public: unsigned short __cdecl LBNet::CBuffer::GetUsableSize(void)const " (?GetUsableSize@CBuffer@LBNet@@QEBAGXZ) 외부 기호(참조 위치: "public: int __cdecl LBNet::CSession::Receive(void)" (?Receive@CSession@LBNet@@QEAAHXZ) 함수)에서 확인하지 못했습니다.

등 7개 발생

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.