private static UserDataRequester.SyncData WaitForSyncing(string name)
 {
     while (true)
     {
         UserDataRequester.SyncData data = UserDataRequester.GetUserSyncDataAsync(name, new CancellationTokenSource().Token).Result;
         if (data.Error == true || data.Done == true)
         {
             return(data);
         }
         Task.Delay(data.Interval ?? 2000, new CancellationTokenSource(TimeSpan.FromSeconds(60)).Token).Wait();
     }
 }
示例#2
0
        /// <summary>
        /// maple.gg에 유저 데이터 동기화를 요청한다.
        /// </summary>
        /// <remarks>
        /// 별다른 에러 메시지가 없으면 성공 응답을 받을 때 까지 일정 간격으로 재 요청함.
        /// </remarks>
        /// <param name="cancellation"></param>
        /// <returns>정상적으로 동기화되면 메서드 종료. 아니면 <see cref="UserSyncException"/> 예외 발생</returns>
        /// <exception cref="NullReferenceException">응답으로 받은 json에서 데이터를 파싱하지 못했을 때 발생</exception>
        /// <exception cref="UserSyncException">동기화 실패 응답을 받았을 때 발생. 관련 내용은 <see cref="UserDataRequester.SyncData.Message"/>에 표시됩니다.</exception>
        public async Task RequestSyncAsync(CancellationToken cancellation = default)
        {
            while (true)
            {
                UserDataRequester.SyncData data = await UserDataRequester.GetUserSyncDataAsync(Name, cancellation);

                if (data.Done is true)
                {
                    return;
                }

                if (data.Error is true)
                {
                    throw new UserSyncException(Name, data.Message ?? string.Empty);
                }
                await Task.Delay(data.Interval ?? 2000, cancellation);
            }
        }
示例#3
0
        /// <summary>
        /// maple.gg에서 유저 정보를 가져옵니다.
        /// </summary>
        /// <param name="cancellation"></param>
        /// <returns></returns>
        /// <exception cref="ParseException">웹페이지 파싱에 실패했을 때 발생</exception>
        /// <exception cref="UserNotFoundException">maple.gg에서 유저 검색에 실패했을 때 발생</exception>
        public async Task LoadUserDetailAsync(CancellationToken cancellation = default)
        {
            HtmlDocument html = await UserDataRequester.GetUserDataHtmlAsync(Name, cancellation);

            SetUserDetail(html);
        }