namespace Yw
{
///
/// ViewToken
///
public sealed partial class BIMFaceClient
{
private readonly Dictionary _viewToken = new();//view token
private const string _viewTokenUrl = @"https://api.bimface.com/view/token";//视图令牌请求地址
private readonly ViewTokenExpireHelper _viewTokenExpireHelper = new();//view token 过期辅助类
///
/// 获取ViewToken
///
public async Task GetViewToken(string bimfaceId, eModelIdType modelIdType = eModelIdType.fileId)
{
await GetAccessToken();
if (!_viewToken.ContainsKey(bimfaceId) || _viewTokenExpireHelper.IsExpire(bimfaceId))
{
await GetViewTokenAsync(bimfaceId, modelIdType);
}
return _viewToken[bimfaceId];
}
//获取AccessToken,内部调用
private async Task GetViewTokenAsync(string bimfaceId, eModelIdType modelIdType = eModelIdType.fileId)
{
var url = $"{_viewTokenUrl}?{modelIdType}={bimfaceId}";
var request = new FlurlRequest(url);
var header = HeaderHelper.GetHeader(_accessToken);
request.WithHeader(header.Key, header.Value);
var response = await request.GetAsync();
var jsonString = await response.GetStringAsync();
var result = JsonHelper.Json2Object(jsonString);
result.TryThrowException();
if (_viewToken.ContainsKey(bimfaceId))
{
_viewToken[bimfaceId] = result.Data;
}
else
{
_viewToken.Add(bimfaceId, result.Data);
}
_viewTokenExpireHelper.SetExpireTime(bimfaceId);
}
}
}