NAME
Mojo::Transaction - Transaction base class
SYNOPSIS
package
Mojo::Transaction::MyTransaction;
sub
client_read {...}
sub
client_write {...}
sub
server_read {...}
sub
server_write {...}
DESCRIPTION
Mojo::Transaction is an abstract base class for transactions, like Mojo::Transaction::HTTP and Mojo::Transaction::WebSocket.
EVENTS
Mojo::Transaction inherits all events from Mojo::EventEmitter and can emit the following new ones.
connection
$tx
->on(
connection
=>
sub
{
my
(
$tx
,
$connection
) =
@_
;
...
});
Emitted when a connection has been assigned to transaction.
finish
$tx
->on(
finish
=>
sub
{
my
$tx
=
shift
;
...
});
Emitted when transaction is finished.
resume
$tx
->on(
resume
=>
sub
{
my
$tx
=
shift
;
...
});
Emitted when transaction is resumed.
ATTRIBUTES
Mojo::Transaction implements the following attributes.
kept_alive
my
$kept_alive
=
$tx
->kept_alive;
$tx
=
$tx
->kept_alive(1);
Connection has been kept alive.
local_address
my
$address
=
$tx
->local_address;
$tx
=
$tx
->local_address(
'127.0.0.1'
);
Local interface address.
local_port
my
$port
=
$tx
->local_port;
$tx
=
$tx
->local_port(8080);
Local interface port.
original_remote_address
my
$address
=
$tx
->original_remote_address;
$tx
=
$tx
->original_remote_address(
'127.0.0.1'
);
Remote interface address.
remote_port
my
$port
=
$tx
->remote_port;
$tx
=
$tx
->remote_port(8081);
Remote interface port.
req
my
$req
=
$tx
->req;
$tx
=
$tx
->req(Mojo::Message::Request->new);
HTTP request, defaults to a Mojo::Message::Request object.
res
my
$res
=
$tx
->res;
$tx
=
$tx
->res(Mojo::Message::Response->new);
HTTP response, defaults to a Mojo::Message::Response object.
METHODS
Mojo::Transaction inherits all methods from Mojo::EventEmitter and implements the following new ones.
client_close
$tx
->client_close;
$tx
->client_close(1);
Transaction closed client-side, no actual connection close is assumed by default, used to implement user agents.
client_read
$tx
->client_read(
$bytes
);
Read data client-side, used to implement user agents. Meant to be overloaded in a subclass.
client_write
my
$bytes
=
$tx
->client_write;
Write data client-side, used to implement user agents. Meant to be overloaded in a subclass.
connection
my
$id
=
$tx
->connection;
$tx
=
$tx
->connection(
$id
);
Connection identifier.
error
my
$err
=
$tx
->error;
Get request or response error and return undef
if there is no error, commonly used together with "success".
# Longer version
my
$err
=
$tx
->req->error ||
$tx
->res->error;
# Check for different kinds of errors
if
(
my
$err
=
$tx
->error) {
die
"$err->{code} response: $err->{message}"
if
$err
->{code};
die
"Connection error: $err->{message}"
;
}
is_finished
my
$bool
=
$tx
->is_finished;
Check if transaction is finished.
is_websocket
my
$bool
=
$tx
->is_websocket;
False, this is not a Mojo::Transaction::WebSocket object.
is_writing
my
$bool
=
$tx
->is_writing;
Check if transaction is writing.
resume
$tx
=
$tx
->resume;
Resume transaction.
remote_address
my
$address
=
$tx
->remote_address;
$tx
=
$tx
->remote_address(
'127.0.0.1'
);
Same as "original_remote_address" or the last value of the X-Forwarded-For
header if "req" has been performed through a reverse proxy.
server_close
$tx
->server_close;
Transaction closed server-side, used to implement web servers.
server_read
$tx
->server_read(
$bytes
);
Read data server-side, used to implement web servers. Meant to be overloaded in a subclass.
server_write
my
$bytes
=
$tx
->server_write;
Write data server-side, used to implement web servers. Meant to be overloaded in a subclass.
success
my
$res
=
$tx
->success;
Returns the Mojo::Message::Response object from "res" if transaction was successful or undef
otherwise. Connection and parser errors have only a message in "error", 400 and 500 responses also a code.
# Sensible exception handling
if
(
my
$res
=
$tx
->success) {
say
$res
->body }
else
{
my
$err
=
$tx
->error;
die
"$err->{code} response: $err->{message}"
if
$err
->{code};
die
"Connection error: $err->{message}"
;
}