def do_test_client_Client_kwargs_sessionSettings(self, service): sessionSettings = SessionSettings() sessionSettings.connectTimeoutSec = 5.0 result = self.doService(service, sessionSettings = sessionSettings) self.assertTrue(result.overallStatus.isGood()) allSessionInfos = self.client.allSessionInformations() self.assertEqual(len(allSessionInfos), 1) self.assertEqual(allSessionInfos[0].sessionSettings, sessionSettings) # check if the following session is reused result = self.doService(service, sessionSettings = sessionSettings) self.assertTrue(result.overallStatus.isGood()) allSessionInfos = self.client.allSessionInformations() self.assertEqual(len(allSessionInfos), 1) self.assertEqual(allSessionInfos[0].sessionSettings, sessionSettings) self.assertEqual(result.targets[0].clientConnectionId, 0) # check if the following session is not reused sessionSettings2 = SessionSettings() sessionSettings2.connectTimeoutSec = 6.0 result = self.doService(service, sessionSettings = sessionSettings2) self.assertTrue(result.overallStatus.isGood()) allSessionInfos = self.client.allSessionInformations() self.assertEqual(len(allSessionInfos), 2) self.assertEqual(allSessionInfos[1].sessionSettings, sessionSettings2) self.assertEqual(result.targets[0].clientConnectionId, 1) # check if the following session is not reused sessionSettings.unique = True result = self.doService(service, sessionSettings = sessionSettings) self.assertTrue(result.overallStatus.isGood()) allSessionInfos = self.client.allSessionInformations() self.assertEqual(len(allSessionInfos), 3) self.assertEqual(allSessionInfos[2].sessionSettings, sessionSettings) self.assertEqual(result.targets[0].clientConnectionId, 2) # check if the following session is not reused result = self.doService(service, sessionSettings = sessionSettings) self.assertTrue(result.overallStatus.isGood()) allSessionInfos = self.client.allSessionInformations() self.assertEqual(len(allSessionInfos), 4) self.assertEqual(allSessionInfos[3].sessionSettings, sessionSettings) self.assertEqual(result.targets[0].clientConnectionId, 3) # check if a specific ClientConnectionId may be reused: result = self.doService(service, clientConnectionId = 3) self.assertTrue(result.overallStatus.isGood()) allSessionInfos = self.client.allSessionInformations() self.assertEqual(len(allSessionInfos), 4) self.assertEqual(result.targets[0].clientConnectionId, 3)
def do_test_client_Client_kwargs_specificSessionSettings(self, service): clientSettings = self.client.clientSettings() clientSettings.specificSessionSettings[self.serverUri] = SessionSettings() clientSettings.specificSessionSettings[self.serverUri].connectTimeoutSec = 6.0 self.client.setClientSettings(clientSettings) result = self.doService(service) self.assertTrue(result.overallStatus.isGood()) allSessionInfos = self.client.allSessionInformations() self.assertEqual(len(allSessionInfos), 1) self.assertEqual(allSessionInfos[0].sessionSettings, clientSettings.specificSessionSettings[self.serverUri]) self.assertNotEqual(allSessionInfos[0].sessionSettings, clientSettings.defaultSessionSettings) # check if the session is reused result = self.doService(service) self.assertTrue(result.overallStatus.isGood()) self.assertEqual(len(allSessionInfos), 1)
result = certificate.toDERFile(answer) if result == -1: raise Exception("Could not save the client certificate to %s" % answer) print("") print( "===========================================================================================" ) print("STEP 5: Configure the session to be created") print( "===========================================================================================" ) print("") # suppose we want Basic128Rsa15 encryption + signed communication: sessionSettings = SessionSettings() sessionSettings.securitySettings.securityPolicy = securitypolicies.UA_Basic128Rsa15 sessionSettings.securitySettings.messageSecurityMode = messagesecuritymodes.Mode_Sign print("") print( "===========================================================================================" ) print("STEP 6: Register a callback function to handle the server certificate") print( "===========================================================================================" ) print("") def myCallback(certificate, cause):
from pyuaf.client.configs import SessionConfig print( "This example will fail when executed, since it tries to connect to non-existing servers" ) # create a single SessionConfig object that we will use for all our service calls cfg = SessionConfig() # configure the default settings for the sessions that will be created cfg.defaultSessionSettings.sessionTimeoutSec = 100.0 cfg.defaultSessionSettings.connectTimeoutSec = 2.0 # for a particular server (an embedded device) we expect an unreliable connection, # so we specify some settings that are more suitable for this particular server cfg.specificSessionSettings["My/Unreliable/Device/Server"] = SessionSettings() cfg.specificSessionSettings[ "My/Unreliable/Device/Server"].sessionTimeoutSec = 200.0 cfg.specificSessionSettings[ "My/Unreliable/Device/Server"].connectTimeoutSec = 5.0 # we also have a particular very reliable and fast server (some PLC), for which we want to # specify other settings: cfg.specificSessionSettings["My/Reliable/PLC/Server"] = SessionSettings() cfg.specificSessionSettings["My/Reliable/PLC/Server"].connectTimeoutSec = 0.5 # Now we can use the same config for many different service calls. # Sessions will be created silently in the background by the UAF, based on the # settings we provided via the 'cfg' object. # If sessions need to be created to the "My/Unreliable/Device/Uri" or "My/Reliable/PLC/Uri" # servers, they will be created according to the specified settings.
myClientSettings.defaultSessionSettings.connectTimeoutSec = 2.0 myClientSettings.defaultSubscriptionSettings.publishingIntervalSec = 0.5 myClientSettings.defaultSubscriptionSettings.lifeTimeCount = 600 myClientSettings.defaultReadSettings.callTimeoutSec = 2.0 myClientSettings.defaultReadSettings.maxAgeSec = 10.0 myClientSettings.defaultMethodCallSettings.callTimeoutSec = 2.0 myClientSettings.defaultWriteSettings.callTimeoutSec = 2.0 myClientSettings.defaultBrowseSettings.callTimeoutSec = 2.0 # and so on, and so on ... # the clientSettings are in use as soon as you provide them again to the Client: myClient.setClientSettings(myClientSettings) # In case you want to choose different settings for specific read/write/... calls, then you can # provide them also: mySpecialSessionSettings = SessionSettings() mySpecialSessionSettings.sessionTimeoutSec = 500.0 mySpecialSessionSettings.connectTimeoutSec = 0.5 mySpecialReadSettings = ReadSettings() mySpecialReadSettings.callTimeoutSec = 2.0 mySpecialReadSettings.maxAgeSec = 10.0 result = myClient.read(addresses = [address_TSetpoint, address_HeaterStatus], attributeId = pyuaf.util.attributeids.DisplayName, sessionSettings = mySpecialSessionSettings, serviceSettings = mySpecialReadSettings) print("") print("################################################################################################################")
clientSettings.defaultSubscriptionSettings.lifeTimeCount = 600 # etc. ... # now configure the default settings for the Read service: clientSettings.defaultReadSettings.callTimeoutSec = 2.0 clientSettings.defaultReadSettings.maxAgeSec = 10.0 # same for the writeSettings, methodCallSettings, ... clientSettings.defaultMethodCallSettings.callTimeoutSec = 2.0 clientSettings.defaultWriteSettings.callTimeoutSec = 2.0 clientSettings.defaultBrowseSettings.callTimeoutSec = 2.0 # and so on, and so on ... # NOTE: for clientSettings, you may also configure SessionSettings for specific servers: clientSettings.specificSessionSettings[ "My/Unreliable/Device/Server/URI"] = SessionSettings() clientSettings.specificSessionSettings[ "My/Unreliable/Device/Server/URI"].sessionTimeoutSec = 200.0 clientSettings.specificSessionSettings[ "My/Unreliable/Device/Server/URI"].connectTimeoutSec = 5.0 # If the client connects to the server with ServerUri = "My/Unreliable/Device/Server/URI", # then it will use these settings instead of the defaultSessionSettings! # Now you can simply create a client that uses these settings: myClient = Client(clientSettings) # or alternatively: # myClient = Client() # myClient.setClientSettings(clientSettings) # let's read 2 nodes: address0 = Address(NodeId("Demo.SimulationSpeed", NAMESPACE_URI), SERVER_URI)