diff --git a/Hander/MapRecordRankingHander.cs b/Hander/MapRecordRankingHander.cs index e744149..899f898 100644 --- a/Hander/MapRecordRankingHander.cs +++ b/Hander/MapRecordRankingHander.cs @@ -76,66 +76,59 @@ namespace OnlineUserPool.Hander return msgModels; } - if (mapRecordRankings != null) + if (mapRecordRankings == null) return msgModels; + + for (int i = 0; i < mapRecordRankings.Count; i++) { - for (int i = 0; i < mapRecordRankings.Count; i++) + try { - try + var item = mapRecordRankings[i]; + item.CurrentIndex++; + var targetData = item.GetCurrentTargetData(); + var weightKg = 0.0D; + + if (targetData._Power >= 0) { - var item = mapRecordRankings[i]; - item.CurrentIndex++; - TargetData targetData = item.GetCurrentTargetData(); + weightKg = Math.Round(targetData._Power / item.Weight, 2); + } - var weightKg = 0.0D; - if (targetData._Power >= 0) - { - weightKg = Math.Round(targetData._Power / item.Weight, 2); - } - - if (item.CurrentIndex == 0) - { - //机器人上线 - var loginInfo = new MsgModel() - { - Exit = item.End, - IsCompleted = item.End, - MemberId = item.UserId, //虚拟的人Id变为负数 - Point = new double[] { -1d, -1d }, - //Prop = string.Join(',', prop), - RouteId = item.RouteId, - EndDistance = Math.Round(targetData._Distance, 6), - //ShowVirtual = true, - CommandType = 1, - //IsVirtual = true, - Speed = targetData._Speed, - WeightKg = weightKg, - PreDistance = item.GetPreDistance() - }; - msgModels.Add(loginInfo); - } - - var info = new MsgModel() + if (item.CurrentIndex == 0) + { + //机器人上线 + var loginInfo = new MsgModel() { Exit = item.End, IsCompleted = item.End, MemberId = item.UserId, //虚拟的人Id变为负数 - Point = new double[] { Math.Round(targetData._Lat, 6), Math.Round(targetData._Lon, 6) }, - //Prop = string.Join(',', prop), + Point = new double[] { -1d, -1d }, RouteId = item.RouteId, EndDistance = Math.Round(targetData._Distance, 6), - //ShowVirtual = true, CommandType = 1, - //IsVirtual = true, Speed = targetData._Speed, WeightKg = weightKg, PreDistance = item.GetPreDistance() }; - msgModels.Add(info); + msgModels.Add(loginInfo); } - catch (Exception e) + + var info = new MsgModel() { - Log.Error("加载虚拟人物错误:" + e.Message + "\r\n" + e.StackTrace); - } + Exit = item.End, + IsCompleted = item.End, + MemberId = item.UserId, //虚拟的人Id变为负数 + Point = new double[] { Math.Round(targetData._Lat, 6), Math.Round(targetData._Lon, 6) }, + RouteId = item.RouteId, + EndDistance = Math.Round(targetData._Distance, 6), + CommandType = 1, + Speed = targetData._Speed, + WeightKg = weightKg, + PreDistance = item.GetPreDistance() + }; + msgModels.Add(info); + } + catch (Exception e) + { + Log.Error("加载虚拟人物错误:" + e.Message + "\r\n" + e.StackTrace); } } diff --git a/Model/MapRecordRanking.cs b/Model/MapRecordRanking.cs index dfc9a67..4b1cdd1 100644 --- a/Model/MapRecordRanking.cs +++ b/Model/MapRecordRanking.cs @@ -45,26 +45,6 @@ namespace OnlineUserPool.Model public int CurrentIndex { get; set; - //get - //{ - //if (_BeginIndex != 0) - //{ - // _BeginIndex++; - // if (End) - // { - // return this.Count - 1; - // } - // return this._BeginIndex; - //} - //else - //{ - // _BeginIndex = 1; - // return _BeginIndex; - // Random random = new Random(); - // _BeginIndex = random.Next(0, this.Count); - // return _BeginIndex; - //} - //} } = -1; /// @@ -74,7 +54,6 @@ namespace OnlineUserPool.Model { get { - //return this._BeginIndex >= this.Count; return this.CurrentIndex >= this.Count; } } diff --git a/Model/TargetData.cs b/Model/TargetData.cs index 929c90a..f8e75f7 100644 --- a/Model/TargetData.cs +++ b/Model/TargetData.cs @@ -68,7 +68,9 @@ namespace OnlineUserPool.Model _target._Bearing = double.Parse(split[8]); } } - + + split = null; + return _target; } } diff --git a/Services/TcpService.cs b/Services/TcpService.cs index 516e36f..e01f1bb 100644 --- a/Services/TcpService.cs +++ b/Services/TcpService.cs @@ -129,47 +129,40 @@ namespace OnlineUserPool.Services this._dataBuffer.Append(item); if (item != '}') continue; Debug.WriteLine("收到消息:" + this._dataBuffer); - - var msg = JsonConvert.DeserializeObject(this._dataBuffer.ToString()); + var s = this._dataBuffer.ToString(); + var msg = JsonConvert.DeserializeObject(s); var ipEndPoint = IPEndPoint.Parse(this.Socket.RemoteEndPoint.ToString()); switch (msg.CommandType) { case 1: - _action(ipEndPoint, JsonConvert.DeserializeObject(this._dataBuffer.ToString())); + _action(ipEndPoint, JsonConvert.DeserializeObject(s)); break; case 2: - _action(ipEndPoint, JsonConvert.DeserializeObject(this._dataBuffer.ToString())); + _action(ipEndPoint, JsonConvert.DeserializeObject(s)); break; case 3: switch (msg.SubType) { case 0: - _action(ipEndPoint, - JsonConvert.DeserializeObject(this._dataBuffer.ToString())); + _action(ipEndPoint,JsonConvert.DeserializeObject(s)); break; case 1: - _action(ipEndPoint, - JsonConvert.DeserializeObject(this._dataBuffer.ToString())); + _action(ipEndPoint,JsonConvert.DeserializeObject(s)); break; case 2: - _action(ipEndPoint, - JsonConvert.DeserializeObject(this._dataBuffer.ToString())); + _action(ipEndPoint,JsonConvert.DeserializeObject(s)); break; case 3: - _action(ipEndPoint, - JsonConvert.DeserializeObject(this._dataBuffer.ToString())); + _action(ipEndPoint,JsonConvert.DeserializeObject(s)); break; case 4: - _action(ipEndPoint, - JsonConvert.DeserializeObject(this._dataBuffer.ToString())); + _action(ipEndPoint,JsonConvert.DeserializeObject(s)); break; case 5: - _action(ipEndPoint, - JsonConvert.DeserializeObject(this._dataBuffer.ToString())); + _action(ipEndPoint,JsonConvert.DeserializeObject(s)); break; case 6: - _action(ipEndPoint, - JsonConvert.DeserializeObject(this._dataBuffer.ToString())); + _action(ipEndPoint,JsonConvert.DeserializeObject(s)); break; } @@ -178,14 +171,16 @@ namespace OnlineUserPool.Services _action(ipEndPoint, msg); break; } - this._dataBuffer.Clear(); + s = null; } } catch (Exception ex) { Log.Error($"接受到的数据处理时出错:{data}\r\n{ex.Message}\r\n{ex.StackTrace}"); } + + data = null; } protected override void OnError(SocketError error) diff --git a/ViewModels/MainWindowViewModel.cs b/ViewModels/MainWindowViewModel.cs index a12bde2..9a20c04 100644 --- a/ViewModels/MainWindowViewModel.cs +++ b/ViewModels/MainWindowViewModel.cs @@ -556,19 +556,19 @@ namespace OnlineUserPool.ViewModels private void HandleGameRoomProcess(ReceiveModel msg) { var msg1 = msg as GameRoomProcessCommand; - var room = RoomList.ToList().Where(c => c.RoomId == msg1.RoomId).FirstOrDefault(); - var client = Clients.Where(c => c.MemberId == msg1.UserId).FirstOrDefault(); + var room = RoomList.ToList().FirstOrDefault(c => c.RoomId == msg1.RoomId); + var client = Clients.FirstOrDefault(c => c.MemberId == msg1.UserId); if (room != null) { var list = room.List; - var player = list.Where(c => c.UserId == msg1.UserId).FirstOrDefault(); + var player = list.FirstOrDefault(c => c.UserId == msg1.UserId); if (player != null) { player.Process = msg1.Process; } - var notReady = list.Where(c => c.Process < TOTAL_PROCESS).Any(); + + var notReady = list.Any(c => c.Process < TOTAL_PROCESS); var now = DateTime.Now; - var timespan = now - room.StatusChangedTime; //超时时间1分钟所有人强制开始 if ((notReady && timespan.TotalSeconds > ROOM_TIME_OUT) || !notReady) @@ -837,51 +837,49 @@ namespace OnlineUserPool.ViewModels private NetworkData HandleGzipNetworkData(List list, HostModel item) { sb.Clear(); - foreach (var obj in list.Where(m => m.CompetitionId == item.Competitionid).Select(m => m.ToString(2))) + sb.Append("l{"); + var runtimeList = list.Where(m => m.CompetitionId == item.Competitionid).Select(m => m.ToString(2)).ToList(); + foreach (var obj in runtimeList) { sb.Append(obj); sb.Append("|"); } - sb.Remove(sb.Length - 1, 1); - var temp = sb.ToString(); - - sb.Clear(); - foreach (var obj in Clients.Where(c => c.IsWatch && c.Competitionid == item.Competitionid).Select(c => c.MemberId)) - { - sb.Append(obj); - sb.Append("|"); - } - - if (sb.Length > 0) + if (runtimeList.Any()) { sb.Remove(sb.Length - 1, 1); } - - var watchList1 = sb.ToString(); + + sb.Append("};w{"); + + var watchList = Clients.Where(c => c.IsWatch && c.Competitionid == item.Competitionid).Select(c => c.MemberId).ToList(); + foreach (var obj in watchList) + { + sb.Append(obj); + sb.Append("|"); + } + if (watchList.Any()) + { + sb.Remove(sb.Length - 1, 1); + } + + sb.Append("};e{"); - sb.Clear(); - foreach (var c in list.Where(c => c.RoomId > 0 || c.FrameRate > 0)) + var errorList = list.Where(c => c.RoomId > 0 || c.FrameRate > 0).ToList(); + foreach (var c in errorList) { sb.Append($"{c.MemberId},{c.RoomId},{c.FrameRate},{c.TotalTicks}"); sb.Append("|"); } - if (sb.Length > 0) + if (errorList.Any()) { sb.Remove(sb.Length - 1, 1); } - - var e = sb.ToString(); - sb.Clear(); - sb.Append("*l{"); - sb.Append(temp); - sb.Append("};w{"); - sb.Append(watchList1); - sb.Append("};e{"); - sb.Append(e); - sb.Append("};#"); + sb.Append("};"); + var strV2 = sb.ToString(); var data2 = new NetworkData(strV2); + strV2 = null; return data2; } @@ -1007,19 +1005,14 @@ namespace OnlineUserPool.ViewModels return Encoding.UTF8.GetBytes(this._txt); } + public void Dispose() + { + //this._txt = null; + } private byte[] GetCompressBytes() { - var temp = this._txt; - if(temp[0] == '*') - { - temp = temp.Substring(1); - } - if(temp.Last() == '#') - { - temp = temp.Substring(0, temp.Length - 1); - } - return Encoding.UTF8.GetBytes($"*{ Convert.ToBase64String(CommonHelper.Compress(temp)) }#"); + return Encoding.UTF8.GetBytes($"*{Convert.ToBase64String(CommonHelper.Compress(this._txt))}#"); } } }