private static async Task HandleAuthorizationSequence(string token, IWebSocketClientTransportPipeline transportPipeline, CancellationToken cancelToken) { var connectTimeoutTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancelToken); connectTimeoutTokenSource.CancelAfter(5000); // Begin the authorization sequence // Expect 'auth_required' var msg = await transportPipeline.GetNextMessageAsync <HassMessage>(connectTimeoutTokenSource.Token) .ConfigureAwait(false); if (msg.Type != "auth_required") { throw new ApplicationException($"Unexpected type: '{msg.Type}' expected 'auth_required'"); } // Now send the auth message to Home Assistant await transportPipeline.SendMessageAsync( new HassAuthMessage { AccessToken = token }, connectTimeoutTokenSource.Token ).ConfigureAwait(false); // Now get the result var authResultMessage = await transportPipeline .GetNextMessageAsync <HassMessage>(connectTimeoutTokenSource.Token).ConfigureAwait(false); switch (authResultMessage.Type) { case "auth_ok": return; case "auth_invalid": await transportPipeline.CloseAsync().ConfigureAwait(false); throw new HomeAssistantConnectionException(DisconnectReason.Unauthorized); default: throw new ApplicationException($"Unexpected response ({authResultMessage.Type})"); } }
public IHomeAssistantConnection New(IWebSocketClientTransportPipeline transportPipeline) { return(new HomeAssistantConnection(_logger, transportPipeline, _apiManager)); }