using System; using System.Collections.Generic; using System.Linq; using Assets.Scenes.Ride.Scripts.Model.RiderModels; using Assets.Scripts.Apis.Models; namespace Assets.Scenes.Ride.Scripts.Model.CyclingModels { public class ARSingleModel : BaseCycling { public ARSingleModel(Route route,RouteResultParam param) : base(route, CyclingModel.Single) { this.IsRecord = true; recorderData = new RecorderDataModel() { CurrentUser = App.CurrentUser, Competitionid = 0, ContinueIndex = 0, ContinueMark = Guid.NewGuid().ToString(), EndDistance = 0, IsCompleted = false, IsNeedRanking = true, CyclingState = CyclingStateEnum.Prepare, CurrentRoute = route, CurrentRouteStartDistance = 0, StartTime = DateTime.Now,//UIManager.Now.GetDateTime(),//DateTime.Now selectParam = param }; if (param != null) { recorderData.EndDistance = param.EndDistance; recorderData.CurrentRouteStartDistance = param.EndDistance; if (!string.IsNullOrWhiteSpace(param.ContinueMark)) { recorderData.ContinueMark = param.ContinueMark; } else { param.ContinueMark = recorderData.ContinueMark; } recorderData.ContinueIndex = param.ContinueIndex.GetValueOrDefault(0); } recorderData.PreDistance = recorderData.EndDistance; riders = new List(); } public override void Run(TargetData targetData) { #region 获取当前路线在线用户 riders.Clear(); var onlineUsers = MapUDPService.GetOnlineUsers(recorderData.CurrentRoute.RouteInstance.Id).ToList(); onlineUsers = onlineUsers.Where(c => !c.Saved).ToList(); foreach (var item in onlineUsers) { riders.Add(new OnlineRiderModel() { NickName = item.Name, UserId = item.Id, WxHeadImg = item.HeadImage, Point = new GeoJSON.Net.Geometry.GeographicPosition(item.Point[0], item.Point[1]), EndDistance = item.EndDistance, PreDistance = item.PreDistance, WeightKg = item.WeightKg, Sex = item.Sex, FrameRate = item.FrameRate, Speed = item.Speed, IsWatcher = item.IsWatcher, Saved = item.Saved }); } #endregion SendUserPositionToServer(); } protected override void SendUserPositionToServer() { try { if (recorderData.RiderDatas.Any()) { var lastData = recorderData.RiderDatas.Last(); var preDistance = recorderData.PreDistance; var weightKg = Math.Round(lastData._Power / recorderData.CurrentUser.Weight, 2); MapUDPService.Send(route.RouteInstance.Id, recorderData.BelongUserId, new double[] { lastData._Lat, lastData._Lon }, recorderData.IsCompleted, false, recorderData.EndDistance, true, 1, lastData._Speed, false, preDistance, weightKg, competitionId: recorderData.Competitionid, recorderData.Saved, 0, lastData._Power, lastData._Cadence, lastData.Ticks, (lastData._FrameRate ?? 0), roomId: recorderData.RoomId); } else if (recorderData.EndDistance > 0)//没有骑,但是有初始位置的情况 { var point = _turfHelper.Along(recorderData.EndDistance); MapUDPService.Send(route.RouteInstance.Id, recorderData.BelongUserId, new double[] { point.Latitude, point.Longitude }, endDistance: recorderData.EndDistance, preDistance: recorderData.EndDistance, competitionId: recorderData.Competitionid); } else { MapUDPService.Send(route.RouteInstance.Id, recorderData.BelongUserId, route.Point.First().Reverse().ToArray(), competitionId: recorderData.Competitionid, roomId: recorderData.RoomId); } } catch (Exception) { } } } }