forked from powerfun/udpservice
内存优化
This commit is contained in:
parent
c3a9437fc8
commit
9f134a2d64
@ -76,66 +76,59 @@ namespace OnlineUserPool.Hander
|
|||||||
return msgModels;
|
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];
|
weightKg = Math.Round(targetData._Power / item.Weight, 2);
|
||||||
item.CurrentIndex++;
|
}
|
||||||
TargetData targetData = item.GetCurrentTargetData();
|
|
||||||
|
|
||||||
var weightKg = 0.0D;
|
if (item.CurrentIndex == 0)
|
||||||
if (targetData._Power >= 0)
|
{
|
||||||
{
|
//机器人上线
|
||||||
weightKg = Math.Round(targetData._Power / item.Weight, 2);
|
var loginInfo = new MsgModel()
|
||||||
}
|
|
||||||
|
|
||||||
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()
|
|
||||||
{
|
{
|
||||||
Exit = item.End,
|
Exit = item.End,
|
||||||
IsCompleted = item.End,
|
IsCompleted = item.End,
|
||||||
MemberId = item.UserId, //虚拟的人Id变为负数
|
MemberId = item.UserId, //虚拟的人Id变为负数
|
||||||
Point = new double[] { Math.Round(targetData._Lat, 6), Math.Round(targetData._Lon, 6) },
|
Point = new double[] { -1d, -1d },
|
||||||
//Prop = string.Join(',', prop),
|
|
||||||
RouteId = item.RouteId,
|
RouteId = item.RouteId,
|
||||||
EndDistance = Math.Round(targetData._Distance, 6),
|
EndDistance = Math.Round(targetData._Distance, 6),
|
||||||
//ShowVirtual = true,
|
|
||||||
CommandType = 1,
|
CommandType = 1,
|
||||||
//IsVirtual = true,
|
|
||||||
Speed = targetData._Speed,
|
Speed = targetData._Speed,
|
||||||
WeightKg = weightKg,
|
WeightKg = weightKg,
|
||||||
PreDistance = item.GetPreDistance()
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -45,26 +45,6 @@ namespace OnlineUserPool.Model
|
|||||||
public int CurrentIndex
|
public int CurrentIndex
|
||||||
{
|
{
|
||||||
get; set;
|
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;
|
} = -1;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -74,7 +54,6 @@ namespace OnlineUserPool.Model
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
//return this._BeginIndex >= this.Count;
|
|
||||||
return this.CurrentIndex >= this.Count;
|
return this.CurrentIndex >= this.Count;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -68,7 +68,9 @@ namespace OnlineUserPool.Model
|
|||||||
_target._Bearing = double.Parse(split[8]);
|
_target._Bearing = double.Parse(split[8]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
split = null;
|
||||||
|
|
||||||
return _target;
|
return _target;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -129,47 +129,40 @@ namespace OnlineUserPool.Services
|
|||||||
this._dataBuffer.Append(item);
|
this._dataBuffer.Append(item);
|
||||||
if (item != '}') continue;
|
if (item != '}') continue;
|
||||||
Debug.WriteLine("收到消息:" + this._dataBuffer);
|
Debug.WriteLine("收到消息:" + this._dataBuffer);
|
||||||
|
var s = this._dataBuffer.ToString();
|
||||||
var msg = JsonConvert.DeserializeObject<ReceiveModel>(this._dataBuffer.ToString());
|
var msg = JsonConvert.DeserializeObject<ReceiveModel>(s);
|
||||||
var ipEndPoint = IPEndPoint.Parse(this.Socket.RemoteEndPoint.ToString());
|
var ipEndPoint = IPEndPoint.Parse(this.Socket.RemoteEndPoint.ToString());
|
||||||
switch (msg.CommandType)
|
switch (msg.CommandType)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
_action(ipEndPoint, JsonConvert.DeserializeObject<MsgModel>(this._dataBuffer.ToString()));
|
_action(ipEndPoint, JsonConvert.DeserializeObject<MsgModel>(s));
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
_action(ipEndPoint, JsonConvert.DeserializeObject<SetClientCommand>(this._dataBuffer.ToString()));
|
_action(ipEndPoint, JsonConvert.DeserializeObject<SetClientCommand>(s));
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
switch (msg.SubType)
|
switch (msg.SubType)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
_action(ipEndPoint,
|
_action(ipEndPoint,JsonConvert.DeserializeObject<CreateGameRoomCommand>(s));
|
||||||
JsonConvert.DeserializeObject<CreateGameRoomCommand>(this._dataBuffer.ToString()));
|
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
_action(ipEndPoint,
|
_action(ipEndPoint,JsonConvert.DeserializeObject<JoinGameRoomCommand>(s));
|
||||||
JsonConvert.DeserializeObject<JoinGameRoomCommand>(this._dataBuffer.ToString()));
|
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
_action(ipEndPoint,
|
_action(ipEndPoint,JsonConvert.DeserializeObject<GameRoomReadyCommand>(s));
|
||||||
JsonConvert.DeserializeObject<GameRoomReadyCommand>(this._dataBuffer.ToString()));
|
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
_action(ipEndPoint,
|
_action(ipEndPoint,JsonConvert.DeserializeObject<GameRoomStartCommand>(s));
|
||||||
JsonConvert.DeserializeObject<GameRoomStartCommand>(this._dataBuffer.ToString()));
|
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
_action(ipEndPoint,
|
_action(ipEndPoint,JsonConvert.DeserializeObject<GameRoomKickCommand>(s));
|
||||||
JsonConvert.DeserializeObject<GameRoomKickCommand>(this._dataBuffer.ToString()));
|
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
_action(ipEndPoint,
|
_action(ipEndPoint,JsonConvert.DeserializeObject<GameRoomProcessCommand>(s));
|
||||||
JsonConvert.DeserializeObject<GameRoomProcessCommand>(this._dataBuffer.ToString()));
|
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
_action(ipEndPoint,
|
_action(ipEndPoint,JsonConvert.DeserializeObject<QueryGameRoomListCommand>(s));
|
||||||
JsonConvert.DeserializeObject<QueryGameRoomListCommand>(this._dataBuffer.ToString()));
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -178,14 +171,16 @@ namespace OnlineUserPool.Services
|
|||||||
_action(ipEndPoint, msg);
|
_action(ipEndPoint, msg);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
this._dataBuffer.Clear();
|
this._dataBuffer.Clear();
|
||||||
|
s = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Log.Error($"接受到的数据处理时出错:{data}\r\n{ex.Message}\r\n{ex.StackTrace}");
|
Log.Error($"接受到的数据处理时出错:{data}\r\n{ex.Message}\r\n{ex.StackTrace}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnError(SocketError error)
|
protected override void OnError(SocketError error)
|
||||||
|
|||||||
@ -556,19 +556,19 @@ namespace OnlineUserPool.ViewModels
|
|||||||
private void HandleGameRoomProcess(ReceiveModel msg)
|
private void HandleGameRoomProcess(ReceiveModel msg)
|
||||||
{
|
{
|
||||||
var msg1 = msg as GameRoomProcessCommand;
|
var msg1 = msg as GameRoomProcessCommand;
|
||||||
var room = RoomList.ToList().Where(c => c.RoomId == msg1.RoomId).FirstOrDefault();
|
var room = RoomList.ToList().FirstOrDefault(c => c.RoomId == msg1.RoomId);
|
||||||
var client = Clients.Where(c => c.MemberId == msg1.UserId).FirstOrDefault();
|
var client = Clients.FirstOrDefault(c => c.MemberId == msg1.UserId);
|
||||||
if (room != null)
|
if (room != null)
|
||||||
{
|
{
|
||||||
var list = room.List;
|
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)
|
if (player != null)
|
||||||
{
|
{
|
||||||
player.Process = msg1.Process;
|
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 now = DateTime.Now;
|
||||||
|
|
||||||
var timespan = now - room.StatusChangedTime;
|
var timespan = now - room.StatusChangedTime;
|
||||||
//超时时间1分钟所有人强制开始
|
//超时时间1分钟所有人强制开始
|
||||||
if ((notReady && timespan.TotalSeconds > ROOM_TIME_OUT) || !notReady)
|
if ((notReady && timespan.TotalSeconds > ROOM_TIME_OUT) || !notReady)
|
||||||
@ -837,51 +837,49 @@ namespace OnlineUserPool.ViewModels
|
|||||||
private NetworkData HandleGzipNetworkData(List<MsgModel> list, HostModel item)
|
private NetworkData HandleGzipNetworkData(List<MsgModel> list, HostModel item)
|
||||||
{
|
{
|
||||||
sb.Clear();
|
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(obj);
|
||||||
sb.Append("|");
|
sb.Append("|");
|
||||||
}
|
}
|
||||||
sb.Remove(sb.Length - 1, 1);
|
if (runtimeList.Any())
|
||||||
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)
|
|
||||||
{
|
{
|
||||||
sb.Remove(sb.Length - 1, 1);
|
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();
|
var errorList = list.Where(c => c.RoomId > 0 || c.FrameRate > 0).ToList();
|
||||||
foreach (var c in list.Where(c => c.RoomId > 0 || c.FrameRate > 0))
|
foreach (var c in errorList)
|
||||||
{
|
{
|
||||||
sb.Append($"{c.MemberId},{c.RoomId},{c.FrameRate},{c.TotalTicks}");
|
sb.Append($"{c.MemberId},{c.RoomId},{c.FrameRate},{c.TotalTicks}");
|
||||||
sb.Append("|");
|
sb.Append("|");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sb.Length > 0)
|
if (errorList.Any())
|
||||||
{
|
{
|
||||||
sb.Remove(sb.Length - 1, 1);
|
sb.Remove(sb.Length - 1, 1);
|
||||||
}
|
}
|
||||||
|
sb.Append("};");
|
||||||
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("};#");
|
|
||||||
var strV2 = sb.ToString();
|
var strV2 = sb.ToString();
|
||||||
var data2 = new NetworkData(strV2);
|
var data2 = new NetworkData(strV2);
|
||||||
|
strV2 = null;
|
||||||
return data2;
|
return data2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1007,19 +1005,14 @@ namespace OnlineUserPool.ViewModels
|
|||||||
return Encoding.UTF8.GetBytes(this._txt);
|
return Encoding.UTF8.GetBytes(this._txt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
//this._txt = null;
|
||||||
|
}
|
||||||
|
|
||||||
private byte[] GetCompressBytes()
|
private byte[] GetCompressBytes()
|
||||||
{
|
{
|
||||||
var temp = this._txt;
|
return Encoding.UTF8.GetBytes($"*{Convert.ToBase64String(CommonHelper.Compress(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)) }#");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user