static async Task <IModuleClient> Create(Option <UpstreamProtocol> upstreamProtocol, Func <ModuleClient, Task> initialize, Func <UpstreamProtocol, Task <Client.ModuleClient> > deviceClientCreator) { try { return(await ExecuteWithRetry( async() => { Client.ModuleClient dc = await CreateDeviceClientForUpstreamProtocol(upstreamProtocol, deviceClientCreator); Events.DeviceClientCreated(); var deviceClient = new ModuleClient(dc); if (initialize != null) { await initialize(deviceClient); } return deviceClient; }, Events.RetryingDeviceClientConnection)); } catch (Exception e) { Events.DeviceClientSetupFailed(e); Environment.Exit(1); return(null); } }
static async Task <Client.ModuleClient> CreateAndOpenDeviceClient(TransportType transport, Option <string> connectionString, ConnectionStatusChangesHandler statusChangedHandler, Option <string> productInfo) { Events.AttemptingConnectionWithTransport(transport); Client.ModuleClient deviceClient = await connectionString.Map(cs => Task.FromResult(Client.ModuleClient.CreateFromConnectionString(cs, transport))) .GetOrElse(() => Client.ModuleClient.CreateFromEnvironmentAsync(transport)); productInfo.ForEach(p => deviceClient.ProductInfo = p); await OpenAsync(statusChangedHandler, deviceClient); Events.ConnectedWithTransport(transport); return(deviceClient); }
static async Task <Client.ModuleClient> CreateAndOpenDeviceClient( UpstreamProtocol upstreamProtocol, Option <string> connectionString, ConnectionStatusChangesHandler statusChangedHandler, Option <IWebProxy> proxy, Option <string> productInfo) { ITransportSettings settings = GetTransportSettings(upstreamProtocol, proxy); Events.AttemptingConnectionWithTransport(settings.GetTransportType()); Client.ModuleClient deviceClient = await connectionString .Map(cs => Task.FromResult(Client.ModuleClient.CreateFromConnectionString(cs, new[] { settings }))) .GetOrElse(() => Client.ModuleClient.CreateFromEnvironmentAsync(new[] { settings })); productInfo.ForEach(p => deviceClient.ProductInfo = p); await OpenAsync(statusChangedHandler, deviceClient); Events.ConnectedWithTransport(settings.GetTransportType()); return(deviceClient); }
ModuleClient(Client.ModuleClient moduleClient) { this.moduleClient = moduleClient; }
static async Task OpenAsync(ConnectionStatusChangesHandler statusChangedHandler, Client.ModuleClient deviceClient) { // note: it's important to set the status-changed handler and // timeout value *before* we open a connection to the hub deviceClient.OperationTimeoutInMilliseconds = DeviceClientTimeout; deviceClient.SetConnectionStatusChangesHandler(statusChangedHandler); await deviceClient.OpenAsync(); }
ModuleClient(Client.ModuleClient deviceClient) { this.deviceClient = deviceClient; }