对战初步完成

This commit is contained in:
lishuo committed 2022-05-10 19:24:07 +08:00
1 parent b0c0890ca3
commit 509c309252
55 files changed
+7079 -6748

No files matched your search

@@ -41,6 +41,8 @@ namespace Assets.Scenes.Ride.Scripts
}
private static DateTime LastActiveTime = DateTime.Now;
private static List<ReceiveMsgModel> msgs = new List<ReceiveMsgModel>();
public static Action<List<ReceiveMsgModel>> MessageListener { get; set; }
/// <summary>
/// 初始化(如果UDP服务未启动,则会已没5秒一次不断尝试,直到连接上为止,前端不需要考虑任何UDP连接的事情)
/// </summary>
@@ -61,9 +63,10 @@ namespace Assets.Scenes.Ride.Scripts
_udpService.Start(list =>
{
LastActiveTime = DateTime.Now;
//onlineUserHelper.RemoveExceptionData(list);
msgs = list;
//onlineUserHelper.RemoveExceptionData(list);
msgs = list;
onlineUserHelper.SetOnlineUser(msgs);
MessageListener?.Invoke(list);
});
heartbeat = new System.Timers.Timer();
@@ -109,18 +112,48 @@ namespace Assets.Scenes.Ride.Scripts
SendHeartbeat();
}
}
//获取房间人物列表
private static void SendGameRoomListPlayers(int[] roomIds)
//查询房间
public static void SendQueryGameRoomList(int userId,int pageIndex,int pageSize,string roomIdOrName)
{
var model = new
var cmd = new QueryGameRoomListCommand()
{
UserId = userId,
PageIndex = pageIndex,
PageSize = pageSize,
Name = roomIdOrName,
CommandType = 3,
SubType = 6,
V = 2,
};
var sendBytes = Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(cmd));
_udpService.Send(sendBytes, sendBytes.Length);
}
//创建房间
public static void SendCreateGameRoom(string name, int routeId, string pwd, DateTime createTime , int closeTime, int maxMembers,double averageGrade,double totalClimb,double distance,bool enable3D,bool enableAR,string mapName,string fileName,string fileUrl,string altitudeGraph)
{
var cmd = new CreateGameRoomCommand() {
Id = 0,
UserId = App.CurrentUser.Id,
Name = name,
RouteId = routeId,
Password = pwd,
CreateTime = createTime,
CloseTime = closeTime,
MaxMembers= maxMembers,
MapRouteName = mapName,
EnableAR = enableAR,
Enable3D = enable3D,
Distance = distance,
TotalClimb = totalClimb,
AverageGrade = averageGrade,
AltitudeGraph = altitudeGraph,
FileName = fileName,
FileUrl = fileUrl,
CommandType = 3,
SubType = 0,
V = 2,
};
var sendBytes = Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(model));
var sendBytes = Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(cmd));
_udpService.Send(sendBytes, sendBytes.Length);
}
//加入对战房间
@@ -130,8 +163,8 @@ namespace Assets.Scenes.Ride.Scripts
{
CommandType = 3,
SubType = 1,
UserId = userId,
RoomId = roomId,
UserId = userId,
JoinAt = startTime,
V = 2,
};
@@ -280,13 +313,13 @@ namespace Assets.Scenes.Ride.Scripts
/// <param name="exit">是否退出</param>
public static void Send(int RouteId, int MemberId, double[] Point, bool IsCompleted = false, bool exit = false,
double endDistance = 0, bool showVirtual = false, byte commandType = 1, double speed = 0, bool isVirtual = false, double preDistance = 0,
double weightKg = 0, int competitionId = 0, bool saved = false,double? heartRate = 0, double power = 0, double? cadence = 0,int totalTicks = 0, int frameRate = 0, int roomId = 0,DateTime? startTime = null)
double weightKg = 0, int competitionId = 0, bool saved = false,double? heartRate = 0, double power = 0, double? cadence = 0,int totalTicks = 0, int frameRate = 0, int roomId = 0,string model = "",DateTime? startTime = null,string request = "")
{
try
{
Point[0] = Math.Round(Point[0], 6, MidpointRounding.AwayFromZero);
Point[1] = Math.Round(Point[1], 6, MidpointRounding.AwayFromZero);
var model = new MsgModel
var msgmodel = new MsgModel
{
RouteId = RouteId,
MemberId = MemberId,
@@ -309,11 +342,13 @@ namespace Assets.Scenes.Ride.Scripts
Competitionid = competitionId,
Saved = saved,
FrameRate = frameRate,
RoomId = roomId,//房间Id
StartTime = startTime
RoomId = roomId,
Model = model,//是否在对战房间列表或者房间内
StartTime = startTime,
Request = request,
//V = 1
};
var sendBytes = Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(model));
var sendBytes = Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(msgmodel));
_udpService.Send(sendBytes, sendBytes.Length);
}
@@ -331,7 +366,7 @@ namespace Assets.Scenes.Ride.Scripts
if (MapUDPService._udpService == null) return;
for (int i = 0; i < 3; i++)
{
Send(0, App.CurrentUser.Id, new double[] { 1, 1 }, true, isExit);
Send(0, App.CurrentUser.Id, new double[] { 1, 1 }, true, isExit,model:App.Model);
}
_udpService.Close();
@@ -417,6 +452,13 @@ namespace Assets.Scenes.Ride.Scripts
return result;
}
public static List<OnlineUser> GetOnlineUsers(int routeId,int roomId)
{
var result = onlineUserHelper.OnlineUsers.Where(u => u.RoomId == roomId && u.RouteId == routeId).ToList();
return result;
}
public static List<OnlineUser> GetAllOnlineUserList()
{
var result = onlineUserHelper.OnlineUsers.Where(c => !c.IsSelf).ToList();
@@ -438,12 +480,12 @@ namespace Assets.Scenes.Ride.Scripts
return result;
}
public static int GetNearRiderCount()
public static int GetNearRiderCount(int roomId = 0)
{
int count = 0;
try
{
count = onlineUserHelper.OnlineUsers.Where(c => (c.Point[0] != 0 && c.Point[1] != 0) && (c.Point[0] != -1 && c.Point[1] != -1)).Count();
count = onlineUserHelper.OnlineUsers.Where(c => (c.Point[0] != 0 && c.Point[1] != 0) && (c.Point[0] != -1 && c.Point[1] != -1) && c.RoomId == roomId).Count();
}
catch (Exception)
{
@@ -469,13 +511,13 @@ namespace Assets.Scenes.Ride.Scripts
/// 获取附近的人(当前在线的所有人)
/// </summary>
/// <returns></returns>
public static IList<NearRiderModel> GetNearRiderData(int pageIndex, int pageSize = 5, double[] point = null)
public static IList<NearRiderModel> GetNearRiderData(int pageIndex, int pageSize = 5, double[] point = null,int roomId = 0)
{
if (point == null) return null;
try
{
var dict = new List<System.Tuple<double, OnlineUser>>();
var allOnlineUsers = onlineUserHelper.OnlineUsers.Where(c => c.CompetitionId == 0);
var allOnlineUsers = onlineUserHelper.OnlineUsers.Where(c => c.CompetitionId == 0 && c.RoomId == roomId);
foreach (var item in allOnlineUsers)
{
if (item.Id == App.CurrentUser.Id)
@@ -580,7 +622,6 @@ namespace Assets.Scenes.Ride.Scripts
}
user.LastActiveTime = DateTime.Now;
user.RouteId = item.RouteId;
user.Point = item.Point;
user.IsCompleted = item.IsCompleted;
//user.exit = item.exit;
@@ -606,8 +647,7 @@ namespace Assets.Scenes.Ride.Scripts
user.IsWatcher = user.WatcherList.Contains(item.MemberId);
user.CreateTime = DateTime.MaxValue;
user.FrameRate = item.FrameRate;
user.Room = item.Room;
user.RoomDetail = item.RoomDetail;
user.RoomId = (item.RoomId ?? 0);
}
else
{
@@ -12,6 +12,7 @@ using System.Text;
using System.Threading;
using System.Threading.Tasks;
using NetCoreServer;
using Assets.Scripts.Apis.Models;
namespace Assets.Scenes.Ride.Scripts.Network
{
@@ -46,7 +47,7 @@ namespace Assets.Scenes.Ride.Scripts.Network
if (_tcpClient == null) return;
if (_tcpClient.IsConnected == false) return;
//_tcpClient.WriteLine(System.Text.Encoding.ASCII.GetString(dgram));
var txt = System.Text.Encoding.ASCII.GetString(dgram);
var txt = System.Text.Encoding.UTF8.GetString(dgram);
//Debug.WriteLine("发送:"+txt);
try
{
@@ -199,28 +200,29 @@ namespace Assets.Scenes.Ride.Scripts.Network
//房间信息
if (t.IndexOf('g') == 0)
{
RoomModel room = null;
var x = t.Replace("g{", "").Replace("}", "");
room = RoomModel.Parse(x);
//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:]
var li = GameRoomModel.Parse(x);
foreach (var i in list)
{
i.Room = room;
i.RoomList = li;
}
}
//房间用户信息
if (t.IndexOf('d') == 0)
//对战骑行场景中信息
if (t.IndexOf('e') == 0)
{
var g = t.Replace("d{", "").Replace("}", "");
var g = t.Replace("e{", "").Replace("}", "");
var glist = g.Split('|');
foreach (var i in glist)
{
var gameRoom = RoomDetailModel.Parse(i);
var owner = list.Where(c => c.MemberId == gameRoom.UserId).FirstOrDefault();
if (string.IsNullOrEmpty(i))
continue;
var extendInfo = ExtendInfo.Parse(i);
var owner = list.Where(c => c.MemberId == extendInfo.UserId).FirstOrDefault();
if (owner != null)
{
owner.RoomDetail = gameRoom;
owner.RoomId = extendInfo.RoomId;
}
}
}