/// <summary>
 /// Internal helper
 /// </summary>
 /// <param name="client"></param>
 /// <param name="server"></param>
 /// <param name="opc"></param>
 /// <param name="logger"></param>
 private PublisherServices(IPublisherClient client, IPublisherServer server,
                           IEndpointServices opc, ILogger logger)
 {
     _opc    = opc ?? throw new ArgumentNullException(nameof(opc));
     _logger = logger ?? throw new ArgumentNullException(nameof(logger));
     _server = server;
     _client = client;
 }
 /// <summary>
 /// Create services connecting to publisher server
 /// </summary>
 /// <param name="server"></param>
 /// <param name="opc"></param>
 /// <param name="logger"></param>
 public PublisherServices(IPublisherServer server, IEndpointServices opc,
                          ILogger logger) : this(null, server, opc, logger)
 {
     if (server == null)
     {
         throw new ArgumentNullException(nameof(server));
     }
     //
     // Give it 10 seconds in which we are expecting StartAsync to be
     // called. If it is not called within 10 seconds start is called
     // from timer thread. This allows startup to await publisher
     // finding without module processing begins and publish calls
     // initially fail.
     //
     _pnp = new Timer(OnReconnectTimer, null, 10000, Timeout.Infinite);
 }