MatchingCompetitionSproxy.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402
  1. using System;
  2. using System.Collections;
  3. using ET;
  4. using GFGGame;
  5. using FairyGUI;
  6. using UnityEngine;
  7. using UnityEngine.Networking;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. namespace ET
  11. {
  12. public class M2C_NoticeMatchingStateHandler : AMHandler<S2C_PushJudgingRoundInfo>
  13. {
  14. protected override async ETTask Run(Session session, S2C_PushJudgingRoundInfo message)
  15. {
  16. MatchingCompetitionDataManager.Instance.MatchingCompetitionSeason = message.JudgingRoundOpenId;
  17. MatchingCompetitionDataManager.Instance.MatchingEndTimes = message.PhaseEndTime;
  18. MatchingCompetitionDataManager.Instance.MatchingState = message.PhaseType;
  19. //await MatchingCompetitionSproxy.ReqMatchingCompetitionInfo();
  20. await ETTask.CompletedTask;
  21. }
  22. }
  23. }
  24. namespace GFGGame
  25. {
  26. public class MatchingCompetitionSproxy
  27. {
  28. //获取搭配评选赛信息
  29. public static async ETTask<bool> ReqMatchingCompetitionInfo()
  30. {
  31. S2C_GetJudgingRoundInfo response = (S2C_GetJudgingRoundInfo)await MessageHelper.SendToServer(new C2S_GetJudgingRoundInfo { });
  32. if (!(response is { Error: ErrorCode.ERR_Success })) return false;
  33. MatchingCompetitionDataManager.Instance.MatchingCompetitionSeason = response.JudgingRoundOpenId;
  34. MatchingCompetitionDataManager.Instance.MatchingState = response.PhaseType;
  35. MatchingCompetitionDataManager.Instance.MatchingEndTimes = response.PhaseEndTime;
  36. MatchingCompetitionDataManager.Instance.MatchingRemainingTimes = response.Num;
  37. if(response.MyWorks != null)
  38. {
  39. MatchingCompetitionDataManager.Instance.myWorks = response.MyWorks;
  40. MatchingCompetitionDataManager.Instance.WorksID = response.MyWorks.WorksId;
  41. MatchingCompetitionDataManager.Instance.AllDressIDInfoList = response.MyWorks.CollocationInfoList;
  42. }
  43. else
  44. {
  45. MatchingCompetitionDataManager.Instance.myWorks.Score = 0;
  46. MatchingCompetitionDataManager.Instance.AllDressIDInfoList = new List<CollocationInfo>();
  47. }
  48. if(response.MyWorks != null && response.MyWorks.PictureTempUrl != "")
  49. {
  50. Timers.inst.StartCoroutine(MatchingPhotoHelper.DownloadMyself(response.MyWorks.PictureTempUrl));
  51. }
  52. MatchingCompetitionDataManager.Instance.AnalysisInfoToList();
  53. return true;
  54. }
  55. //获取搭配作品信息
  56. //public static async ETTask<bool> ReqMatchingCompetitionDressData()
  57. //{
  58. // var response = (S2C_RequestUpLoadJudgingRoundWorks)await MessageHelper.SendToServer(new C2S_RequestUpLoadJudgingRoundWorks {});
  59. // if (!(response is { Error: ErrorCode.ERR_Success })) return false;
  60. // return true;
  61. //}
  62. //获取一个热门推荐的玩家
  63. public static async ETTask<bool> ReqGetOnePlayers()
  64. {
  65. var response = (S2C_GetOnePlayers)await MessageHelper.SendToServer(new C2S_GetOnePlayers { });
  66. if (!(response is { Error: ErrorCode.ERR_Success })) return false;
  67. MatchingOneDataManager.Instance.OneRoleInfo.JudgingInfo = response.JudgingRoundRole;
  68. if (response.JudgingRoundRole == null)
  69. {
  70. return false;
  71. }
  72. Timers.inst.StartCoroutine(MatchingPhotoHelper.Download(MatchingOneDataManager.Instance.OneRoleInfo));
  73. MatchingOneDataManager.Instance.AnalysisInfoToList();
  74. return true;
  75. }
  76. //上传作品信息
  77. public static async ETTask<object[]> UpLoadMatchingCompetitionDressData()
  78. {
  79. MatchingCompetitionDataManager.Instance.ConvertInfoToList();
  80. var response = (S2C_RequestUpLoadJudgingRoundWorks)await MessageHelper.SendToServer(new C2S_RequestUpLoadJudgingRoundWorks
  81. {
  82. PictureType = 1,
  83. BagId = MatchingCompetitionDataManager.Instance.DressUpBgID,
  84. ActionId = MatchingCompetitionDataManager.Instance.MathingDressDate.actionId,
  85. CollocationInfoList = MatchingCompetitionDataManager.Instance.AllDressIDInfoList
  86. });
  87. if (!(response is { Error: ErrorCode.ERR_Success })) return null;
  88. MatchingCompetitionDataManager.Instance.WorksID = response.WorksId;
  89. MatchingCompetitionDataManager.Instance.TempPictureUrl = response.TempPictureUrl;
  90. return new object[] { response.TempPictureUrl, response.WorksId };
  91. }
  92. //通知服务端上传成功
  93. public static async ETTask<bool> UploadSuccess()
  94. {
  95. var response = (S2C_NoticeJudgingRoundWorksUploaded)await MessageHelper.SendToServer(new C2S_NoticeJudgingRoundWorksUploaded
  96. {
  97. WorksId = MatchingCompetitionDataManager.Instance.WorksID
  98. }) ;
  99. if (!(response is { Error: ErrorCode.ERR_Success })) return false;
  100. return true;
  101. }
  102. //获取两个评选推荐的玩家
  103. public static async ETTask<bool> ReqGetTwoPlayers()
  104. {
  105. var response = (S2C_GetTwoPlayers)await MessageHelper.SendToServer(new C2S_GetTwoPlayers { });
  106. if (!(response is { Error: ErrorCode.ERR_Success })) return false;
  107. if(response.JudgingRoundRoleInfoList == null || response.JudgingRoundRoleInfoList.Count < 2)
  108. {
  109. return false;
  110. }
  111. MatchingLeftDataManager.Instance.LeftRoleInfo.JudgingInfo = response.JudgingRoundRoleInfoList[0];
  112. if(response.JudgingRoundRoleInfoList[0] != null)
  113. {
  114. Timers.inst.StartCoroutine(MatchingPhotoHelper.Download(MatchingLeftDataManager.Instance.LeftRoleInfo));
  115. }
  116. MatchingLeftDataManager.Instance.AnalysisInfoToList();
  117. MatchingRightDataManager.Instance.RightRoleInfo.JudgingInfo = response.JudgingRoundRoleInfoList[1];
  118. if (response.JudgingRoundRoleInfoList[1] != null)
  119. {
  120. Timers.inst.StartCoroutine(MatchingPhotoHelper.Download(MatchingRightDataManager.Instance.RightRoleInfo));
  121. }
  122. MatchingRightDataManager.Instance.AnalysisInfoToList();
  123. return true;
  124. }
  125. //选择搭配作品
  126. public static async ETTask<bool> ReqCheckMatchingCompetitionWork(long workID,long anotherWorkId )
  127. {
  128. var response = (S2C_SelFavoriteWorks)await MessageHelper.SendToServer(new C2S_SelFavoriteWorks
  129. {
  130. WorksId = workID,
  131. AnotherWorksId = anotherWorkId
  132. }) ;
  133. if (!(response is { Error: ErrorCode.ERR_Success })) return false;
  134. if (response.JudgingRoundRoleInfoList == null || response.JudgingRoundRoleInfoList.Count < 2)
  135. {
  136. return false;
  137. }
  138. MatchingCompetitionDataManager.Instance.MatchingRemainingTimes = response.Num;
  139. MatchingCompetitionDataManager.Instance.SpecialBonusList = response.SpecialBonusList;
  140. if (MatchingLeftDataManager.Instance.LeftRoleInfo.JudgingInfo.WorksId == workID)
  141. {
  142. MatchingLeftDataManager.Instance.LeftRoleInfo.JudgingInfo = response.JudgingRoundRoleInfoList[0];
  143. MatchingRightDataManager.Instance.RightRoleInfo.JudgingInfo = response.JudgingRoundRoleInfoList[1];
  144. }
  145. else
  146. {
  147. MatchingLeftDataManager.Instance.LeftRoleInfo.JudgingInfo = response.JudgingRoundRoleInfoList[1];
  148. MatchingRightDataManager.Instance.RightRoleInfo.JudgingInfo = response.JudgingRoundRoleInfoList[0];
  149. }
  150. BonusController.TryShowBonusList(ItemUtil.CreateItemDataList(response.BonusList));
  151. return true;
  152. }
  153. //获取当前排行榜
  154. public static async ETTask<bool> ReqCurrentRank(bool isPushEvent = false)
  155. {
  156. MatchingCompetitionDataManager.Instance.IsWork = true;
  157. var response =
  158. (S2C_GetCurJudgingRoundRankList)await MessageHelper.SendToServer(new C2S_GetCurJudgingRoundRankList
  159. { });
  160. if (!(response is { Error: ErrorCode.ERR_Success })) return false;
  161. //需要从缓存里清理的数据
  162. List<long> delRoleIds = new List<long>();
  163. foreach (var item in MatchingCompetitionDataManager.Instance._currentRankList)
  164. {
  165. if (response.JudgingRoundRoleInfoList.All(a => a.RoleId != item.RoleId))
  166. {
  167. delRoleIds.Add(item.RoleId);
  168. }
  169. }
  170. //执行清理
  171. if (delRoleIds.Count != 0)
  172. {
  173. foreach (var roleId in delRoleIds)
  174. {
  175. var itemToRemove =
  176. MatchingCompetitionDataManager.Instance._currentRankList.FirstOrDefault(item =>
  177. item.RoleId == roleId);
  178. if (itemToRemove != null)
  179. {
  180. MatchingCompetitionDataManager.Instance._currentRankList.Remove(itemToRemove);
  181. }
  182. }
  183. }
  184. foreach (var judgingRoundRoleInfo in response.JudgingRoundRoleInfoList)
  185. {
  186. CurRanMatchingPhotoWorksData matchingPhotoWorksData =
  187. MatchingCompetitionDataManager.Instance._currentRankList.FirstOrDefault(a =>
  188. a.RoleId == judgingRoundRoleInfo.RoleId);
  189. if (matchingPhotoWorksData == null)
  190. {
  191. matchingPhotoWorksData = new CurRanMatchingPhotoWorksData
  192. {
  193. RoleId = judgingRoundRoleInfo.RoleId,
  194. JudgingInfo = judgingRoundRoleInfo
  195. };
  196. MatchingCompetitionDataManager.Instance._currentRankList.Add(matchingPhotoWorksData);
  197. }
  198. else
  199. {
  200. int index = MatchingCompetitionDataManager.Instance._currentRankList
  201. .IndexOf(matchingPhotoWorksData);
  202. if (matchingPhotoWorksData.JudgingInfo != null)
  203. {
  204. string newTempFileName = StringUtil.GetUrlFileName(matchingPhotoWorksData.JudgingInfo.PictureTempUrl);
  205. string oldTempFileName = StringUtil.GetUrlFileName(judgingRoundRoleInfo.PictureTempUrl);
  206. matchingPhotoWorksData.IsUp = newTempFileName != oldTempFileName;
  207. }
  208. matchingPhotoWorksData.JudgingInfo = judgingRoundRoleInfo;
  209. matchingPhotoWorksData.RoleId = judgingRoundRoleInfo.RoleId;
  210. if (matchingPhotoWorksData.IsUp)
  211. {
  212. matchingPhotoWorksData.Ntexture = null;
  213. }
  214. MatchingCompetitionDataManager.Instance._currentRankList[index] = matchingPhotoWorksData;
  215. }
  216. }
  217. //排序
  218. MatchingCompetitionDataManager.Instance._currentRankList.Sort((a, b) =>
  219. {
  220. // 假设列表项具有一个名为 'score' 的属性,你想要按照分数进行排序
  221. if (a.JudgingInfo.Score > b.JudgingInfo.Score)
  222. {
  223. return -1; // a在b之前
  224. }
  225. else if (a.JudgingInfo.Score < b.JudgingInfo.Score)
  226. {
  227. return 1; // b在a之前
  228. }
  229. else
  230. {
  231. return 0; // a和b相同
  232. }
  233. });
  234. var enumerator = MatchingPhotoHelper.DownloadExt(MatchingCompetitionDataManager.Instance._currentRankList);
  235. Timers.inst.StartCoroutine(enumerator);
  236. //推送事件
  237. if (isPushEvent)
  238. {
  239. EventAgent.DispatchEvent(ConstMessage.REQ_CURRENT_RANK);
  240. }
  241. return true;
  242. }
  243. public static void UseCoroutine()
  244. {
  245. if (!MatchingCompetitionDataManager.Instance.IsWork)
  246. {
  247. if (MatchingCompetitionDataManager.Instance._coroutineQueue.Count == 0)
  248. {
  249. return;
  250. }
  251. int vl = MatchingCompetitionDataManager.Instance._coroutineQueue.Dequeue();
  252. if (vl == 1)
  253. {
  254. //缓存里面存在数据,那也要再次请求服务器进行更新数据,只是用协程的形式,接着处理完数据后抛出事件
  255. ReqCurrentRank(true).Coroutine();
  256. }
  257. }
  258. }
  259. //获取往期作品集
  260. public static async ETTask<bool> ReqBeforeWorks()
  261. {
  262. var response = (S2C_GetPreviousWorksCollection)await MessageHelper.SendToServer(new C2S_GetPreviousWorksCollection { });
  263. if (!(response is { Error: ErrorCode.ERR_Success })) return false;
  264. foreach (var data in MatchingCompetitionDataManager.Instance._BeforeWorksList)
  265. {
  266. data.Bytes = null;
  267. data.WorksInfo = null;
  268. data.Ntexture?.Dispose();
  269. }
  270. MatchingCompetitionDataManager.Instance._BeforeWorksList.Clear();
  271. foreach (var item in response.WorksCollectionList)
  272. {
  273. MatchingWorksData data = new MatchingWorksData();
  274. data.WorksInfo = item;
  275. MatchingCompetitionDataManager.Instance._BeforeWorksList.Add(data);
  276. }
  277. Timers.inst.StartCoroutine(MatchingPhotoHelper.Download(MatchingCompetitionDataManager.Instance._BeforeWorksList));
  278. return true;
  279. }
  280. //获取往期作品排行榜
  281. public static async ETTask<bool> ReqBeforeRank(int id)
  282. {
  283. var response = (S2C_GetOldJudgingRoundRankList)await MessageHelper.SendToServer(new C2S_GetOldJudgingRoundRankList { JudgingRoundOpenId = id});
  284. if (!(response is { Error: ErrorCode.ERR_Success })) return false;
  285. foreach (var data in MatchingCompetitionDataManager.Instance._BeforeRankList)
  286. {
  287. data.Bytes = null;
  288. data.JudgingInfo = null;
  289. data.Ntexture?.Dispose();
  290. }
  291. MatchingCompetitionDataManager.Instance._BeforeRankList.Clear();
  292. foreach (var item in response.JudgingRoundRoleInfoList)
  293. {
  294. MatchingPhotoWorksData data = new MatchingPhotoWorksData();
  295. data.RoleId = item.RoleId;
  296. data.JudgingInfo = item;
  297. MatchingCompetitionDataManager.Instance._BeforeRankList.Add(data);
  298. }
  299. Timers.inst.StartCoroutine(MatchingPhotoHelper.Download(MatchingCompetitionDataManager.Instance._BeforeRankList));
  300. return true;
  301. }
  302. //搭配赛相册系协议
  303. public static async ETTask<bool> ReqMatchingPhotoData()
  304. {
  305. var response = (S2C_GetJudgingRoundWorksList)await MessageHelper.SendToServer(new C2S_GetJudgingRoundWorksList { });
  306. if (!(response is { Error: ErrorCode.ERR_Success })) return false;
  307. foreach (var data in MatchingCompetitionDataManager.Instance.MatchingPhotoInfos)
  308. {
  309. data.Bytes = null;
  310. data.Ntexture?.Dispose();
  311. }
  312. MatchingCompetitionDataManager.Instance.MatchingPhotoInfos.Clear();
  313. foreach (var item in response.JudgingRoundRoleInfoList)
  314. {
  315. PoemPhotoData photoData = new PoemPhotoData();
  316. photoData.PictureId = item.WorksId;
  317. photoData.CreationTime = item.CreationTime;
  318. photoData.ToppingStatus = item.ToppingStatus;
  319. photoData.PictureTempUrl = item.PictureTempUrl;
  320. MatchingCompetitionDataManager.Instance.MatchingPhotoInfos.Add(photoData);
  321. }
  322. Timers.inst.StartCoroutine(PictureStorageHelper.Download(MatchingCompetitionDataManager.Instance.MatchingPhotoInfos));
  323. return true;
  324. }
  325. //修改图片锁定状态
  326. public static async ETTask<bool> ReqChangeLockingState(long pictureId, bool state, int sourceType)
  327. {
  328. S2C_UpJudgingRoundWorksLockingStatus response = null;
  329. response = (S2C_UpJudgingRoundWorksLockingStatus)await MessageHelper.SendToServer(new C2S_UpJudgingRoundWorksLockingStatus() { WorksId = pictureId, Status = state });
  330. if (response != null)
  331. {
  332. if (response.Error == ErrorCode.ERR_Success)
  333. {
  334. PoemPhotoDataManager.Instance.ChangeLockingState(response.WorksId, response.Status, sourceType);
  335. EventAgent.DispatchEvent(ConstMessage.POEM_PHOTO_INFOS_CHANGE);
  336. return true;
  337. }
  338. }
  339. return false;
  340. }
  341. //修改图片置顶状态
  342. public static async ETTask<bool> ReqChangeToppingState(long pictureId, bool state, int sourceType)
  343. {
  344. S2C_UpJudgingRoundWorksToppingStatus response = null;
  345. response = (S2C_UpJudgingRoundWorksToppingStatus)await MessageHelper.SendToServer(new C2S_UpJudgingRoundWorksToppingStatus() { WorksId = pictureId, Status = state });
  346. if (response != null)
  347. {
  348. if (response.Error == ErrorCode.ERR_Success)
  349. {
  350. PoemPhotoDataManager.Instance.ChangeToppingState(response.WorksId, response.Status, sourceType);
  351. EventAgent.DispatchEvent(ConstMessage.POEM_PHOTO_INFOS_CHANGE);
  352. return true;
  353. }
  354. }
  355. return false;
  356. }
  357. //批量删除玩家相册
  358. public static async ETTask<bool> ReqRemovedPhoto(List<long> pictureIds, int sourceType)
  359. {
  360. S2C_RemovedJudgingRoundWorks response = null;
  361. response = (S2C_RemovedJudgingRoundWorks)await MessageHelper.SendToServer(new C2S_RemovedJudgingRoundWorks() { WorksIds = pictureIds });
  362. if (response != null)
  363. {
  364. if (response.Error == ErrorCode.ERR_Success)
  365. {
  366. PoemPhotoDataManager.Instance.Remove(response.WorksIds, sourceType);
  367. EventAgent.DispatchEvent(ConstMessage.POEM_PHOTO_INFOS_CHANGE);
  368. return true;
  369. }
  370. }
  371. return false;
  372. }
  373. }
  374. }