NetworkManager.cs 14 KB

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