Ocean server - lapis25/study-ocean GitHub Wiki

run

$self->initialize;
$self->start;
$self->wait;
$self->finalize;

initialize

  • $self->{_stream_manager}->set_delegate($self);

  • $self->{_context}->set_delegate($self);

  • $self->{_timer}->set_delegate($self);

  • $self->{_listener}->set_delegate($self);

  • $self->{_signal_handler}->set_delegate($self);

  • $self->{_context}->initialize();

  • $self->{_daemonizer}->initialize();

start

  • $self->{_exit_guard} = AE::cv;

  • $self->{_exit_guard}->begin();#AE::cv

  • $self->{_listener}->start();

  • $self->{_timer}->start();

  • $self->{_signal_handler}->setup();

wait

  • $self->{_exit_guard}->recv();#AE::cv

finalize

  • my $args = Ocean::HandlerArgs::NodeExit->new

    $self->{_event_dispatcher}->dispatch(
    Ocean::Constants::EventType::NODE_EXIT,
    $self->{_context},
    $args);

  • $self->{_context}->finalize();

  • $self->{_daemonizer}->finalize();

DESTROY -> release

on_*

my $args = Ocean::HandlerArgs::*->new
$self->{_event_dispatcher}->dispatch(                                                                                                                                                        
    Ocean::Constants::EventType::*,                                                                                                                                                  
    $self->{_context},                                                                                                                                                                       
    $args);