-
Notifications
You must be signed in to change notification settings - Fork 0
/
aConnection.php
135 lines (113 loc) · 2.63 KB
/
aConnection.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<?php
namespace Poirot\Connection;
use Poirot\Std\ConfigurableSetter;
use Poirot\Connection\Exception\exSendExpressionToServer;
use Poirot\Connection\Exception\exConnection;
use Poirot\Connection\Interfaces\iConnection;
abstract class aConnection
extends ConfigurableSetter
implements iConnection
{
/** @var mixed Expression to Send */
protected $expr;
/**
* Get Prepared Resource Transporter
*
* - prepare resource with options
*
* @throws exConnection
* @return mixed Transporter Resource
*/
abstract function getConnect();
/**
* Send Expression To Server
*
* - send expression to server through transporter
* resource
*
* - don't set request globally through request() if
* expr set
*
* !! getConnect IF NOT
*
* @param mixed $expr Expression
*
* @throws exSendExpressionToServer
* @return mixed Prepared Server Response
*/
final function send($expr = null)
{
if ($expr === null)
$expr = $this->getLastRequest();
if ($expr === null)
throw new \InvalidArgumentException(
'Expression not set, nothing to do.'
);
# check connection
if (! $this->isConnected() )
$this->getConnect();
# ! # remember last request
$this->request($expr);
$result = $this->doSend();
return $result;
}
/**
* Send Expression On the wire
*
* !! get expression from getRequest()
*
* @throws exSendExpressionToServer
* @return mixed Response
*/
abstract function doSend();
/**
* Receive Server Response
*
* - it will executed after a request call to server
* by send expression
* - return null if request not sent
*
* @return string|null
* @throws \Exception No Transporter established
*/
abstract function receive();
/**
* Is Transporter Resource Available?
*
* @return bool
*/
abstract function isConnected();
/**
* Close Transporter
* @return void
*/
abstract function close();
/**
* Set Request Expression To Send Over Wire
*
* @param mixed $expr
*
* @return $this
*/
function request($expr)
{
$this->expr = $expr;
return $this;
}
/**
* Get Latest Request
*
* @return null|mixed
*/
function getLastRequest()
{
return $this->expr;
}
// Options:
// ..
function __destruct()
{
if ( $this->isConnected() )
$this->close();
}
}