private async Task<bool> EnsureTokenIsValid() { var res = false; if (masterClient == null || (string.IsNullOrWhiteSpace(conversationToken) || string.IsNullOrWhiteSpace(ConversationId)) || DateTime.UtcNow > convoTokenExpirationDate || ConversationClient == null) return res; //MK renew only when getting close to end date (~5 min) if (DateTime.UtcNow.AddMinutes(-5) > convoTokenExpirationDate) { var refreshConvoTokenResponse = await ConversationClient.Tokens.RenewTokenWithOperationResponseAsync(ConversationId); if (!string.IsNullOrWhiteSpace(refreshConvoTokenResponse?.Body)) { conversationToken = refreshConvoTokenResponse.Body; convoTokenExpirationDate = DateTimeOffset.UtcNow.AddMinutes(Utilities.Constants.ConvoTokenExpirationTimeInMinutes); ConversationClient = new DirectLinkApiClient(new TokenCredentials(conversationToken, TenantId), new LoggingHttpHandler()); res = true; } else { //TODO handle refresh of new conversation token failure } } else { res = true; } return res; }
private async Task<string> StartNewConversation() { var newConvoTokenResponse = await masterClient.Tokens.GenerateTokenForNewConversationWithOperationResponseAsync(); if (!string.IsNullOrWhiteSpace(newConvoTokenResponse?.Body)) { ConversationClient = new DirectLinkApiClient(new TokenCredentials(newConvoTokenResponse.Body, TenantId), new LoggingHttpHandler()); var newConvoResponse = await ConversationClient.Conversations.NewConversationWithOperationResponseAsync(); if (!string.IsNullOrWhiteSpace(newConvoResponse?.Body?.ConversationId)) { conversationToken = newConvoResponse.Body.Token; convoTokenExpirationDate = DateTimeOffset.UtcNow.AddMinutes(Utilities.Constants.ConvoTokenExpirationTimeInMinutes); return newConvoResponse.Body.ConversationId; } else { //TODO handle new conversation creation failure } } else { //TODO handle generation of new conversation token failure } return null; }