You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CrowdControl/Assets/3rd/StompyRobot/SRDebugger/Scripts/Services/Implementation/BugReportApiService.cs

118 lines
3.0 KiB
C#

#if NETFX_CORE
using System.Threading.Tasks;
#endif
namespace SRDebugger.Services.Implementation
{
using System;
using Internal;
using SRF;
using SRF.Service;
using UnityEngine;
[Service(typeof (IBugReportService))]
public class BugReportApiService : SRServiceBase<IBugReportService>, IBugReportService
{
public const float Timeout = 12f;
private BugReportCompleteCallback _completeCallback;
private string _errorMessage;
private bool _isBusy;
private float _previousProgress;
private BugReportProgressCallback _progressCallback;
private BugReportApi _reportApi;
public void SendBugReport(BugReport report, BugReportCompleteCallback completeHandler,
BugReportProgressCallback progressCallback = null)
{
if (report == null)
{
throw new ArgumentNullException("report");
}
if (completeHandler == null)
{
throw new ArgumentNullException("completeHandler");
}
if (_isBusy)
{
completeHandler(false, "BugReportApiService is already sending a bug report");
return;
}
if (Application.internetReachability == NetworkReachability.NotReachable)
{
completeHandler(false, "No Internet Connection");
return;
}
_errorMessage = "";
enabled = true;
_isBusy = true;
_completeCallback = completeHandler;
_progressCallback = progressCallback;
_reportApi = new BugReportApi(report, Settings.Instance.ApiKey);
StartCoroutine(_reportApi.Submit());
}
protected override void Awake()
{
base.Awake();
CachedTransform.SetParent(Hierarchy.Get("SRDebugger"));
}
private void OnProgress(float progress)
{
if (_progressCallback != null)
{
_progressCallback(progress);
}
}
private void OnComplete()
{
_isBusy = false;
enabled = false;
_completeCallback(_reportApi.WasSuccessful,
string.IsNullOrEmpty(_reportApi.ErrorMessage) ? _errorMessage : _reportApi.ErrorMessage);
_completeCallback = null;
}
protected override void Update()
{
base.Update();
if (!_isBusy)
{
return;
}
if (_reportApi == null)
{
_isBusy = false;
}
if (_reportApi.IsComplete)
{
OnComplete();
return;
}
if (_previousProgress != _reportApi.Progress)
{
OnProgress(_reportApi.Progress);
_previousProgress = _reportApi.Progress;
}
}
}
}