use PhpOpcua\Client\ExtTransportPubSub\Types\DataSetMetaData;
// From a JSON config file
$metadata = DataSetMetaData::fromJsonFile('/etc/opcua/line1.json');
// From an OPC UA DataSetMetaDataType XML file
$metadata = DataSetMetaData::fromXmlFile('/etc/opcua/line1.xml');
// From a running server via the classic opcua-client
$metadata = DataSetMetaData::fetchFromServer($client, 'ns=2;s=PDS/Line1/Metadata');
use PhpOpcua\Client\ExtTransportPubSub\Security\PubSubSecurityMode;
use PhpOpcua\Client\ExtTransportPubSub\Security\PubSubSecurityOptions;
use PhpOpcua\Client\ExtTransportPubSub\Security\StaticGroupKeyProvider;
$subscriber = SubscriberBuilder::create()
->listenUdp(
endpoint: 'opc.udp://239.0.0.1:4840',
security: new PubSubSecurityOptions(
mode: PubSubSecurityMode::SignAndEncrypt,
keyProvider: new StaticGroupKeyProvider(
signingKey: hex2bin($_ENV['PUBSUB_SIGN']),
encryptingKey: hex2bin($_ENV['PUBSUB_ENC']),
keyNonce: hex2bin($_ENV['PUBSUB_NONCE']),
),
),
readers: [$reader],
);
use PhpOpcua\Client\ClientBuilder;
use PhpOpcua\Client\ExtTransportPubSub\Security\SksGroupKeyProvider;
$client = ClientBuilder::create()->connect('opc.tcp://sks.example.com:4840');
$provider = new SksGroupKeyProvider($client, securityGroupId: 'line1-ops');
$provider->refresh();
$subscriber = SubscriberBuilder::create()
->listenUdp(
endpoint: 'opc.udp://239.0.0.1:4840',
security: new PubSubSecurityOptions(PubSubSecurityMode::SignAndEncrypt, $provider),
readers: [$reader],
);
while (! $shouldStop) {
foreach ($subscriber->poll(timeoutMs: 250) as $msg) {
handle($msg);
}
doOtherWork();
}
use PhpOpcua\Client\ExtTransportPubSub\Event\DataSetFieldReceived;
use PhpOpcua\Client\ExtTransportPubSub\Event\MessageDecodeError;
use PhpOpcua\Client\ExtTransportPubSub\Event\SecurityValidationFailed;
$subscriber = SubscriberBuilder::create()
->setEventDispatcher($yourDispatcher)
->listenUdp(/* ... */);
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$logger = new Logger('pubsub');
$logger->pushHandler(new StreamHandler('php://stderr', Logger::DEBUG));
$subscriber = SubscriberBuilder::create()
->setLogger($logger)
->listenUdp(/* ... */);