forked from powerfun/udpservice
一些功能调整
增加tcp协议支持; 增加模拟多用户的功能;
This commit is contained in:
1 parent
e8b6418aa6
commit
0e931a3ac9
21 files changed
+890
-174
No files matched your search
@@ -0,0 +1,14 @@
|
||||
using OnlineUserPool.Model;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace OnlineUserPool.Hander
|
||||
{
|
||||
interface IHandle
|
||||
{
|
||||
List<MsgModel> GetVirtualUserData();
|
||||
|
||||
void RemoveEndAndAddNewVirtualUser(int customerCount);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using OnlineUserPool.Model;
|
||||
using OnlineUserPool.Api;
|
||||
using OnlineUserPool.Model;
|
||||
using OnlineUserPool.Unility;
|
||||
|
||||
using Serilog;
|
||||
@@ -10,11 +11,11 @@ using System.Text;
|
||||
|
||||
namespace OnlineUserPool.Hander
|
||||
{
|
||||
public class MapRecordRankingHander
|
||||
public class MapRecordRankingHander : IHandle
|
||||
{
|
||||
private static List<MapRecordRanking> mapRecordRankings;
|
||||
private static List<MapRecordRanking> mapRecordRankings = new List<MapRecordRanking>();
|
||||
private static object locker = new object();//防止服务端响应慢,多次加载
|
||||
private int top = ConfigHelp.Top;
|
||||
//private int top = ConfigHelp.Top;
|
||||
|
||||
public MapRecordRankingHander()
|
||||
{
|
||||
@@ -23,13 +24,15 @@ namespace OnlineUserPool.Hander
|
||||
|
||||
private void Init()
|
||||
{
|
||||
var records = WebService.GetMapRouteRandomRecord(top, null);
|
||||
var pageSize = 10;
|
||||
var pageCount = (int)Math.Ceiling(records.Count / (double)pageSize);
|
||||
mapRecordRankings = new List<MapRecordRanking>();
|
||||
for (int i = 0; i < pageCount; i++)
|
||||
if (ConfigHelp.Top > 0)
|
||||
{
|
||||
mapRecordRankings.AddRange(WebService.GetRecordFileFromServer(records.Skip(i* pageSize).Take(pageSize).Select(n => n.Id).ToList()));
|
||||
var records = WebService.GetMapRouteRandomRecord(ConfigHelp.Top, null);
|
||||
var pageSize = 10;
|
||||
var pageCount = (int)Math.Ceiling(records.Count / (double)pageSize);
|
||||
for (int i = 0; i < pageCount; i++)
|
||||
{
|
||||
mapRecordRankings.AddRange(WebService.GetRecordFileFromServer(records.Skip(i * pageSize).Take(pageSize).Select(n => n.Id).ToList()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,9 +76,9 @@ namespace OnlineUserPool.Hander
|
||||
//Prop = string.Join(',', prop),
|
||||
RouteId = item.RouteId,
|
||||
EndDistance = Math.Round(targetData._Distance, 6),
|
||||
ShowVirtual = true,
|
||||
//ShowVirtual = true,
|
||||
CommandType = 1,
|
||||
IsVirtual = true,
|
||||
//IsVirtual = true,
|
||||
Speed = targetData._Speed,
|
||||
WeightKg = weightKg,
|
||||
PreDistance = item.GetPreDistance()
|
||||
@@ -94,31 +97,31 @@ namespace OnlineUserPool.Hander
|
||||
/// <summary>
|
||||
/// 删除已经骑行完的人,添加新的人物进去
|
||||
/// </summary>
|
||||
public void RemoveEndAndAddNewVirtualUser()
|
||||
public void RemoveEndAndAddNewVirtualUser(int customerCount)
|
||||
{
|
||||
lock (locker)
|
||||
{
|
||||
var end = mapRecordRankings.FindAll(n => n.End);
|
||||
//if (end.Count == mapRecordRankings.Count)
|
||||
//{
|
||||
// Init();
|
||||
//}
|
||||
if (end.Count > 0)
|
||||
{
|
||||
var virutalEndCount = mapRecordRankings.Count(d => d.UserId < 0 && d.End);
|
||||
var routeIds = mapRecordRankings.Select(n => n.RouteId).Distinct().ToList();
|
||||
mapRecordRankings.RemoveAll(n => n.End);
|
||||
if (virutalEndCount > 0)
|
||||
{
|
||||
var randomUser = WebService.GetMapRouteRandomRecord(virutalEndCount, routeIds);
|
||||
mapRecordRankings.RemoveAll(n => n.End);
|
||||
//var virutalEndCount = mapRecordRankings.Count(d => d.UserId < 0 && d.End);
|
||||
var routeIds = mapRecordRankings.Select(n => n.RouteId).Distinct().ToList();
|
||||
|
||||
//var str = "参数:" + (ConfigHelp.Top - virutalEndCount) + "," + string.Join(",",routeIds) + "\r\n";
|
||||
//str += "服务端返回:" + Newtonsoft.Json.JsonConvert.SerializeObject(randomUser) +"\r\n";
|
||||
//Log.Information(str);
|
||||
var addRankings = WebService.GetRecordFileFromServer(randomUser.Select(n => n.Id).ToList());
|
||||
mapRecordRankings.AddRange(addRankings);
|
||||
}
|
||||
var top = ConfigHelp.Top;
|
||||
if(customerCount > 9)
|
||||
{
|
||||
top = 0;
|
||||
}
|
||||
if(top - mapRecordRankings.Count(d=>d.UserId<0) > 0)
|
||||
{
|
||||
var count = top - mapRecordRankings.Count(d => d.UserId < 0);
|
||||
var randomUser = WebService.GetMapRouteRandomRecord(count, routeIds);
|
||||
|
||||
//var str = "参数:" + (ConfigHelp.Top - virutalEndCount) + "," + string.Join(",",routeIds) + "\r\n";
|
||||
//str += "服务端返回:" + Newtonsoft.Json.JsonConvert.SerializeObject(randomUser) +"\r\n";
|
||||
//Log.Information(str);
|
||||
var addRankings = WebService.GetRecordFileFromServer(randomUser.Select(n => n.Id).ToList());
|
||||
mapRecordRankings.AddRange(addRankings);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
using OnlineUserPool.Api;
|
||||
using OnlineUserPool.Api.Model;
|
||||
using OnlineUserPool.Model;
|
||||
using OnlineUserPool.Unility;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace OnlineUserPool.Hander
|
||||
{
|
||||
public class MultiUserHandle : IHandle
|
||||
{
|
||||
private int _index = -1;
|
||||
private MultiUserModel model;
|
||||
private TurfHelper _turfHelper;
|
||||
private int _routeId = 4297; //1660;
|
||||
private int _size = 200;
|
||||
public MultiUserHandle()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
public async void Init()
|
||||
{
|
||||
model = await BaseApi.GetAsync<MultiUserModel>($"/Map/sss?routeId={ _routeId }&size={ _size }");
|
||||
double i = 0;
|
||||
foreach (var item in model.users)
|
||||
{
|
||||
i += 0.0005;
|
||||
item.Distance = i;
|
||||
}
|
||||
_turfHelper = new TurfHelper(model.route.List.Select(d => d.Point));
|
||||
//Debug.WriteLine(res);
|
||||
}
|
||||
|
||||
public List<MsgModel> GetVirtualUserData()
|
||||
{
|
||||
_index++;
|
||||
|
||||
var msgModels = new List<MsgModel>();
|
||||
if(model == null)
|
||||
{
|
||||
return msgModels;
|
||||
}
|
||||
foreach (var item in model.users)
|
||||
{
|
||||
var preDistance = 0D;
|
||||
//item.Distance = CommonHelper.GenerateRandomInteger(0, 30) / 1000D;
|
||||
if (_index > 0)
|
||||
{
|
||||
preDistance = item.Distance * (_index -1);
|
||||
}
|
||||
var point = _turfHelper.Along(item.Distance * _index);
|
||||
var info = new MsgModel()
|
||||
{
|
||||
exit = false,
|
||||
IsCompleted = false,
|
||||
MemberId = item.Id,//虚拟的人Id变为负数
|
||||
Point = new double[] { Math.Round(point.Latitude, 6), Math.Round(point.Longitude, 6) },
|
||||
//Prop = string.Join(',', prop),
|
||||
RouteId = _routeId,
|
||||
EndDistance = item.Distance * _index,
|
||||
//ShowVirtual = true,
|
||||
CommandType = 1,
|
||||
//IsVirtual = true,
|
||||
Speed = item.Speed,
|
||||
WeightKg = 0,
|
||||
PreDistance = preDistance,
|
||||
Competitionid = 30
|
||||
};
|
||||
msgModels.Add(info);
|
||||
}
|
||||
|
||||
return msgModels;
|
||||
}
|
||||
|
||||
public void RemoveEndAndAddNewVirtualUser(int customerCount)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user