NetworkManager.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using LitJson;
  5. #if UNITY_IOS
  6. using UnityEngine.SocialPlatforms.GameCenter;
  7. #endif
  8. public class NetworkManager
  9. {
  10. public enum URL
  11. {
  12. Login,
  13. Binding,
  14. Notice,
  15. IOSPayment,
  16. LeaderBoard,
  17. ShopList,
  18. Buy,
  19. Equip,
  20. AddCoin,
  21. Mission,
  22. MissionReward,
  23. MissionProgress,
  24. Result,
  25. }
  26. public NetworkManager()
  27. {
  28. }
  29. private static Dictionary<URL, string> urlDict;
  30. public static string GetURL(URL url)
  31. {
  32. if(urlDict == null)
  33. {
  34. urlDict = new Dictionary<URL, string>();
  35. urlDict.Add(URL.Login, Config.URL_ADDRESS+"game/"+Config.VERSION_LABEL+"/login.php");
  36. urlDict.Add(URL.Binding, Config.URL_ADDRESS+"game/"+Config.VERSION_LABEL+"/binding.php");
  37. urlDict.Add(URL.Notice, Config.URL_ADDRESS+"game/"+Config.VERSION_LABEL+"/notice.php");
  38. urlDict.Add(URL.IOSPayment, Config.URL_ADDRESS+"game/"+Config.VERSION_LABEL+"/ios_payment.php");
  39. urlDict.Add(URL.LeaderBoard, Config.URL_ADDRESS+"game/"+Config.VERSION_LABEL+"/leaderboard.php");
  40. urlDict.Add(URL.ShopList, Config.URL_ADDRESS+"game/"+Config.VERSION_LABEL+"/shoplist.php");
  41. urlDict.Add(URL.Buy, Config.URL_ADDRESS+"game/"+Config.VERSION_LABEL+"/buy.php");
  42. urlDict.Add(URL.Equip, Config.URL_ADDRESS+"game/"+Config.VERSION_LABEL+"/equip.php");
  43. urlDict.Add(URL.AddCoin, Config.URL_ADDRESS+"game/"+Config.VERSION_LABEL+"/addcoin.php");
  44. urlDict.Add(URL.Mission, Config.URL_ADDRESS+"game/"+Config.VERSION_LABEL+"/mission.php");
  45. urlDict.Add(URL.MissionReward, Config.URL_ADDRESS+"game/"+Config.VERSION_LABEL+"/mission_reward.php");
  46. urlDict.Add(URL.MissionProgress, Config.URL_ADDRESS+"game/"+Config.VERSION_LABEL+"/mission_progress.php");
  47. urlDict.Add(URL.Result, Config.URL_ADDRESS+"game/"+Config.VERSION_LABEL+"/result.php");
  48. }
  49. return urlDict[url];
  50. }
  51. public void Login(CallBackUtil.SimpleCallBack callBack)
  52. {
  53. string device = Session.GetInstance ().myUserData.deviceId;
  54. int id = 0;
  55. if(StringUtil.Empty(device))
  56. {
  57. device = SystemInfo.deviceUniqueIdentifier;
  58. id = LocalSaver.GetInstance ().LoadId ();
  59. }
  60. ChatManager.GetInstance ().Clear ();
  61. UserRequest.Login (id, device, "ios", Config.USER_PORT).ResultEvent.AddListener((bool success, JsonData data) => {
  62. if(success)
  63. {
  64. JsonData info = data;
  65. UserData userData = Session.GetInstance().myUserData;
  66. userData.id = JsonUtil.ToInt(info["i"]);
  67. if(info["n"] != null)
  68. userData.nick = WWW.UnEscapeURL(info["n"].ToString());
  69. else
  70. userData.nick = null;
  71. userData.coin = JsonUtil.ToInt(info["c"]);
  72. userData.diamond = JsonUtil.ToInt(info["d"]);
  73. userData.exp = JsonUtil.ToInt(info["e"]);
  74. userData.rank = JsonUtil.ToInt(info["r"]);
  75. userData.rankIndex = JsonUtil.ToInt(info["ri"]);
  76. userData.win = JsonUtil.ToInt(info["w"]);
  77. userData.lose = JsonUtil.ToInt(info["l"]);
  78. userData.clanId = JsonUtil.ToInt(info["a"]);
  79. if(JsonUtil.ContainKey(info, "v"))
  80. userData.vipExpireTime = info["v"].ToString();
  81. JsonData craftList = info["cs"];
  82. if(craftList.IsArray)
  83. {
  84. userData.craftSelectLimit = new int[craftList.Count];
  85. for(int i=0; i<craftList.Count; i++)
  86. {
  87. userData.craftSelectLimit[i] = JsonUtil.ToInt(craftList[i]);
  88. }
  89. }
  90. if(JsonUtil.ContainKey(info, "h"))
  91. HaloManager.GetInstance().InitDataState(info["h"]);
  92. if(JsonUtil.ContainKey(info, "sl"))
  93. SkinManager.GetInstance().InitDataState(info["sl"]);
  94. userData.isLogin = true;
  95. ChatMsg.InitDateTime(info["ts"].ToString());
  96. Config.SERVER_ADDRESS = info["sfs_ip"].ToString();
  97. Config.SERVER_PORT = JsonUtil.ToInt(info["sfs_port"]);
  98. if(callBack != null)
  99. callBack();
  100. }
  101. else
  102. {
  103. AlertPanel alertPanel = AlertPanel.Show(null, Language.GetStr("MenuPage", "internetFailed"), 4, OnLoginAlertClose);
  104. }
  105. });
  106. }
  107. private void OnLoginAlertClose(AlertCloseEvent evt)
  108. {
  109. RestartGame ();
  110. }
  111. private void RestartGame()
  112. {
  113. Session.GetInstance ().myUserData.isLogin = false;
  114. Session.GetInstance ().GetBattleSession ().GetMessageManager ().Disconnect ();
  115. Application.LoadLevel (Config.Scene.Battle.ToString());
  116. }
  117. #if UNITY_IOS
  118. private GameCenterPlatform gameCenter;
  119. public void Binding()
  120. {
  121. if(gameCenter == null)
  122. gameCenter = new GameCenterPlatform();
  123. gameCenter.localUser.Authenticate ((bool success)=>{
  124. Debuger.Log("Authenticate : "+success);
  125. // success = false;
  126. if(success)
  127. {
  128. int id = Session.GetInstance().myUserData.id;
  129. string uid = gameCenter.localUser.id;
  130. string nick = WWW.EscapeURL(gameCenter.localUser.userName);
  131. URLRequestData data = new URLRequestData(true);
  132. data.Add("id", id);
  133. data.Add("uid", uid);
  134. data.Add("nick", nick);
  135. URLRequest.CreateURLRequest (GetURL (URL.Binding), data, OnBinding, URLRequest.Method.POST);
  136. }
  137. });
  138. }
  139. #else
  140. public void Binding()
  141. {
  142. }
  143. #endif
  144. private void OnBinding(JsonData data)
  145. {
  146. int resCode = (int)data["c"];
  147. JsonData resData = data["d"];
  148. if(resCode == 0)
  149. {
  150. if (JsonUtil.ContainKey (resData, "n")) {
  151. Session.GetInstance ().myUserData.nick = resData ["n"].ToString ();
  152. }
  153. }
  154. else if (resCode == 1)
  155. {
  156. int id = JsonUtil.ToInt (resData ["i"]);
  157. int rank = JsonUtil.ToInt (resData ["r"]);
  158. string info = string.Format (Language.GetStr ("Login", "toGCUser"), rank);
  159. AlertPanel.Show (null, info, AlertPanel.YES | AlertPanel.NO, (AlertCloseEvent evt) => {
  160. if (evt.detail == AlertPanel.YES) {
  161. LocalSaver.GetInstance ().SaveId (id);
  162. RestartGame();
  163. }
  164. else if(evt.detail == AlertPanel.NO)
  165. {
  166. LocalSaver.GetInstance().noAutoBinding = 1;
  167. }
  168. });
  169. }
  170. else if(resCode == 2)
  171. {
  172. AlertPanel.Show(null, Language.GetStr("MenuPage", "internetFailed"), 4, OnLoginAlertClose);
  173. }
  174. }
  175. public void GetMail(CallBackUtil.StringCallBack callBack)
  176. {
  177. URLRequestData data = new URLRequestData(true);
  178. data.Add("id", Session.GetInstance().myUserData.id);
  179. URLRequest.CreateURLRequest(GetURL(URL.Notice), data, (JsonData json)=>{
  180. int resCode = (int)json["c"];
  181. JsonData resData = json["d"];
  182. if(resCode == 0)
  183. {
  184. if(callBack != null)
  185. callBack(resData.ToString());
  186. }
  187. });
  188. }
  189. public void GetLeaderBoard()
  190. {
  191. URLRequestData data = new URLRequestData(true);
  192. data.Add("id", 0);
  193. data.Add ("port", Config.USER_PORT);
  194. URLRequest.CreateURLRequest(GetURL(URL.LeaderBoard), data, (JsonData json)=>{
  195. int resCode = JsonUtil.ToInt(json["c"]);
  196. if(resCode == 0)
  197. {
  198. JsonData info = json["d"];
  199. if(JsonUtil.ContainKey(info, "l"))
  200. {
  201. JsonData list = info["l"];
  202. LeaderBoardManager.GetInstance().SetData(list);
  203. }
  204. }
  205. else
  206. {
  207. Toast.MakeText(Language.GetStr("Menu", "rankListFailed"), false);
  208. }
  209. }, URLRequest.Method.POST);
  210. }
  211. // public void GetMyRank()
  212. // {
  213. // URLRequestData data = new URLRequestData(true);
  214. // UserData userData = Session.GetInstance().myUserData;
  215. // data.Add("id", userData.userId);
  216. // data.Add("rank", userData.rank);
  217. //
  218. // URLRequest.CreateURLRequest(GetURL(URL.LeaderBoard), data, (JsonData json)=>{
  219. //
  220. // int resCode = JsonUtil.ToInt(json["c"]);
  221. // if(resCode == 0)
  222. // {
  223. // JsonData info = json["d"];
  224. // if(JsonUtil.ContainKey(info, "o"))
  225. // {
  226. // userData.rankIndex = JsonUtil.ToInt(info["o"]);
  227. // }
  228. // }
  229. // }, URLRequest.Method.POST);
  230. // }
  231. public void ShopList(BuyUtil.ItemType itemType, CallBackUtil.SimpleCallBack callBack)
  232. {
  233. URLRequestData data = new URLRequestData(true);
  234. data.Add("type", itemType.ToString());
  235. URLRequest.CreateURLRequest(GetURL(URL.ShopList), data, (JsonData json)=>{
  236. int resCode = JsonUtil.ToInt(json["c"]);
  237. if(resCode == 0)
  238. {
  239. JsonData info = json["d"];
  240. if(itemType == BuyUtil.ItemType.Halo)
  241. {
  242. HaloManager.GetInstance().SetDataList(info["l"]);
  243. }
  244. else if(itemType == BuyUtil.ItemType.Skin)
  245. {
  246. SkinManager.GetInstance().SetDataList(info["l"]);
  247. }
  248. ShopPanel.Refresh();
  249. }
  250. else
  251. {
  252. Toast.MakeText(Language.GetStr("Shop", "listFailed"), false);
  253. }
  254. callBack();
  255. }, URLRequest.Method.POST);
  256. }
  257. public void Buy(int itemId, BuyUtil.ItemType itemType)
  258. {
  259. URLRequestData data = new URLRequestData(true);
  260. UserData userData = Session.GetInstance().myUserData;
  261. data.Add("userid", userData.id);
  262. data.Add("id", itemId);
  263. data.Add("type", itemType.ToString());
  264. ProgressPanel.Show("");
  265. URLRequest.CreateURLRequest(GetURL(URL.Buy), data, OnBuy, URLRequest.Method.POST);
  266. }
  267. private void OnBuy(JsonData json)
  268. {
  269. ProgressPanel.Hide();
  270. int resCode = JsonUtil.ToInt(json["c"]);
  271. if(resCode == 0)
  272. {
  273. JsonData info = json["d"];
  274. string itemType = info["type"].ToString();
  275. int itemId = JsonUtil.ToInt(info["id"]);
  276. if(itemType == BuyUtil.ItemType.Halo.ToString())
  277. HaloManager.GetInstance().Bought(itemId);
  278. else if(itemType == BuyUtil.ItemType.Skin.ToString())
  279. SkinManager.GetInstance().Bought(itemId);
  280. if(JsonUtil.ContainKey(info, "d"))
  281. Session.GetInstance().myUserData.diamond = JsonUtil.ToInt(info["d"]);
  282. if(JsonUtil.ContainKey(info, "c"))
  283. Session.GetInstance().myUserData.coin = JsonUtil.ToInt(info["c"]);
  284. ShopPanel.Refresh();
  285. }
  286. else if(resCode == 2)
  287. {
  288. BuyDiamondPanel.Show();
  289. }
  290. else if(resCode == 3)
  291. {
  292. BuyCoinPanel.Show();
  293. }
  294. else
  295. {
  296. Toast.MakeText(Language.GetStr("Shop", "buyFailed"), false);
  297. }
  298. }
  299. public void Equip(BuyUtil.ItemType itemType, int itemId, int equip)
  300. {
  301. URLRequestData data = new URLRequestData(true);
  302. UserData userData = Session.GetInstance().myUserData;
  303. data.Add("userid", userData.id);
  304. data.Add("type", itemType.ToString());
  305. data.Add("id", itemId);
  306. data.Add("equip", equip);
  307. URLRequest.CreateURLRequest(GetURL(URL.Equip), data, (JsonData json)=>{
  308. int resCode = JsonUtil.ToInt(json["c"]);
  309. if(resCode == 0)
  310. {
  311. // if(itemType == BuyUtil.ItemType.Halo)
  312. // HaloManager.GetInstance().Equip(itemId);
  313. }
  314. }, URLRequest.Method.POST);
  315. }
  316. public void AddCoin(string itemId)
  317. {
  318. URLRequestData data = new URLRequestData(true);
  319. UserData userData = Session.GetInstance().myUserData;
  320. data.Add("userid", userData.id);
  321. data.Add("id", itemId);
  322. ProgressPanel.Show("");
  323. URLRequest.CreateURLRequest(GetURL(URL.AddCoin), data, (JsonData json)=>{
  324. ProgressPanel.Hide();
  325. int resCode = JsonUtil.ToInt(json["c"]);
  326. if(resCode == 0)
  327. {
  328. JsonData info = json["d"];
  329. int newCoin = JsonUtil.ToInt(info["coin"]);
  330. int newDiamond = JsonUtil.ToInt(info["diamond"]);
  331. UserData myUserData = Session.GetInstance().myUserData;
  332. Toast.MakeText(Language.GetStr("BuyCoin", "bought").Replace("%NUM%", (newCoin - myUserData.coin).ToString()));
  333. myUserData.coin = newCoin;
  334. myUserData.diamond = newDiamond;
  335. }
  336. else if(resCode == 3)
  337. {
  338. BuyDiamondPanel.Show();
  339. }
  340. else
  341. {
  342. Toast.MakeText(Language.GetStr("Shop", "addCoinFailed"), false);
  343. }
  344. }, URLRequest.Method.POST);
  345. }
  346. public void GetMission()
  347. {
  348. URLRequestData data = new URLRequestData(true);
  349. UserData userData = Session.GetInstance().myUserData;
  350. data.Add("u", userData.id);
  351. URLRequest.CreateURLRequest(GetURL(URL.Mission), data, OnMissionGot, URLRequest.Method.POST);
  352. }
  353. private void OnMissionGot(JsonData json)
  354. {
  355. int resCode = JsonUtil.ToInt(json["c"]);
  356. if(resCode == 0)
  357. {
  358. JsonData info = json["d"];
  359. MissionManager.GetInstance().Init(info);
  360. }
  361. }
  362. public void GetMissionReward(int id)
  363. {
  364. URLRequestData data = new URLRequestData(true);
  365. UserData userData = Session.GetInstance().myUserData;
  366. data.Add("u", userData.id);
  367. data.Add("m", id);
  368. ProgressPanel.Show("");
  369. URLRequest.CreateURLRequest(GetURL(URL.MissionReward), data, OnMissionReward, URLRequest.Method.POST);
  370. }
  371. private void OnMissionReward(JsonData json)
  372. {
  373. ProgressPanel.Hide();
  374. int resCode = JsonUtil.ToInt(json["c"]);
  375. if(resCode == 0)
  376. {
  377. JsonData info = json["d"];
  378. int coin = JsonUtil.ToInt(info["c"]);
  379. int diamond = JsonUtil.ToInt(info["d"]);
  380. int missionId = JsonUtil.ToInt(info["m"]);
  381. MissionData data = MissionManager.GetInstance().GetData(missionId);
  382. MissionRewardPanel.Show(data);
  383. data.rewarded = 1;
  384. UserData userData = Session.GetInstance().myUserData;
  385. Dictionary<string, object> dict = new Dictionary<string, object>();
  386. dict.Add("name", userData.nick+"["+userData.id.ToString()+"]");
  387. dict.Add("id", missionId.ToString());
  388. if(userData.coin != coin)
  389. dict.Add("coin", coin - userData.coin);
  390. else if(userData.diamond != diamond)
  391. dict.Add("diamond", diamond - userData.diamond);
  392. DGAnalytics.CustomEvent ("DailyMission", dict);
  393. userData.coin = coin;
  394. userData.diamond = diamond;
  395. }
  396. else
  397. {
  398. Toast.MakeText(Language.GetStr("Mission", "rewardFailedFailed"), false);
  399. }
  400. MissionManager.GetInstance().Refresh();
  401. }
  402. public void MissionProgress(int id)
  403. {
  404. URLRequestData data = new URLRequestData(true);
  405. UserData userData = Session.GetInstance().myUserData;
  406. data.Add("u", userData.id);
  407. data.Add("m", id);
  408. URLRequest.CreateURLRequest(GetURL(URL.MissionProgress), data, OnMissionProgress, URLRequest.Method.POST);
  409. }
  410. private void OnMissionProgress(JsonData json)
  411. {
  412. int resCode = JsonUtil.ToInt(json["c"]);
  413. if(resCode == 0)
  414. {
  415. JsonData info = json["d"];
  416. for(int i=0; i<info.Count; i++)
  417. {
  418. int missionId = JsonUtil.ToInt(info[i]["m"]);
  419. int progress = JsonUtil.ToInt(info[i]["p"]);
  420. MissionData data = MissionManager.GetInstance().GetData(missionId);
  421. data.progress = progress;
  422. }
  423. MissionManager.GetInstance().Refresh();
  424. }
  425. }
  426. public void Result(int result, int crystalSpend)
  427. {
  428. BattleRequest.Result (result, crystalSpend).ResultEvent.AddListener (OnResult);
  429. }
  430. private void OnResult(bool success, JsonData data)
  431. {
  432. if (success) {
  433. if (JsonUtil.ContainKey (data, "m") && data ["m"] != null) {
  434. JsonData missionJson = data ["m"];
  435. int missionId = JsonUtil.ToInt (missionJson["m"]);
  436. int missionProgress = JsonUtil.ToInt (missionJson["p"]);
  437. MissionData missionData = MissionManager.GetInstance ().GetData (missionId);
  438. if(missionData != null)
  439. missionData.progress = missionProgress;
  440. }
  441. ResultPanel.SetReward (new ResultPanel.RewardData(data));
  442. } else {
  443. ResultPanel.RequestFailed ();
  444. }
  445. }
  446. }