csharp-sdk-upm/Storage/Source/Internal/AVCorePlugins.cs

385 lines
10 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using LeanCloud.Storage.Internal;
namespace LeanCloud.Storage.Internal
{
public class AVPlugins : IAVCorePlugins
{
private static readonly object instanceMutex = new object();
private static IAVCorePlugins instance;
public static IAVCorePlugins Instance
{
get
{
lock (instanceMutex)
{
instance = instance ?? new AVPlugins();
return instance;
}
}
set
{
lock (instanceMutex)
{
instance = value;
}
}
}
private readonly object mutex = new object();
#region Server Controllers
private IHttpClient httpClient;
private IAppRouterController appRouterController;
private IAVCommandRunner commandRunner;
private IStorageController storageController;
private IAVCloudCodeController cloudCodeController;
private IAVConfigController configController;
private IAVFileController fileController;
private IAVObjectController objectController;
private IAVQueryController queryController;
private IAVSessionController sessionController;
private IAVUserController userController;
private IObjectSubclassingController subclassingController;
#endregion
#region Current Instance Controller
private IAVCurrentUserController currentUserController;
private IInstallationIdController installationIdController;
#endregion
public void Reset()
{
lock (mutex)
{
HttpClient = null;
AppRouterController = null;
CommandRunner = null;
StorageController = null;
CloudCodeController = null;
FileController = null;
ObjectController = null;
SessionController = null;
UserController = null;
SubclassingController = null;
CurrentUserController = null;
InstallationIdController = null;
}
}
public IHttpClient HttpClient
{
get
{
lock (mutex)
{
httpClient = httpClient ?? new HttpClient();
return httpClient;
}
}
set
{
lock (mutex)
{
httpClient = value;
}
}
}
public IAppRouterController AppRouterController
{
get
{
lock (mutex)
{
appRouterController = appRouterController ?? new AppRouterController();
return appRouterController;
}
}
set
{
lock (mutex)
{
appRouterController = value;
}
}
}
public IAVCommandRunner CommandRunner
{
get
{
lock (mutex)
{
commandRunner = commandRunner ?? new AVCommandRunner(HttpClient, InstallationIdController);
return commandRunner;
}
}
set
{
lock (mutex)
{
commandRunner = value;
}
}
}
#if !UNITY
public IStorageController StorageController
{
get
{
lock (mutex)
{
storageController = storageController ?? new StorageController(AVClient.CurrentConfiguration.ApplicationId);
return storageController;
}
}
set
{
lock (mutex)
{
storageController = value;
}
}
}
#endif
#if UNITY
public IStorageController StorageController
{
get
{
lock (mutex)
{
storageController = storageController ?? new StorageController(AVInitializeBehaviour.IsWebPlayer, AVClient.CurrentConfiguration.ApplicationId);
return storageController;
}
}
set
{
lock (mutex)
{
storageController = value;
}
}
}
#endif
public IAVCloudCodeController CloudCodeController
{
get
{
lock (mutex)
{
cloudCodeController = cloudCodeController ?? new AVCloudCodeController(CommandRunner);
return cloudCodeController;
}
}
set
{
lock (mutex)
{
cloudCodeController = value;
}
}
}
public IAVFileController FileController
{
get
{
lock (mutex)
{
if (AVClient.CurrentConfiguration.RegionValue == 0)
fileController = fileController ?? new QiniuFileController(CommandRunner);
else if (AVClient.CurrentConfiguration.RegionValue == 2)
fileController = fileController ?? new QCloudCosFileController(CommandRunner);
else if (AVClient.CurrentConfiguration.RegionValue == 1)
fileController = fileController ?? new AWSS3FileController(CommandRunner);
return fileController;
}
}
set
{
lock (mutex)
{
fileController = value;
}
}
}
public IAVConfigController ConfigController
{
get
{
lock (mutex)
{
if (configController == null)
{
configController = new AVConfigController(CommandRunner, StorageController);
}
return configController;
}
}
set
{
lock (mutex)
{
configController = value;
}
}
}
public IAVObjectController ObjectController
{
get
{
lock (mutex)
{
objectController = objectController ?? new AVObjectController(CommandRunner);
return objectController;
}
}
set
{
lock (mutex)
{
objectController = value;
}
}
}
public IAVQueryController QueryController
{
get
{
lock (mutex)
{
if (queryController == null)
{
queryController = new AVQueryController(CommandRunner);
}
return queryController;
}
}
set
{
lock (mutex)
{
queryController = value;
}
}
}
public IAVSessionController SessionController
{
get
{
lock (mutex)
{
sessionController = sessionController ?? new AVSessionController(CommandRunner);
return sessionController;
}
}
set
{
lock (mutex)
{
sessionController = value;
}
}
}
public IAVUserController UserController
{
get
{
lock (mutex)
{
userController = userController ?? new AVUserController(CommandRunner);
return userController;
}
}
set
{
lock (mutex)
{
userController = value;
}
}
}
public IAVCurrentUserController CurrentUserController
{
get
{
lock (mutex)
{
currentUserController = currentUserController ?? new AVCurrentUserController(StorageController);
return currentUserController;
}
}
set
{
lock (mutex)
{
currentUserController = value;
}
}
}
public IObjectSubclassingController SubclassingController
{
get
{
lock (mutex)
{
if (subclassingController == null)
{
subclassingController = new ObjectSubclassingController();
subclassingController.AddRegisterHook(typeof(AVUser), () => CurrentUserController.ClearFromMemory());
}
return subclassingController;
}
}
set
{
lock (mutex)
{
subclassingController = value;
}
}
}
public IInstallationIdController InstallationIdController
{
get
{
lock (mutex)
{
installationIdController = installationIdController ?? new InstallationIdController(StorageController);
return installationIdController;
}
}
set
{
lock (mutex)
{
installationIdController = value;
}
}
}
}
}