MatchingCompetitionSproxy.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  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. MatchingCompetitionDataManager.Instance._BeforeWorksList.Clear();
  265. foreach (var item in response.WorksCollectionList)
  266. {
  267. MatchingWorksData data = new MatchingWorksData();
  268. data.WorksInfo = item;
  269. MatchingCompetitionDataManager.Instance._BeforeWorksList.Add(data);
  270. }
  271. Timers.inst.StartCoroutine(MatchingPhotoHelper.Download(MatchingCompetitionDataManager.Instance._BeforeWorksList));
  272. return true;
  273. }
  274. //获取往期作品排行榜
  275. public static async ETTask<bool> ReqBeforeRank(int id)
  276. {
  277. var response = (S2C_GetOldJudgingRoundRankList)await MessageHelper.SendToServer(new C2S_GetOldJudgingRoundRankList { JudgingRoundOpenId = id});
  278. if (!(response is { Error: ErrorCode.ERR_Success })) return false;
  279. MatchingCompetitionDataManager.Instance._BeforeRankList.Clear();
  280. foreach (var item in response.JudgingRoundRoleInfoList)
  281. {
  282. MatchingPhotoWorksData data = new MatchingPhotoWorksData();
  283. data.RoleId = item.RoleId;
  284. data.JudgingInfo = item;
  285. MatchingCompetitionDataManager.Instance._BeforeRankList.Add(data);
  286. }
  287. Timers.inst.StartCoroutine(MatchingPhotoHelper.Download(MatchingCompetitionDataManager.Instance._BeforeRankList));
  288. return true;
  289. }
  290. //搭配赛相册系协议
  291. public static async ETTask<bool> ReqMatchingPhotoData()
  292. {
  293. var response = (S2C_GetJudgingRoundWorksList)await MessageHelper.SendToServer(new C2S_GetJudgingRoundWorksList { });
  294. if (!(response is { Error: ErrorCode.ERR_Success })) return false;
  295. MatchingCompetitionDataManager.Instance.MatchingPhotoInfos.Clear();
  296. foreach (var item in response.JudgingRoundRoleInfoList)
  297. {
  298. PoemPhotoData photoData = new PoemPhotoData();
  299. photoData.PictureId = item.WorksId;
  300. photoData.CreationTime = item.CreationTime;
  301. photoData.ToppingStatus = item.ToppingStatus;
  302. photoData.PictureTempUrl = item.PictureTempUrl;
  303. MatchingCompetitionDataManager.Instance.MatchingPhotoInfos.Add(photoData);
  304. }
  305. Timers.inst.StartCoroutine(PictureStorageHelper.Download(MatchingCompetitionDataManager.Instance.MatchingPhotoInfos));
  306. return true;
  307. }
  308. //修改图片锁定状态
  309. public static async ETTask<bool> ReqChangeLockingState(long pictureId, bool state, int sourceType)
  310. {
  311. S2C_UpJudgingRoundWorksLockingStatus response = null;
  312. response = (S2C_UpJudgingRoundWorksLockingStatus)await MessageHelper.SendToServer(new C2S_UpJudgingRoundWorksLockingStatus() { WorksId = pictureId, Status = state });
  313. if (response != null)
  314. {
  315. if (response.Error == ErrorCode.ERR_Success)
  316. {
  317. PoemPhotoDataManager.Instance.ChangeLockingState(response.WorksId, response.Status, sourceType);
  318. EventAgent.DispatchEvent(ConstMessage.POEM_PHOTO_INFOS_CHANGE);
  319. return true;
  320. }
  321. }
  322. return false;
  323. }
  324. //修改图片置顶状态
  325. public static async ETTask<bool> ReqChangeToppingState(long pictureId, bool state, int sourceType)
  326. {
  327. S2C_UpJudgingRoundWorksToppingStatus response = null;
  328. response = (S2C_UpJudgingRoundWorksToppingStatus)await MessageHelper.SendToServer(new C2S_UpJudgingRoundWorksToppingStatus() { WorksId = pictureId, Status = state });
  329. if (response != null)
  330. {
  331. if (response.Error == ErrorCode.ERR_Success)
  332. {
  333. PoemPhotoDataManager.Instance.ChangeToppingState(response.WorksId, response.Status, sourceType);
  334. EventAgent.DispatchEvent(ConstMessage.POEM_PHOTO_INFOS_CHANGE);
  335. return true;
  336. }
  337. }
  338. return false;
  339. }
  340. //批量删除玩家相册
  341. public static async ETTask<bool> ReqRemovedPhoto(List<long> pictureIds, int sourceType)
  342. {
  343. S2C_RemovedJudgingRoundWorks response = null;
  344. response = (S2C_RemovedJudgingRoundWorks)await MessageHelper.SendToServer(new C2S_RemovedJudgingRoundWorks() { WorksIds = pictureIds });
  345. if (response != null)
  346. {
  347. if (response.Error == ErrorCode.ERR_Success)
  348. {
  349. PoemPhotoDataManager.Instance.Remove(response.WorksIds, sourceType);
  350. EventAgent.DispatchEvent(ConstMessage.POEM_PHOTO_INFOS_CHANGE);
  351. return true;
  352. }
  353. }
  354. return false;
  355. }
  356. }
  357. }