pharmaintelligence / mllp
PHP MLLP 服务器与客户端。基于 ReaktPHP。
dev-master
2015-01-25 13:30 UTC
Requires
- php: >=5.4.0
- react/react: 0.4.*
This package is auto-updated.
Last update: 2024-09-25 21:03:13 UTC
README
基于 reactphp 构建,使用 PHP 实现的 MLLP 服务器。MLLP 服务器监听 TCP 端口。接受 MLLP 负载,处理 MLLP 封装的展开和响应的封装或包装。
服务器
此发行版包含一个抽象的 Server
类,可用于构建并触发 4 个事件。客户端的响应应通过 send()
函数发送。
事件
connection
: 当建立连接时,此事件被触发。参数是连接,ConnectionInterface
的实例。data
:当收到数据时,此事件被触发。事件包含两个参数:$data
收到的数据,从它的 MLLP 封装中剥离,以及接收数据的连接,ConnectionInterface
的实例。send
:当通过服务器发送数据时,此事件被触发。事件包含未展开的数据。error
:在接收数据、展开 MLLP 封装或发送数据时发生错误时,此事件被触发。包含一个参数:$errorMessage
。
示例实现
use PharmaIntelligence\MLLP\Server;
use PharmaIntelligence\HL7\Unserializer;
use React\Socket\ConnectionInterface;
class MyServer extends Server {
// No added logic in this example
}
$loop = React\EventLoop\Factory::create();
$socket = new React\Socket\Server($loop);
// Set up a React stream to STDOUT to log everything to the console.
$logging = new React\Stream\Stream(STDOUT, $loop);
$server = new MyServer($socket);
// Log connection info
$server->on('connection', function(ConnectionInterface $connection) use($logging) {
$logging->write('Connection from: '.$connection->getRemoteAddress().PHP_EOL);
});
// Log error info
$server->on('error', function($errorMessage) use($logging) {
$logging->write('Error: '.$errorMessage.PHP_EOL);
});
// Log sent data
$server->on('send', function($data) use($logging) {
$logging->write('Sending: '.str_replace(chr(13), PHP_EOL, $data).PHP_EOL);
});
// Log received data
$server->on('data', function($data) use($logging) {
$logging->write('Received: '.str_replace(chr(13), PHP_EOL, $data).PHP_EOL);
});
$server->on('data', function ($data, ConnectionInterface $connection) use($server) {
// $data contains a HL7 Payload
// Parse HL7 and create an ACK message
$ack = 'AN_ACK_STRING';
$server->send($ack, $connection);
$connection->end();
});
$socket->listen(23887);
$loop->run();