Changeset 637

Show
Ignore:
Timestamp:
01/02/08 20:28:55 (11 months ago)
Author:
blackhedd
Message:

comments

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • version_0/lib/eventmachine.rb

    r636 r637  
    174174 
    175175 
    176     # EventMachine::run initializes and runs an event loop. 
    177     # This method only returns if user-callback code calls stop_event_loop. 
    178     # Use the supplied block to define your clients and servers. 
    179     # The block is called by EventMachine::run immediately after initializing 
    180     # its internal event loop but <i>before</i> running the loop. 
    181     # Therefore this block is the right place to call start_server if you 
    182     # want to accept connections from remote clients. 
    183     # 
    184     # For programs that are structured as servers, it's usually appropriate 
    185     # to start an event loop by calling EventMachine::run, and let it 
    186     # run forever. It's also possible to use EventMachine::run to make a single 
    187     # client-connection to a remote server, process the data flow from that 
    188     # single connection, and then call stop_event_loop to force EventMachine::run 
    189     # to return. Your program will then continue from the point immediately 
    190     # following the call to EventMachine::run. 
    191     # 
    192     # You can of course do both client and servers simultaneously in the same program. 
    193     # One of the strengths of the event-driven programming model is that the 
    194     # handling of network events on many different connections will be interleaved, 
    195     # and scheduled according to the actual events themselves. This maximizes 
    196     # efficiency. 
    197     # 
    198     # === Server usage example 
    199     # 
    200     # See the text at the top of this file for an example of an echo server. 
    201     # 
    202     # === Client usage example 
    203     # 
    204     # See the description of stop_event_loop for an extremely simple client example. 
    205     # 
    206     #-- 
    207     # Obsoleted the use_threads mechanism. 
    208     # 25Nov06: Added the begin/ensure block. We need to be sure that release_machine 
    209     # gets called even if an exception gets thrown within any of the user code 
    210     # that the event loop runs. The best way to see this is to run a unit 
    211     # test with two functions, each of which calls EventMachine#run and each of 
    212     # which throws something inside of #run. Without the ensure, the second test 
    213     # will start without release_machine being called and will immediately throw 
    214     # a C++ runtime error. 
    215     # 
    216     def EventMachine::run &block 
    217         @conns = {} 
    218         @acceptors = {} 
    219         @timers = {} 
    220         begin 
    221             @reactor_running = true 
    222             initialize_event_machine 
    223             block and add_timer 0, block 
    224             run_machine 
    225         rescue 
    226             STDERR.puts "#{$!}" 
    227         ensure 
    228             release_machine 
    229             @reactor_running = false 
    230         end 
    231     end 
     176        # EventMachine::run initializes and runs an event loop. 
     177        # This method only returns if user-callback code calls stop_event_loop. 
     178        # Use the supplied block to define your clients and servers. 
     179        # The block is called by EventMachine::run immediately after initializing 
     180        # its internal event loop but <i>before</i> running the loop. 
     181        # Therefore this block is the right place to call start_server if you 
     182        # want to accept connections from remote clients. 
     183        # 
     184        # For programs that are structured as servers, it's usually appropriate 
     185        # to start an event loop by calling EventMachine::run, and let it 
     186        # run forever. It's also possible to use EventMachine::run to make a single 
     187        # client-connection to a remote server, process the data flow from that 
     188        # single connection, and then call stop_event_loop to force EventMachine::run 
     189        # to return. Your program will then continue from the point immediately 
     190        # following the call to EventMachine::run. 
     191        # 
     192        # You can of course do both client and servers simultaneously in the same program. 
     193        # One of the strengths of the event-driven programming model is that the 
     194        # handling of network events on many different connections will be interleaved, 
     195        # and scheduled according to the actual events themselves. This maximizes 
     196        # efficiency. 
     197        # 
     198        # === Server usage example 
     199        # 
     200        # See the text at the top of this file for an example of an echo server. 
     201        # 
     202        # === Client usage example 
     203        # 
     204        # See the description of stop_event_loop for an extremely simple client example. 
     205        # 
     206        #-- 
     207        # Obsoleted the use_threads mechanism. 
     208        # 25Nov06: Added the begin/ensure block. We need to be sure that release_machine 
     209        # gets called even if an exception gets thrown within any of the user code 
     210        # that the event loop runs. The best way to see this is to run a unit 
     211        # test with two functions, each of which calls EventMachine#run and each of 
     212        # which throws something inside of #run. Without the ensure, the second test 
     213        # will start without release_machine being called and will immediately throw 
     214        # a C++ runtime error. 
     215        # 
     216        # Provisionally added a brain-dead rescue block to signal errors raised by user-written 
     217        # code called in event handlers. Otherwise very confusing errors result. 
     218        # 
     219        def EventMachine::run &block 
     220                @conns = {} 
     221                @acceptors = {} 
     222                @timers = {} 
     223                begin 
     224                        @reactor_running = true 
     225                        initialize_event_machine 
     226                        block and add_timer 0, block 
     227                        run_machine 
     228                rescue 
     229                        STDERR.puts "#{$!}" 
     230                ensure 
     231                        release_machine 
     232                        @reactor_running = false 
     233                end 
     234        end 
    232235 
    233236