NetworkManager.cs 14 KB

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