home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 May / Chip_2000-05_cd1.bin / zkuste / Perl / ActivePerl-5.6.0.613.msi / 䆊䌷䈹䈙䏵-䞅䞆䞀㡆䞃䄦䠥 / _cce05157502fd5824070c75afb46deef < prev    next >
Text File  |  2000-03-23  |  24KB  |  512 lines

  1.  
  2. <HTML>
  3. <HEAD>
  4. <TITLE>POE::Kernel - POE Event Queue and Resource Manager</TITLE>
  5. <LINK REL="stylesheet" HREF="../../../Active.css" TYPE="text/css">
  6. <LINK REV="made" HREF="mailto:">
  7. </HEAD>
  8.  
  9. <BODY>
  10. <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
  11. <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
  12. <STRONG><P CLASS=block> POE::Kernel - POE Event Queue and Resource Manager</P></STRONG>
  13. </TD></TR>
  14. </TABLE>
  15.  
  16. <A NAME="__index__"></A>
  17. <!-- INDEX BEGIN -->
  18.  
  19. <UL>
  20.  
  21.     <LI><A HREF="#name">NAME</A></LI><LI><A HREF="#supportedplatforms">SUPPORTED PLATFORMS</A></LI>
  22.  
  23.     <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
  24.     <LI><A HREF="#description">DESCRIPTION</A></LI>
  25.     <LI><A HREF="#exported symbols">EXPORTED SYMBOLS</A></LI>
  26.     <LI><A HREF="#public kernel methods">PUBLIC KERNEL METHODS</A></LI>
  27.     <UL>
  28.  
  29.         <LI><A HREF="#kernel management methods">Kernel Management Methods</A></LI>
  30.         <LI><A HREF="#session management methods">Session Management Methods</A></LI>
  31.         <LI><A HREF="#event management methods">Event Management Methods</A></LI>
  32.         <LI><A HREF="#alarm management methods">Alarm Management Methods</A></LI>
  33.         <LI><A HREF="#alias management methods">Alias Management Methods</A></LI>
  34.         <LI><A HREF="#select management methods">Select Management Methods</A></LI>
  35.         <LI><A HREF="#signal management methods">Signal Management Methods</A></LI>
  36.         <LI><A HREF="#process management methods">Process Management Methods</A></LI>
  37.         <LI><A HREF="#state management methods">State Management Methods</A></LI>
  38.         <LI><A HREF="#id management methods">ID Management Methods</A></LI>
  39.     </UL>
  40.  
  41.     <LI><A HREF="#see also">SEE ALSO</A></LI>
  42.     <LI><A HREF="#bugs">BUGS</A></LI>
  43.     <LI><A HREF="#authors & copyrights">AUTHORS & COPYRIGHTS</A></LI>
  44. </UL>
  45. <!-- INDEX END -->
  46.  
  47. <HR>
  48. <P>
  49. <H1><A NAME="name">NAME</A></H1>
  50. <P>POE::Kernel - POE Event Queue and Resource Manager</P>
  51. <P>
  52. <HR>
  53. <H1><A NAME="supportedplatforms">SUPPORTED PLATFORMS</A></H1>
  54. <UL>
  55. <LI>Linux</LI>
  56. <LI>Solaris</LI>
  57. <LI>Windows</LI>
  58. </UL>
  59. <HR>
  60. <H1><A NAME="synopsis">SYNOPSIS</A></H1>
  61. <PRE>
  62.   #!/usr/bin/perl -w
  63.   use strict;
  64.   use POE;                 # Includes POE::Kernel and POE::Session
  65.   print $poe_kernel->ID(); # This process' unique ID.
  66.   new POE::Session( ... ); # Bootstrap sessions are here.
  67.   $poe_kernel->run();      # Run the kernel.
  68.   exit;                    # Exit when the kernel's done.</PRE>
  69. <PRE>
  70.   # Session management methods:
  71.   $kernel->session_create( ... );</PRE>
  72. <PRE>
  73.   # Event management methods:
  74.   $kernel->post( $session, $state, @args );
  75.   $kernel->yield( $state, @args );
  76.   $kernel->call( $session, $state, @args );</PRE>
  77. <PRE>
  78.   # Alarms and timers:
  79.   $kernel->alarm( $state, $time, @args );
  80.   $kernel->delay( $state, $seconds, @args );</PRE>
  81. <PRE>
  82.   # Aliases:
  83.   $status = $kernel->alias_set( $alias );
  84.   $status = $kernel->alias_remove( $alias );
  85.   $session_reference = $kernel->alias_resolve( $alias );</PRE>
  86. <PRE>
  87.   # Selects:
  88.   $kernel->select( $file_handle,
  89.                    $read_state_name,     # or undef to remove it
  90.                    $write_state_name,    # or undef to remove it
  91.                    $expedite_state_same, # or undef to remove it
  92.                  );
  93.   $kernel->select_read( $file_handle, $read_state_name );
  94.   $kernel->select_write( $file_handle, $write_state_name );
  95.   $kernel->select_expedite( $file_handle, $expedite_state_name );</PRE>
  96. <PRE>
  97.   # Signals:
  98.   $kernel->sig( $signal_name, $state_name ); # Registers a handler.
  99.   $kernel->signal( $session, $signal_name ); # Posts a signal.</PRE>
  100. <PRE>
  101.   # Processes.
  102.   $kernel->fork();   # "Safe" fork that polls for SIGCHLD.</PRE>
  103. <PRE>
  104.   # States:
  105.   $kernel->state( $state_name, $code_reference );    # Inline state
  106.   $kernel->state( $method_name, $object_reference ); # Object state
  107.   $kernel->state( $function_name, $package_name );   # Package state
  108.   $kernel->state( $state_name,                       # Object or package
  109.                   $object_or_package_reference,      #  state, mapped to
  110.                   $object_or_package_method,         #  different method.
  111.                 );</PRE>
  112. <PRE>
  113.   # IDs:
  114.   $kernel->ID();                       # Return the Kernel's unique ID.
  115.   $kernel->ID_id_to_session($id);      # Return undef, or the ID's session.
  116.   $kernel->ID_session_to_id($session); # Return undef, or the session's ID.</PRE>
  117. <P>
  118. <HR>
  119. <H1><A NAME="description">DESCRIPTION</A></H1>
  120. <P>POE::Kernel contains POE's event loop, select logic and resource
  121. management methods.  There can only be one POE::Kernel per process,
  122. and it's created automatically the first time POE::Kernel is used.
  123. This simplifies signal delivery in the present and threads support in
  124. the future.</P>
  125. <P>
  126. <HR>
  127. <H1><A NAME="exported symbols">EXPORTED SYMBOLS</A></H1>
  128. <P>POE::Kernel exports $poe_kernel, a reference to the program's single
  129. kernel instance.  This mainly is used in the main package, so that
  130. $poe_kernel-><CODE>run()</CODE> may be called cleanly.</P>
  131. <P>Sessions' states should endeavor to use $_[KERNEL], since $poe_kernel
  132. may not be available, or it may be different than the kernel actually
  133. invoking the object.</P>
  134. <P>
  135. <HR>
  136. <H1><A NAME="public kernel methods">PUBLIC KERNEL METHODS</A></H1>
  137. <P>POE::Kernel contains methods to manage the kernel itself, sessions,
  138. and resources such as files, signals and alarms.</P>
  139. <P>Many of the public Kernel methods generate events.  Please see the
  140. ``PREDEFINED EVENTS AND PARAMETERS'' section in POE::Session's
  141. documentation.</P>
  142. <P>
  143. <H2><A NAME="kernel management methods">Kernel Management Methods</A></H2>
  144. <UL>
  145. <LI>
  146. POE::Kernel::run()
  147. <P>POE::Kernel::run() starts the kernel's event loop.  It will not return
  148. until all its sessions have stopped.  There are two corollaries to
  149. this rule: It will return immediately if there are no sessions; and if
  150. sessions never exit, neither will run().</P>
  151. <P></P></UL>
  152. <P>
  153. <H2><A NAME="session management methods">Session Management Methods</A></H2>
  154. <UL>
  155. <LI>
  156. POE::Kernel::session_create(...)
  157. <P>POE::Kernel::session_create(...) creates a new session in the kernel.
  158. It is an alias for POE::Session::new(...), and it accepts the same
  159. parameters.  Please see POE::Session::new(...) for more information.</P>
  160. <P>As of version 0.07, POE::Session is a proper object with public
  161. methods and everything.  Therefore session_create is depreciated
  162. starting with version 0.07.</P>
  163. <P></P></UL>
  164. <P>
  165. <H2><A NAME="event management methods">Event Management Methods</A></H2>
  166. <P>Events tell sessions which state to invoke next.  States are defined
  167. when sessions are created.  States may also be added, removed or
  168. changed at runtime by POE::Kernel::state(), which acts on the current
  169. session.</P>
  170. <P>There are a few ways to send events to sessions.  Events can be
  171. posted, in which case the kernel queues them and dispatches them in
  172. FIFO order.  States can also be called immediately, bypassing the
  173. queue.  Immediate calls can be useful for ``critical sections''; for
  174. example, POE's I/O abstractions use <CODE>call()</CODE> to minimize event latency.</P>
  175. <P>To learn more about events and the information they convey, please see
  176. ``PREDEFINED EVENTS AND PARAMETERS'' in the POE::Session documentation.</P>
  177. <UL>
  178. <LI>
  179. POE::Kernel::post( $destination, $state, @args )
  180. <P>POE::Kernel::post places an event in the kernel's queue.  The kernel
  181. dispatches queued events in FIFO order.  When posted events are
  182. dispatched, their corresponding states are invoked in a scalar
  183. context, and their return values are discarded.  Signal handlers work
  184. differently, but they're not invoked as a result of post().</P>
  185. <P>If a state's return value is important, there are at least two ways to
  186. get it.  First, have the $destination post a return vent to its
  187. $_[SENDER]; second, use POE::Kernel::call() instead.</P>
  188. <P>POE::Kernel::post returns undef on failure, or an unspecified defined
  189. value on success.  $! is set to the reason why the post failed.</P>
  190. <P></P>
  191. <LI>
  192. POE::Kernel::yield( $state, @args )
  193. <P>POE::Kernel::yield is an alias for posting an event to the current
  194. session.  It does not immediately swap call stacks like <CODE>yield()</CODE> in
  195. real thread libraries might.  If there's a way to do this in perl, I'd
  196. sure like to know.</P>
  197. <P></P>
  198. <LI>
  199. POE::Kernel::call( $session, $state, $args )
  200. <P>POE::Kernel::call immediately dispatches an event to a session.
  201. States invoked this way are evaluated in a scalar context, and <CODE>call()</CODE>
  202. returns their return values.</P>
  203. <P><CODE>call()</CODE> can exercise bugs in perl and/or the C library (we're not
  204. really sure which just yet).  This only seems to occur when one state
  205. (state1) is destroyed from another state (state0) as a result of
  206. state0 being called from state1.</P>
  207. <P>Until that bug is pinned down and fixed, if your program dumps core
  208. with a SIGSEGV, try changing your call()s to post()s.</P>
  209. <P><CODE>call()</CODE> returns undef on failure.  It may also return undef on success,
  210. if the called state returns success.  What a mess.  <CODE>call()</CODE> also sets
  211. $! to 0 on success, regardless of what it's set to in the called
  212. state.</P>
  213. <P></P></UL>
  214. <P>
  215. <H2><A NAME="alarm management methods">Alarm Management Methods</A></H2>
  216. <P>Alarms are just events that are scheduled to be dispatched at some
  217. later time.  POE's queue is a priority queue keyed on time, so these
  218. events go to the appropriate place in the queue.  Posted events are
  219. really enqueued for ``now'' (defined as whatever <A HREF="../../../lib/Pod/perlfunc.html#item_time"><CODE>time()</CODE></A> returns).</P>
  220. <P>If Time::HiRes is available, POE will use it to achieve better
  221. resolution on enqueued events.</P>
  222. <UL>
  223. <LI>
  224. POE::Kernel::alarm( $state, $time, @args )
  225. <P>The <A HREF="../../../lib/Pod/perlfunc.html#item_alarm"><CODE>alarm()</CODE></A> method enqueues an event with a future dispatch time,
  226. specified in seconds since whatever epoch <A HREF="../../../lib/Pod/perlfunc.html#item_time"><CODE>time()</CODE></A> uses (usually the
  227. UNIX epoch).  If $time is in the past, it will be clipped to time(),
  228. making the <A HREF="../../../lib/Pod/perlfunc.html#item_alarm"><CODE>alarm()</CODE></A> call synonymous to <CODE>post()</CODE> but with some extra
  229. overhead.</P>
  230. <P>Alarms are keyed by state name.  That is, there can be only one
  231. pending alarm for any given state.  This is a design bug, and there
  232. are plans to fix it.</P>
  233. <P>It is possible to remove an alarm that hasn't yet been dispatched:</P>
  234. <PRE>
  235.   $kernel->alarm( $state ); # Removes the alarm for $state</PRE>
  236. <P>Subsequent alarms set for the same name will overwrite previous ones.
  237. This is useful for timeout timers that must be continually refreshed.</P>
  238. <P>The <A HREF="../../../lib/Pod/perlfunc.html#item_alarm"><CODE>alarm()</CODE></A> method can be misused to remove events from the kernel's
  239. queue.  This happens because alarms are merely events scheduled for a
  240. future time.  This behavior is considered to be a bug, and there are
  241. plans to fix it.</P>
  242. <P></P>
  243. <LI>
  244. POE::Kernel::delay( $state, $seconds, @args );
  245. <P>The <CODE>delay()</CODE> method is an alias for:</P>
  246. <PRE>
  247.   $kernel->alarm( $state, time() + $seconds, @args );</PRE>
  248. <P>However, because <A HREF="../../../lib/Pod/perlfunc.html#item_time"><CODE>time()</CODE></A> is called within the POE::Kernel package, it
  249. uses Time::HiRes if it's available.  This saves programs from having
  250. to figure out if Time::HiRes is available themselves.</P>
  251. <P>All the details for POE::Kernel::alarm() apply to <CODE>delay()</CODE> as well.
  252. For example, delays may be removed by omitting the $seconds and @args
  253. parameters:</P>
  254. <PRE>
  255.   $kernel->delay( $state ); # Removes the delay for $state</PRE>
  256. <P>And <CODE>delay()</CODE> can be misused to remove events from the kernel's queue.
  257. Please see POE::Kernel::alarm() for more information.</P>
  258. <P></P></UL>
  259. <P>
  260. <H2><A NAME="alias management methods">Alias Management Methods</A></H2>
  261. <P>Aliases allow sessions to be referenced by name instead of by session
  262. reference.  They also allow sessions to remain active without having
  263. selects or events.  This provides support for ``daemon'' sessions that
  264. act as resources but don't necessarily have resources themselves.</P>
  265. <P>Aliases must be unique.  Sessions may have more than one alias.</P>
  266. <UL>
  267. <LI>
  268. POE::Kernel::alias_set( $alias )
  269. <P>The <CODE>alias_set()</CODE> method sets an alias for the current session.</P>
  270. <P>It returns 1 on success.  On failure, it returns 0 and sets $! to one
  271. of:</P>
  272. <PRE>
  273.   EEXIST - The alias already exists for another session.</PRE>
  274. <P></P>
  275. <LI>
  276. POE::Kernel::alias_remove( $alias )
  277. <P>The <CODE>alias_remove()</CODE> method removes an alias for the current session.</P>
  278. <P>It returns 1 on success.  On failure, it returns 0 and sets $! to one
  279. of:</P>
  280. <PRE>
  281.   ESRCH - The alias does not exist.
  282.   EPERM - The alias belongs to another session.</PRE>
  283. <P></P>
  284. <LI>
  285. POE::Kernel::alias_resolve( $alias )
  286. <P>The <CODE>alias_resolve()</CODE> method returns a session reference corresponding
  287. to the given alias.  POE::Kernel does this internally, so it's usually
  288. not necessary.</P>
  289. <P>It returns a session reference on success.  On failure, it returns
  290. undef and sets $! to one of:</P>
  291. <PRE>
  292.   ESRCH - The alias does not exist.</PRE>
  293. <P></P></UL>
  294. <P>
  295. <H2><A NAME="select management methods">Select Management Methods</A></H2>
  296. <P>Selects are file handle monitors.  They generate events to indicate
  297. when activity occurs on the file handles they watch.  POE keeps track
  298. of how many selects are watching a file handle, and it will close the
  299. file when nobody is looking at it.</P>
  300. <P>There are three types of select.  Each corresponds to one of the bit
  301. vectors in Perl's four-argument <A HREF="../../../lib/Pod/perlfunc.html#item_select"><CODE>select()</CODE></A> function.  ``Read'' selects
  302. generate events when files become ready for reading.  ``Write'' selects
  303. generate events when files are available to be written to.  ``Expedite''
  304. selects generate events when files have out-of-band information to be
  305. read.</P>
  306. <UL>
  307. <LI>
  308. POE::Kernel::select( $filehandle, $rd_state, $wr_state, $ex_state )
  309. <P>The <A HREF="../../../lib/Pod/perlfunc.html#item_select"><CODE>select()</CODE></A> method manipulates all three selects for a file handle at
  310. the same time.  Selects are added for each defined state, and selects
  311. are removed for undefined states.</P>
  312. <P></P>
  313. <LI>
  314. POE::Kernel::select_read( $filehandle, $read_state )
  315. <P>The <CODE>select_read()</CODE> method adds or removes a file handle's read select.
  316. It leaves the other two unchanged.</P>
  317. <P></P>
  318. <LI>
  319. POE::Kernel::select_write( $filehandle, $write_state )
  320. <P>The <CODE>select_write()</CODE> method adds or removes a file handle's write
  321. select.  It leaves the other two unchanged.</P>
  322. <P></P>
  323. <LI>
  324. POE::Kernel::select_expedite( $filehandle, $expedite_state )
  325. <P>The <CODE>select_expedite()</CODE> method adds or removes a file handle's expedite
  326. select.  It leaves the other two unchanged.</P>
  327. <P></P></UL>
  328. <P>
  329. <H2><A NAME="signal management methods">Signal Management Methods</A></H2>
  330. <P>The POE::Session documentation has more information about <STRONG>_signal</STRONG>
  331. events.</P>
  332. <P>POE currently does not make Perl's signals safe.  Using signals is
  333. okay in short-lived programs, but long-uptime servers may eventually
  334. dump core if they receive a lot of signals.  POE provides a ``safe''
  335. <A HREF="../../../lib/Pod/perlfunc.html#item_fork"><CODE>fork()</CODE></A> function that periodically reaps children without using
  336. signals; it emulates the system's SIGCHLD signal for each process in
  337. reaps.</P>
  338. <P>Mileage varies considerably.</P>
  339. <P>The kernel generates <STRONG>_signal</STRONG> events when it receives signals from
  340. the operating system.  Sessions may also send signals between
  341. themselves without involving the OS.</P>
  342. <P>The kernel determines whether or not signals have been handled by
  343. looking at <STRONG>_signal</STRONG> states' return values.  If the state returns
  344. logical true, then it means the signal was handled.  If it returns
  345. false, then the kernel assumes the signal wasn't handled.</P>
  346. <P>POE will stop sessions that don't handle some signals.  These
  347. ``terminal'' signals are QUIT, INT, KILL, TERM, HUP, and the fictitious
  348. IDLE signal.</P>
  349. <P>POE broadcasts SIGIDLE to all sessions when the kernel runs out of
  350. events to dispatch, and when there are no alarms or selects to
  351. generate new events.</P>
  352. <P>Finally, there is one fictitious signal that always stops a session:
  353. ZOMBIE.  If the kernel remains idle after SIGIDLE is broadcast, then
  354. SIGZOMBIE is broadcast to force reaping of zombie sessions.  This
  355. tells these sessions (usually aliased ``daemon'' sessions) that nothing
  356. is left to do, and they're as good as dead anyway.</P>
  357. <P>It's normal for aliased sessions to receive IDLE and ZOMBIE when all
  358. the sessions that may use them have gone away.</P>
  359. <UL>
  360. <LI>
  361. POE::Kernel::sig( $signal_name, $state_name )
  362. <P>The <CODE>sig()</CODE> method registers a state to handle a particular signal.
  363. Only one state in any given session may be registered for a particular
  364. signal.  Registering a second state for the same signal will replace
  365. the previous state with the new one.</P>
  366. <P>Signals that don't have states will be dispatched to the _signal state
  367. instead.</P>
  368. <P></P>
  369. <LI>
  370. POE::Kernel::signal( $session, $signal_name )
  371. <P>The <CODE>signal()</CODE> method posts a signal event to a session.  It uses the
  372. kernel's event queue, bypassing the operating system, so the signal's
  373. name is not limited to what the OS allows.  For example, the kernel
  374. does something similar to post a fictitious ZOMBIE signal.</P>
  375. <PRE>
  376.   $kernel->signal($session, 'BOGUS'); # Not as bogus as it sounds.</PRE>
  377. <P></P></UL>
  378. <P>
  379. <H2><A NAME="process management methods">Process Management Methods</A></H2>
  380. <P>POE's signal handling is Perl's signal handling, which means that POE
  381. won't safely handle signals as long as Perl has a problem with them.</P>
  382. <P>However, POE works around this in at least SIGCHLD's case by providing
  383. a ``safe'' <A HREF="../../../lib/Pod/perlfunc.html#item_fork"><CODE>fork()</CODE></A> function.  &POE::Kernel::fork() blocks
  384. $SIG{'CHLD','CLD'} and starts an event loop to poll for expired child
  385. processes.  It emulates the system's SIGCHLD behavior by sending a
  386. ``soft'' CHLD signal to the appropriate session.</P>
  387. <P>Because POE knows which session called its version of fork(), it can
  388. signal just that session that its forked child process has completed.</P>
  389. <P><STRONG>Note:</STRONG> The first &POE::Kernel::fork call disables POE's usual
  390. SIGCHLD handler, so that the poll loop can reap children safely.
  391. Mixing plain fork and &POE::Kernel::fork isn't recommended.</P>
  392. <UL>
  393. <LI>
  394. POE::Kernel::fork( )
  395. <P>The <A HREF="../../../lib/Pod/perlfunc.html#item_fork"><CODE>fork()</CODE></A> method tries to fork a process in the usual Unix way.  In
  396. addition, it blocks SIGCHLD and/or SIGCLD and starts an event loop to
  397. poll for completed child processes.</P>
  398. <P>POE's <A HREF="../../../lib/Pod/perlfunc.html#item_fork"><CODE>fork()</CODE></A> will return different things in scalar and list contexts.
  399. In scalar context, it returns the child PID, 0, or undef, just as
  400. Perl's <A HREF="../../../lib/Pod/perlfunc.html#item_fork"><CODE>fork()</CODE></A> does.  In a list context, it returns three items: the
  401. child PID (or 0 or undef), the numeric version of $!, and the string
  402. version of $!.</P>
  403. <P></P></UL>
  404. <P>
  405. <H2><A NAME="state management methods">State Management Methods</A></H2>
  406. <P>The kernel's state management method lets sessions add, change and
  407. remove states at runtime.  Wheels use this to add and remove select
  408. states from sessions when they're created and destroyed.</P>
  409. <UL>
  410. <LI>
  411. POE::Kernel::state( $state_name, $code_reference )
  412. POE::Kernel::state( $method_name, $object_reference )
  413. POE::Kernel::state( $function_name, $package_name )
  414. POE::Kernel::state( $state_name, $obj_or_package_ref, $method_name )
  415. <P>The <CODE>state()</CODE> method has three different uses, each for adding, updating
  416. or removing a different kind of state.  It manipulates states in the
  417. current session.</P>
  418. <P>The three-parameter version of <CODE>state()</CODE> registers an object or package
  419. state to a method with a different name.  Normally the object or
  420. package method would need to be named after the state it catches.</P>
  421. <P>The <CODE>state()</CODE> method returns 1 on success.  On failure, it returns 0 and
  422. sets $! to one of:</P>
  423. <PRE>
  424.   ESRCH - Somehow, the current session does not exist.</PRE>
  425. <P>This function can only register or remove one state at a time.</P>
  426. <UL>
  427. <LI>
  428. Inline States
  429. <P>Inline states are manipulated with:</P>
  430. <PRE>
  431.   $kernel->state($state_name, $code_reference);</PRE>
  432. <P>If $code_reference is undef, then $state_name will be removed.  Any
  433. pending events destined for $state_name will be redirected to
  434. _default.</P>
  435. <P></P>
  436. <LI>
  437. Object States
  438. <P>Object states are manipulated with:</P>
  439. <PRE>
  440.   $kernel->state($method_name, $object_reference);</PRE>
  441. <P>If $object_reference is undef, then the $method_name state will be
  442. removed.  Any pending events destined for $method_name will be
  443. redirected to _default.</P>
  444. <P>They can also be maintained with:</P>
  445. <PRE>
  446.   $kernel->state($state_name, $object_reference, $object_method);</PRE>
  447. <P>For example, this maps a session's B«_start» state to the object's
  448. start_state method:</P>
  449. <PRE>
  450.   $kernel->state('_start', $object_reference, 'start_state');</PRE>
  451. <P></P>
  452. <LI>
  453. Package States
  454. <P>Package states are manipulated with:</P>
  455. <PRE>
  456.   $kernel->state($function_name, $package_name);</PRE>
  457. <P>If $package_name is undef, then the $function_name state will be
  458. removed.  Any pending events destined for $function_name will be
  459. redirected to _default.</P>
  460. <P></P></UL>
  461. </UL>
  462. <P>
  463. <H2><A NAME="id management methods">ID Management Methods</A></H2>
  464. <P>POE generates a unique ID for the process, and it maintains unique
  465. serial numbers for every session.  These functions retrieve various ID
  466. values.</P>
  467. <UL>
  468. <LI>
  469. POE::Kernel::ID()
  470. <P>Returns a unique ID for this POE process.</P>
  471. <PRE>
  472.   my $process_id = $kernel->ID();</PRE>
  473. <P></P>
  474. <LI>
  475. POE::Kernel::ID_id_to_session( $id );
  476. <P>Returns a session reference for the given ID.  It returns undef if the
  477. ID doesn't exist.  This allows programs to uniquely identify a
  478. particular Session (or detect that it's gone) even if Perl reuses the
  479. Session reference later.</P>
  480. <P></P>
  481. <LI>
  482. POE::Kernel::ID_session_to_id( $session );
  483. <P>Returns an ID for the given POE::Session reference, or undef ith the
  484. session doesn't exist.</P>
  485. <P>Perl reuses Session references fairly frequently, but Session IDs are
  486. unique.  Because of this, the ID of a given reference (stringified, so
  487. Perl can release the referenced Session) may appear to change.  If it
  488. does appear to have changed, then the Session reference is probably
  489. invalid.</P>
  490. <P></P></UL>
  491. <P>
  492. <HR>
  493. <H1><A NAME="see also">SEE ALSO</A></H1>
  494. <P>POE; POE::Session</P>
  495. <P>
  496. <HR>
  497. <H1><A NAME="bugs">BUGS</A></H1>
  498. <P>Oh, probably some.</P>
  499. <P>
  500. <HR>
  501. <H1><A NAME="authors & copyrights">AUTHORS & COPYRIGHTS</A></H1>
  502. <P>Please see the POE manpage.</P>
  503. <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
  504. <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
  505. <STRONG><P CLASS=block> POE::Kernel - POE Event Queue and Resource Manager</P></STRONG>
  506. </TD></TR>
  507. </TABLE>
  508.  
  509. </BODY>
  510.  
  511. </HTML>
  512.