Skip to content

pjc0247/EventPie

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 

Repository files navigation

EventPie

pie event pie event pie

EventPie는 C++로 작성된 node-js스타일의 이벤트 드리븐 구현체입니다.

Sample EchoServer

using namespace EventPie;
using namespace EventPie::Io;

int main(){
    TCPServer *server;
    
    server = new TCPServer( 9916,
        [&server](int err, TCPSocket *client){
            
            if( err == eNoError ){
                printf("new connection\n");
                
                client->onReceive(
                    [client](void *data, int len){
                        printf("data received : %s\n", data);
                        
                        /* echo back */
                        client->write( data, len );
                    } );
                client->onUnbind(
                    [client](){
                        printf("client disconnected\n");
                    } );
            }
            else{
                printf("cannot create tcp server - %d\n", err);
            }
        } );
        
    run();  
}

Features

Timer

타이머는 지정된 시간 주기마다 반복적으로 콜백을 불러줍니다.

using namespace EventPie;

int main(){
  int life = 3;
  Timer *timer = new Timer( [life](){
    printf("0.15초마다 실행되는 타이머\n");
    
    life --;
    if( life == 0 )
      delete timer;
  }, 150);
  
  run();
}

Task

태스크는 EventPie에서 처리하는 작업의 단위입니다.

defer함수를 사용하여 태스크을 뒤로 미룰 수 있습니다.

( defer함수는 node-js의 nextTick과 같은 역할을 합니다. )

using namespace EventPie;

int main(){
  defer( [](){
    printf("task\n");
  });
  
  run();
}

deferAsync함수를 사용하여 태스크를 비동기적으로 수행할 수 있습니다.

태스크는 EventPie내부의 ThreadPool에서 수행됩니다.

( 이 함수를 통해서 blocking 로직을 non-blocking로직으로 변환할 수 있습니다. )

using namespace EventPie;

int main(){

  /* very slow task */
  deferAsync( [](){
    int result = 0;
    
    sleep(1000);
    result = 1234;
    
    defer( [result](){
      printf("task completed %d\n", result);
    });
  });
  
  run();
}

About

node-js style event driven core

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published