using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Assets.Scripts.Apis.Models { public class GameRoomResult { public int Total { get; set; } public List List { get; set; } } public class GameRoomModel { public int Id { get; set; } public int RoomId { get; set; } public string Name { get; set; } public DateTime? StartTime { get; set; } public DateTime? EndTime { get; set; } public int CloseTime { get; set; } public int MaxMembers { get; set; } public int UserId { get; set; } public string NickName { get; set; } public string Phone { get; set; } public int Status { get; set; } public string WxHeadImg { get; set; } public string MapRouteName { get; set; } public bool Enable3D { get; set; } public bool EnableAR { get; set; } public bool IsLock { get; set; } public string Password { get; set; } public string AltitudeGraph { get; set; } public double AverageGrade { get; set; } public double Distance { get; set; } public double TotalClimb { get; set; } //视频文件名 public string FileName { get; set; } public int MapRouteId { get; set; } //详情 public string BestNickName { get; set; } public string BestWxHeadImg { get; set; } public string BestTotalTime { get; set; } public string FileUrl { get; set; } public List RoomRankingList { get;set;} public List RoomPlayerList { get; set; } public static List Parse(string s) { if (s.Equals("l")) return null; List list = new List(); try { var arr = s.Replace("l[", "").Replace("[","").Split(']'); foreach (var item in arr) { if (string.IsNullOrEmpty(item)) continue; var detailIndex = item.IndexOf("detail"); var info = item.Substring(0, detailIndex - 1).Split(','); var playerList = item.Substring(detailIndex); DateTime? startTime = null; if (!string.IsNullOrEmpty(info[18])) { startTime = Convert.ToDateTime(info[18]); } list.Add(new GameRoomModel() { RoomId = Convert.ToInt32(info[0]), UserId = Convert.ToInt32(info[1]), Name = info[2], CloseTime = Convert.ToInt32(info[3]), MaxMembers = Convert.ToInt32(info[4]), MapRouteId = Convert.ToInt32(info[5]), MapRouteName = info[6], Distance = Convert.ToDouble(info[7]), TotalClimb = Convert.ToDouble(info[8]), AverageGrade = Convert.ToDouble(info[9]), Enable3D = Convert.ToBoolean(info[10]), EnableAR = Convert.ToBoolean(info[11]), IsLock = Convert.ToBoolean(info[12]), Password = info[13], FileName = info[14], FileUrl = info[15], AltitudeGraph = info[16], Status = Convert.ToInt32(info[17]), StartTime = startTime, RoomPlayerList = RoomPlayerModel.Parse(playerList) }); } } catch (Exception ex) { } //list[0,0,321313,30,5,5492,福州化工路-鼓山峰爬坡线路,19.17906,815.9704000000002,4.0466336723489045,True,False,True,213,,,http://192.168.0.102:5082/Map/AltitudeGraph?id=5492,0,:][0,0,2131,30,4,5492,福州化工路-鼓山峰爬坡线路,19.17906,815.9704000000002,4.0466336723489045,True,False,True,313,,,http://192.168.0.102:5082/Map/AltitudeGraph?id=5492,0,:][20,16652,3213,30,3,5492,福州化工路-鼓山峰爬坡线路,19.17906,815.9704000000002,4.0466336723489045,True,False,True,,,,http://192.168.0.102:5082/Map/AltitudeGraph?id=5492,0,2022/5/6 8:41:34:][19,16652,测试3d线路,30,2,5492,福州化工路-鼓山峰爬坡线路,19.17906,815.9704000000002,4.0466336723489045,True,False,True,,,,http://192.168.0.102:5082/Map/AltitudeGraph?id=5492,0,2022/5/6 1:39:57:][18,16652,测试,61,2,5492,福州化工路-鼓山峰爬坡线路,19.17906,815.9704000000002,4.0466336723489045,True,False,True,,,,http://192.168.0.102:5082/Map/AltitudeGraph?id=5492,0,2022/4/25 2:34:03:][17,16652,213,30,3,1217,翠屏山后山北向南,5.271609999999998,65.22760000000001,0.23308249282477278,False,False,True,,,,http://192.168.0.102:5082/Map/AltitudeGraph?id=1217,0,2022/4/25 2:20:13:] return list; } } public class RoomPlayerModel { public int RoomId { get; set; } public string WxHeadImage { get; set; } public string Name { get; set; } public string Country { get; set; } public int Sex { get; set; } public double Weight { get; set; } public int FTP { get; set; } public int UserId { get; set; } public DateTime JoinAt { get; set; } public int Status { get; set; } public double Process { get; set; } public bool IsOwner { get; set; } public DateTime LastActiveTime { get; set; } public override string ToString() { return $"{RoomId},{UserId},{JoinAt},{Status},{Process},{IsOwner}"; } public static List Parse(string s) { List list = new List(); s = s.Replace("detail{", ""); if (string.IsNullOrEmpty(s)) return list; var arr = s.Split('|'); foreach (var item in arr) { var info = item.Split(','); list.Add(new RoomPlayerModel() { RoomId = Convert.ToInt32(info[0]), UserId = Convert.ToInt32(info[1]), JoinAt = Convert.ToDateTime(info[2]).ToLocalTime(), Status = Convert.ToInt32(info[3]), Process = Convert.ToInt32(info[4]), IsOwner = Convert.ToBoolean(info[5]), }); } if (list.Count > 0) { var ids = list.Select(c => c.UserId); var userList = ConfigHelper.mapApi.GetOnlineUserInfo(ids).data; foreach (var item in list) { var user = userList.Where(c => c.Id == item.UserId).FirstOrDefault(); item.WxHeadImage = user?.HeadImage; item.FTP = user.FTP; item.Weight = user.Weight; item.Name = user.Name; item.Sex = user.Sex; item.Country = user.Country; } } return list; } } public class RoomRankItem { public int UserId { get; set; } public string WxHeadImg { get; set; } public string NickName { get; set; } public int Rank { get; set; } public string Country { get; set; } public string TotalTime { get; set; } public bool IsDNF { get; set; } } }