facebook.cpp 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. #include "facebook.h"
  2. #ifdef __ANDROID__
  3. #include "android/AndroidFacebook.h"
  4. #elif __APPLE__
  5. #include <TargetConditionals.h>
  6. #include "ios/iosFacebook.h"
  7. #else
  8. #include "sim/FacebookSimulator.h"
  9. #endif
  10. namespace facebook
  11. {
  12. namespace internal
  13. {
  14. using namespace std;
  15. cbInit fInit = []() {};
  16. cbFree fFree = []() {};
  17. cbLogin fLogin = []() {};
  18. cbLogout fLogout = []() {};
  19. cbNewMeRequest fNewMeRequest = []() {};
  20. cbGetFriends fGetFriends = []() {};
  21. cbGameRequest fGameRequest = [](const string& title, const string& text, const vector<string>& dest, const string& objectID, const std::string& userData) {};
  22. cbIsLoggedIn fIsLoggedIn = []() {return false; };
  23. cbGetUserID fGetUserID = []() {return std::string(""); };
  24. cbGetAccessToken fGetAccessToken = []() {return std::string(""); };
  25. cbGetAppID fGetAppID = []() {return std::string(""); };
  26. }
  27. using namespace internal;
  28. spEventDispatcher _dispatcher;
  29. spEventDispatcher dispatcher()
  30. {
  31. return _dispatcher;
  32. }
  33. void init()
  34. {
  35. #ifdef __ANDROID__
  36. fInit = jniFacebookInit;
  37. fFree = jniFacebookFree;
  38. fLogin = jniFacebookLogin;
  39. fLogout = jniFacebookLogout;
  40. fNewMeRequest = jniFacebookNewMeRequest;
  41. fGetFriends = jniFacebookGetFriends;
  42. fIsLoggedIn = jniFacebookIsLoggedIn;
  43. fGetUserID = jniFacebookGetUserID;
  44. fGetAccessToken = jniFacebookGetAccessToken;
  45. fGetAppID = jniFacebookGetAppID;
  46. fGameRequest = jniFacebookGameRequest;
  47. #elif TARGET_OS_IPHONE
  48. fInit = iosFacebookInit;
  49. fFree = iosFacebookFree;
  50. fLogin = iosFacebookLogin;
  51. fLogout = iosFacebookLogout;
  52. fNewMeRequest = iosFacebookRequestMe;
  53. fGetFriends = []() {OX_ASSERT(0); };
  54. fIsLoggedIn = []() {OX_ASSERT(0); return false; };
  55. fGetUserID = iosFacebookGetUserID;
  56. fGetAccessToken = iosFacebookGetAccessToken;
  57. fGetAppID = []() {OX_ASSERT(0); return std::string(""); };
  58. fGameRequest = iosFacebookGameRequest;
  59. #else
  60. fInit = facebookSimulatorInit;
  61. fLogin = facebookSimulatorLogin;
  62. fLogout = facebookSimulatorLogout;
  63. fNewMeRequest = facebookSimulatorNewMeRequest;
  64. fGetFriends = facebookSimulatorGetFriends;
  65. fIsLoggedIn = facebookSimulatorIsLoggedIn;
  66. fGetUserID = facebookSimulatorGetUserID;
  67. fGetAccessToken = facebookSimulatorGetAccessToken;
  68. fGetAppID = facebookSimulatorGetAppID;
  69. #endif
  70. log::messageln("facebook::init");
  71. OX_ASSERT(_dispatcher == 0);
  72. _dispatcher = new EventDispatcher;
  73. fInit();
  74. log::messageln("facebook::init done");
  75. }
  76. void free()
  77. {
  78. log::messageln("facebook::free");
  79. OX_ASSERT(_dispatcher);
  80. fFree();
  81. _dispatcher->removeAllEventListeners();
  82. _dispatcher = 0;
  83. log::messageln("facebook::free done");
  84. }
  85. void login()
  86. {
  87. log::messageln("facebook::login");
  88. fLogin();
  89. log::messageln("facebook::login done");
  90. }
  91. void logout()
  92. {
  93. log::messageln("facebook::logout");
  94. fLogout();
  95. log::messageln("facebook::logout done");
  96. }
  97. bool appInviteDialog(const string& appLinkUrl, const string& previewImageUrl)
  98. {
  99. log::messageln("facebook::AppInviteDialog");
  100. #ifdef __ANDROID__
  101. return jniFacebookAppInviteDialog(appLinkUrl, previewImageUrl);
  102. #elif TARGET_OS_IPHONE
  103. #else
  104. return facebookSimulatorAppInviteDialog(appLinkUrl, previewImageUrl);
  105. #endif
  106. return false;
  107. }
  108. void newMeRequest()
  109. {
  110. log::messageln("facebook::newMeRequest");
  111. fNewMeRequest();
  112. log::messageln("facebook::newMeRequest done");
  113. }
  114. void gameRequest(const string& title, const string& text, const vector<string>& dest, const string& objectID, const string& userData)
  115. {
  116. fGameRequest(title, text, dest, objectID, userData);
  117. }
  118. void getFriends()
  119. {
  120. log::messageln("facebook::getFriends");
  121. fGetFriends();
  122. log::messageln("facebook::getFriends done");
  123. }
  124. bool isLoggedIn()
  125. {
  126. log::messageln("facebook::isLoggined");
  127. return fIsLoggedIn();
  128. }
  129. string getAccessToken()
  130. {
  131. log::messageln("facebook::getAccessToken");
  132. string token = fGetAccessToken();
  133. log::messageln("%s", token.c_str());
  134. return token;
  135. }
  136. string getUserID()
  137. {
  138. log::messageln("facebook::getUserID");
  139. string id = fGetUserID();
  140. log::messageln("%s", id.c_str());
  141. return id;
  142. }
  143. string getAppID()
  144. {
  145. return fGetAppID();
  146. }
  147. namespace internal
  148. {
  149. void newToken(const string& value)
  150. {
  151. log::messageln("facebook::internal::newToken %s", value.c_str());
  152. TokenEvent ev;
  153. ev.token = value;
  154. if (_dispatcher)
  155. _dispatcher->dispatchEvent(&ev);
  156. }
  157. void loginResult(bool value)
  158. {
  159. log::messageln("facebook::internal::loginResult %d", value);
  160. LoginEvent ev;
  161. ev.isLoggedIn = value;
  162. if (_dispatcher)
  163. _dispatcher->dispatchEvent(&ev);
  164. }
  165. void newMeRequestResult(const string& data, bool error)
  166. {
  167. log::messageln("facebook::internal::newMeRequestResult %s", data.c_str());
  168. NewMeRequestEvent event;
  169. Json::Reader reader;
  170. Json::Value root;
  171. bool parsingSuccessful = reader.parse(data.c_str(), root); //parse process
  172. if (!parsingSuccessful || error)
  173. {
  174. event.error = true;
  175. log::messageln("newMeRequestResult error %s", error ? "response error" : "parse error");
  176. return;
  177. }
  178. else
  179. {
  180. event.id = root["id"].asCString();
  181. //event.link = root["link"].asCString();
  182. event.name = root["name"].asCString();
  183. }
  184. if (_dispatcher)
  185. _dispatcher->dispatchEvent(&event);
  186. }
  187. void newMyFriendsRequestResult(const string& data, bool error)
  188. {
  189. log::messageln("facebook::internal::newMyFriendsRequestResult %s", data.c_str());
  190. }
  191. void gameRequestResult(const string& id, bool canceled)
  192. {
  193. log::messageln("facebook::internal::gameRequestResult %s", id.c_str());
  194. GameRequestEvent ev(id, canceled);
  195. if (_dispatcher)
  196. _dispatcher->dispatchEvent(&ev);
  197. }
  198. }
  199. }