commandWinampAuth.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #include "./commandWinampAuth.h"
  2. #include "./resultWinampAuth.h"
  3. LoginCommandWinampAuth::LoginCommandWinampAuth()
  4. : ref(1)
  5. {
  6. }
  7. LoginCommandWinampAuth::~LoginCommandWinampAuth()
  8. {
  9. }
  10. HRESULT LoginCommandWinampAuth::CreateInstance(LoginCommandWinampAuth **instance)
  11. {
  12. if (NULL == instance) return E_POINTER;
  13. *instance = new LoginCommandWinampAuth();
  14. if (NULL == *instance) return E_OUTOFMEMORY;
  15. return S_OK;
  16. }
  17. ULONG LoginCommandWinampAuth::AddRef()
  18. {
  19. return InterlockedIncrement((LONG*)&ref);
  20. }
  21. ULONG LoginCommandWinampAuth::Release()
  22. {
  23. if (0 == ref)
  24. return ref;
  25. LONG r = InterlockedDecrement((LONG*)&ref);
  26. if (0 == r)
  27. delete(this);
  28. return r;
  29. }
  30. HRESULT LoginCommandWinampAuth::GetType(GUID *commandUid)
  31. {
  32. if (NULL == commandUid) return E_INVALIDARG;
  33. *commandUid = LCUID_WINAMPAUTH;
  34. return S_OK;
  35. }
  36. HRESULT LoginCommandWinampAuth::SetParameter(LPCWSTR pszKey, LPCWSTR pszValue)
  37. {
  38. return E_NOTIMPL;
  39. }
  40. HRESULT LoginCommandWinampAuth::IsValid()
  41. {
  42. return S_OK;
  43. }
  44. HRESULT LoginCommandWinampAuth::IsIdentical(LoginCommand *test)
  45. {
  46. if (NULL == test)
  47. return E_INVALIDARG;
  48. GUID typeId;
  49. if (FAILED(test->GetType(&typeId)) || FALSE == IsEqualGUID(LCUID_WINAMPAUTH, typeId))
  50. return S_FALSE;
  51. return S_OK;
  52. }
  53. HRESULT LoginCommandWinampAuth::BeginLogin(LoginData *data, LoginResult::Callback callback, void *user, LoginResult **result)
  54. {
  55. LoginResultWinampAuth *winampAuth;
  56. HRESULT hr = LoginResultWinampAuth::CreateInstance(data, callback, user, &winampAuth);
  57. if (SUCCEEDED(hr))
  58. {
  59. if (NULL != result)
  60. *result = winampAuth;
  61. else
  62. winampAuth->Release();
  63. }
  64. else
  65. {
  66. if (NULL != result)
  67. *result = NULL;
  68. }
  69. return hr;
  70. }
  71. HRESULT LoginCommandWinampAuth::EndLogin(LoginResult *result, INT *authCode, LoginCredentials **credentials)
  72. {
  73. if (NULL == result)
  74. return E_INVALIDARG;
  75. HRESULT hr = result->IsCompleted();
  76. if (S_OK != hr)
  77. {
  78. HANDLE completed;
  79. hr = result->GetWaitHandle(&completed);
  80. if (SUCCEEDED(hr))
  81. {
  82. WaitForSingleObjectEx(completed, INFINITE, TRUE);
  83. CloseHandle(completed);
  84. }
  85. }
  86. if (SUCCEEDED(hr))
  87. {
  88. LoginResultWinampAuth *winampAuth;
  89. hr = result->QueryInterface(LCUID_WINAMPAUTH, (void**)&winampAuth);
  90. if(SUCCEEDED(hr))
  91. {
  92. hr = winampAuth->GetResult(authCode, credentials);
  93. winampAuth->Release();
  94. }
  95. }
  96. return hr;
  97. }
  98. HRESULT LoginCommandWinampAuth::RequestAbort(LoginResult *result, BOOL drop)
  99. {
  100. if (NULL == result) return E_INVALIDARG;
  101. return result->RequestAbort(drop);
  102. }