//
-// Open Service Platform
// Copyright (c) 2012 Samsung Electronics Co., Ltd.
//
// Licensed under the Apache License, Version 2.0 (the License);
#include <FBaseErrors.h>
#include <FBaseSysLog.h>
-#include <FIo_IpcClient.h>
+#include "FIo_IpcClient.h"
-#include "FIo_IMmcStorageServiceEventListener.h"
#include "FIo_MmcStorageManagerProxy.h"
#include "FIo_MmcStorageManagerIpcMessages.h"
using namespace std;
-
using namespace Tizen::Base;
namespace Tizen { namespace Io
{
+_MmcStorageManagerProxy* _MmcStorageManagerProxy::__pMmcStorageManagerProxyInstance = null;
+
_MmcStorageManagerProxy::_MmcStorageManagerProxy(void)
: __pIpcClient(null)
+ , __pListener(null)
{
}
}
result
-_MmcStorageManagerProxy::Construct(_IMmcStorageServiceEventListener* pListener)
+_MmcStorageManagerProxy::Construct(void)
{
unique_ptr<_IpcClient> pIpcClient(new (std::nothrow) _IpcClient);
SysTryReturnResult(NID_IO, pIpcClient != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
SysTryReturnResult(NID_IO, r == E_SUCCESS, r, "Failed to connect to IPC server.");
__pIpcClient = pIpcClient.release();
- __pListener = pListener;
return E_SUCCESS;
}
+void
+_MmcStorageManagerProxy::InitSingleton(void)
+{
+ _MmcStorageManagerProxy* pInst = new (std::nothrow) _MmcStorageManagerProxy();
+ SysTryReturnVoidResult(NID_IO, pInst != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
+
+ result r = pInst->Construct();
+ SysTryCatch(NID_IO, !IsFailed(r), , r, "[%s] Propagating to caller...", GetErrorMessage(r));
+
+ __pMmcStorageManagerProxyInstance = pInst;
+
+ std::atexit(DestroySingleton);
+ return;
+
+CATCH:
+ delete pInst;
+}
+
+void
+_MmcStorageManagerProxy::DestroySingleton(void)
+{
+ delete __pMmcStorageManagerProxyInstance;
+}
+
+_MmcStorageManagerProxy*
+_MmcStorageManagerProxy::GetInstance(void)
+{
+ static pthread_once_t onceBlock = PTHREAD_ONCE_INIT;
+
+ if (__pMmcStorageManagerProxyInstance == null)
+ {
+ ClearLastResult();
+ pthread_once(&onceBlock, InitSingleton);
+ result r = GetLastResult();
+ if (IsFailed(r))
+ {
+ onceBlock = PTHREAD_ONCE_INIT;
+ SysPropagate(NID_IO, r);
+ }
+ }
+
+ return __pMmcStorageManagerProxyInstance;
+}
+
+void
+_MmcStorageManagerProxy::SetMmcStorageManagerListener(_IMmcStorageManagerListener* pListener)
+{
+ __pListener = pListener;
+}
+
result
_MmcStorageManagerProxy::Mount(void)
{
_MmcStorageManagerProxy::MountResponseReceived(result r)
{
SysLog(NID_IO, "Received Async mount response msg from server is : [%s]", GetErrorMessage(r));
-
- __pListener->OnMmcMountResponseReceived(r);
+ if (__pListener != null)
+ {
+ __pListener->OnMmcMountResponseReceived(r);
+ }
}
void
_MmcStorageManagerProxy::UnmountResponseReceived(result r)
{
SysLog(NID_IO, "Received Async unmount response msg from server is : [%s]", GetErrorMessage(r));
-
- __pListener->OnMmcUnmountResponseReceived(r);
+ if (__pListener != null)
+ {
+ __pListener->OnMmcUnmountResponseReceived(r);
+ }
}
void
_MmcStorageManagerProxy::FormatResponseReceived(result r)
{
SysLog(NID_IO, "Received Async format response msg from server is : [%s]", GetErrorMessage(r));
-
- __pListener->OnMmcFormatResponseReceived(r);
+ if (__pListener != null)
+ {
+ __pListener->OnMmcFormatResponseReceived(r);
+ }
}
-} } // Tizen::Io
+}} // Tizen::Io
+