385 lines
10 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|