get metaclass using preferred mechanism, via Moose
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Request.pm
index dce7a05..f75319b 100644 (file)
@@ -91,6 +91,29 @@ has _log => (
     required => 1,
 );
 
+has io_fh => (
+  is=>'ro',
+  predicate=>'has_io_fh',
+  lazy=>1,
+  builder=>'_build_io_fh');
+
+sub _build_io_fh {
+    my $self = shift;
+    return $self->env->{'psgix.io'}
+      || die "Your Server does not support psgix.io";
+};
+
+has body_fh => (
+  is=>'ro',
+  predicate=>'has_body_fh',
+  lazy=>1,
+  builder=>'_build_body_fh');
+
+sub _build_body_fh {
+    (my $input_fh = shift->env->{'psgi.input'})->seek(0, 0);
+    return $input_fh;
+};
+
 # Amount of data to read from input on each pass
 our $CHUNKSIZE = 64 * 1024;
 
@@ -846,6 +869,12 @@ Returns the value of the C<REMOTE_USER> environment variable.
 Shortcut to $req->headers->user_agent. Returns the user agent (browser)
 version string.
 
+=head2 $req->io_fh
+
+Returns a psgix.io bidirectional socket, if your server supports one.  Used for
+when you want to jailbreak out of PSGI and handle bidirectional client server
+communication manually, such as when you are using cometd or websockets.
+
 =head1 SETUP METHODS
 
 You should never need to call these yourself in application code,