LOGIN • JOININ

EVENT SYSTEM

1... EVENT 시스템이란…

게임서비스를 운영하다보면 특정 시간에 이벤트를 시작하고 특정 시간에 이벤트를 종료해야 하는 경우가 많습니다.

예를 들어


"오전 7시에 서버를 오픈하고 저녁 10시에 서버를 닫아라"

"XXXX년 10월 11일 3시 30분에 경험치 2배 이벤트를 시작하고 XXX년 10월 27일 12시 0분에 이벤트를 종료해라"


이런 처리를 어떻게 할까요?

게임서비스를 하다보면 이러한 이벤트 처리가 무수히 많습니다.

또 이런 서비스는 관리툴의 제어를 받아 처리되어야 하는 경우가 많습니다.

CGCII의 이벤트 시스템이란 이런 경우 처리를 간단하게 하기 위한 시스템입니다.


' ICGSchedulable'은 쓰레드의 효율적인 사용을 위해 1ms단위의 아주 짧은 시간(CGD:: TICK )을 단위로 특정 함수나 처리를 실행해 주는 함수 객체(Functor)의 역할이었다면 'ICGEventObject'는 서버의 운용 중 필요한 기능을 '년월일시분초' 단위의 큰 시간(CGD::TIME)을 기준으로 실행하고 스케쥴링을 위한 것이라 할 수  있습니다.
또 서비스의 관리와 운용에 관한 것이므로 관리툴에 의해서 등록/설정/해제될 수 있으며 상태를 모니터링하며 결과를 돌려주기도 합니다.


이벤트 시스템을 사용하려면 "CGServerEventClasses.h"를 포함해야 합니다.



2... EVENT 객체의 종류

이벤트 객체는 'ICGEventObject'를 상속받아 원하는 어떤 형태의 이벤트 객체든 정의가 가능합니다.

빈번히 사용되는  기본적인 이벤트는 미리 제작하여 제공해줍니다.
따라서  이를 사용하거나 혹은 
이를 상속받아 필요한 기능을 구현해 간단히 원하는 기능을 구현할 수 있습니다.
제공해주는 기본적인 Event 클래스 들은 대략 다음과 같습니다.


1) CGEvent::Object::COnce 

    정해진 시간 단1번만 실행하는 Event 


2) CGEvent::Object::CStartEnd

     시작 시간과 종료 시간에 각각 1번씩만 실행하는 Event 

    예) 6시에 경험치2배 이벤트 실시하고 9시에 종료한다. 


3) CGEvent::Object::CIteration

     일정 간격으로 계속 실행되는 Event 

     예) 30분 단위로 특정 몹이 리젠된다. 
     실행 간격이 동일하지 않지만 주기적으로 실행되어야 되는 Event 

    예) 매일 새벽 4시에 시스템 백업을 실시한다.

    예) 매주 월요일 특정 아이템을 지급한다.

    예) 매월 5일 이벤트를 진행한다.

4) CGEvent::Object::CStartIterationEnd

     시작 시간 실행후 주기적으로  종료 시간까지 혹은 일정 횟수만큼 반복 실행한 후 종료가 실행되는 Event

     예) 6시에 이벤트를 시작하며 9시에 종료를 하는데 그 사이에 30분 간격으로 보스 몹을 리젠한다. 


5) CGEvent::Schedule...

     주기적이지도 않고 시작도 끝도 없이 일일이 동작할 시간을 설정해 주어야 할 경우 사용되는 Event객체로
     여러 개의 서브-이 벤트 객체를 모은  이벤트 객체라고도 할 수 있습니다.
    예) 매일 9시, 10시 30분, 11시 21분, 3시 44분에 보스 몹을 리젠한다.



EventClasses.PNG