forked from powerfun/udpservice
超时时间改为20s
This commit is contained in:
parent
163eb686f0
commit
01aa33ba94
@ -53,7 +53,7 @@ namespace OnlineUserPool.Model
|
||||
{
|
||||
get
|
||||
{
|
||||
return DateTime.Now.Subtract(LastActiveTime).TotalSeconds > 60;
|
||||
return DateTime.Now.Subtract(LastActiveTime).TotalSeconds > 20;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -64,11 +64,6 @@ namespace OnlineUserPool.Model
|
||||
set => SetProperty(ref _TotalTicks, value);
|
||||
}
|
||||
|
||||
///// <summary>
|
||||
///// 需要展示的属性
|
||||
///// </summary>
|
||||
//public string Prop { get; set; }
|
||||
|
||||
private double _PreDistance = 0;
|
||||
public double PreDistance {
|
||||
get => _PreDistance;
|
||||
@ -83,8 +78,6 @@ namespace OnlineUserPool.Model
|
||||
|
||||
//public bool IsVirtual { get; set; }
|
||||
|
||||
//public double Power { get; set; }
|
||||
//public double Weight { get; set; }
|
||||
/// <summary>
|
||||
/// 功率体重比
|
||||
/// </summary>
|
||||
@ -106,12 +99,10 @@ namespace OnlineUserPool.Model
|
||||
set => SetProperty(ref _Saved, value);
|
||||
}
|
||||
|
||||
//public bool ShowVirtual { get; set; }
|
||||
|
||||
private int _FrameRate = 0;
|
||||
public int FrameRate {
|
||||
get => _FrameRate;
|
||||
set => SetProperty(ref _FrameRate, value);
|
||||
private int _Frame = 0;
|
||||
public int Frame {
|
||||
get => _Frame;
|
||||
set => SetProperty(ref _Frame, value);
|
||||
}
|
||||
|
||||
private int _RoomId = 0;
|
||||
@ -133,18 +124,35 @@ namespace OnlineUserPool.Model
|
||||
get => _Model;
|
||||
set => SetProperty(ref _Model, value);
|
||||
}
|
||||
|
||||
private string _UserName;
|
||||
public string UserName {
|
||||
get => _UserName;
|
||||
set => SetProperty(ref _UserName, value);
|
||||
}
|
||||
|
||||
private string _RouteName;
|
||||
public string RouteName {
|
||||
get => _RouteName;
|
||||
set => SetProperty(ref _RouteName, value);
|
||||
}
|
||||
|
||||
private string _WxHeadImage;
|
||||
public string WxHeadImage {
|
||||
get => _WxHeadImage;
|
||||
set => SetProperty(ref _WxHeadImage, value);
|
||||
}
|
||||
|
||||
public string ToString(int v)
|
||||
public override string ToString()
|
||||
{
|
||||
if (v == 2)
|
||||
{
|
||||
return $"{ RouteId },{ MemberId },{ string.Join(":", Point) },{ Convert.ToInt32(IsCompleted) },{ Speed },{ PreDistance },{ EndDistance },{ WeightKg },{ CompetitionId },{ Convert.ToInt32(Saved)},{ Power} ,{ HeartRate},{ Cadence},{ TotalTicks},{ FrameRate},{RoomId},{StartTime}";
|
||||
}
|
||||
return $"{ RouteId },{ MemberId },{ string.Join(":", Point) },{ Convert.ToInt32(IsCompleted) },{ Speed },{ PreDistance },{ EndDistance },{ WeightKg },{ CompetitionId },{ Convert.ToInt32(Saved)}";
|
||||
return $"{RouteName},{RouteId},{UserName},{MemberId},{WxHeadImage},{string.Join(":", Point)},{Speed},{PreDistance},{EndDistance},{WeightKg},{Power},{HeartRate},{Cadence},{TotalTicks},{Convert.ToInt32(IsCompleted)},{Frame}";
|
||||
}
|
||||
|
||||
public void Update(MsgModel model)
|
||||
{
|
||||
this.RouteName = model.RouteName;
|
||||
this.UserName = model.UserName;
|
||||
this.WxHeadImage = model.WxHeadImage;
|
||||
this.CompetitionId = model.CompetitionId;
|
||||
this.EndDistance = model.EndDistance;
|
||||
this.HeartRate = model.HeartRate;
|
||||
@ -159,7 +167,7 @@ namespace OnlineUserPool.Model
|
||||
this.HeartRate = model.HeartRate;
|
||||
this.Cadence = model.Cadence;
|
||||
this.TotalTicks = model.TotalTicks;
|
||||
this.FrameRate = model.FrameRate;
|
||||
this.Frame = model.Frame;
|
||||
this.RoomId = model.RoomId;
|
||||
this.StartTime = model.StartTime;
|
||||
this.Request = model.Request;
|
||||
|
||||
@ -72,17 +72,9 @@ namespace OnlineUserPool.ViewModels
|
||||
|
||||
private const int ROOM_TIME_OUT = 60;
|
||||
private const int TOTAL_PROCESS = 100;
|
||||
//private IService _udpService;
|
||||
|
||||
public MainWindowViewModel()
|
||||
{
|
||||
//初始化对战房间信息
|
||||
var r = GameRoomHelper.Get();
|
||||
foreach (var item in r)
|
||||
{
|
||||
RoomList.Add(item);
|
||||
}
|
||||
RoomMaxId = GameRoomHelper.GetMaxId();
|
||||
//初测程序关闭事件
|
||||
Application.Current.MainWindow.Closing += MainWindow_Closing;
|
||||
Title = $"{ IPAddress.Any }:{ ConfigHelp.UdpPort }";
|
||||
@ -118,8 +110,7 @@ namespace OnlineUserPool.ViewModels
|
||||
|
||||
private void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
||||
{
|
||||
GameRoomHelper.Set(RoomList.ToList());
|
||||
GameRoomHelper.SetMaxId(RoomMaxId);
|
||||
|
||||
}
|
||||
|
||||
private void ReceivedData(IPEndPoint remoteIpEndPoint, ReceiveModel msg, IService service)
|
||||
@ -192,12 +183,7 @@ namespace OnlineUserPool.ViewModels
|
||||
client.IsWatch = msg1.IsWatch;
|
||||
}
|
||||
break;
|
||||
//GameRoom
|
||||
case 3:
|
||||
{
|
||||
HandleGameRoom(msg);
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -206,12 +192,6 @@ namespace OnlineUserPool.ViewModels
|
||||
{
|
||||
Ticks++;
|
||||
NotifyClient();
|
||||
//定时保存当前房间信息
|
||||
if (Ticks % 5 == 0)
|
||||
{
|
||||
GameRoomHelper.SetMaxId(RoomMaxId);
|
||||
GameRoomHelper.Set(RoomList.ToList());
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleGameRoomSaved(MsgModel msg1)
|
||||
@ -248,392 +228,6 @@ namespace OnlineUserPool.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleGameRoom(ReceiveModel msg)
|
||||
{
|
||||
//收
|
||||
switch (msg.SubType)
|
||||
{
|
||||
case 0: HandleCreateGameRoom(msg); break;
|
||||
case 1: HandleJoinGameRoom(msg); break;
|
||||
case 2: HandleGameRoomReadyStatus(msg); break;
|
||||
case 3: HandleGameRoomStart(msg); break;
|
||||
case 4: HandleGameRoomKick(msg); break;
|
||||
case 5: HandleGameRoomProcess(msg); break;
|
||||
case 6: HandleQueryGameRoomList(msg); break;//查询房间列表
|
||||
default:
|
||||
break;
|
||||
}
|
||||
switch (msg.SubType)
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4: BroadCastGameRoomList(); break;
|
||||
}
|
||||
}
|
||||
|
||||
private void SendGameRoomMessage(RoomModel gameRoom)
|
||||
{
|
||||
if (gameRoom == null)
|
||||
return;
|
||||
var list = new List<MsgModel>();
|
||||
list.Add(new MsgModel()
|
||||
{
|
||||
V = 2,
|
||||
Point = new double[] { 0d, 0d },
|
||||
});
|
||||
string ss = "";
|
||||
if (gameRoom.List != null && gameRoom.List.Count > 0)
|
||||
{
|
||||
ss = string.Join("|", gameRoom.List.Select(c => c.ToString()));
|
||||
}
|
||||
int total = 0;
|
||||
var G = $"{total}l[{gameRoom},detail{{{ss}}}]";
|
||||
var temp = string.Join("|", list.Select(m => m.ToString(2))) + "|";
|
||||
var strV21 = $"l{{{ temp }}};g{{{ G}}};";
|
||||
var ddd = new NetworkData(strV21);
|
||||
|
||||
var needList = Clients.Where(c => c.RoomId == gameRoom.RoomId).ToList();
|
||||
foreach (var client in needList)
|
||||
{
|
||||
bool isZip = client.Encoding == "gzip";
|
||||
client.Service.Send(ddd.GetBytes(isZip), ddd.GetBytes(isZip).Length, client.IPEndPoint);
|
||||
client.Request = "";
|
||||
}
|
||||
}
|
||||
|
||||
private void BroadCastGameRoomList()
|
||||
{
|
||||
//广播
|
||||
var needlist = Clients.Where(c => c.Model != null && c.Model.Equals("GameRoom") && !string.IsNullOrEmpty(c.Request));
|
||||
|
||||
var list = new List<MsgModel>();
|
||||
list.Add(new MsgModel()
|
||||
{
|
||||
V = 2,
|
||||
Point = new double[] { 0d, 0d },
|
||||
});
|
||||
var temp = string.Join("|", list.Select(m => m.ToString(2))) + "|";
|
||||
foreach (var item in needlist)
|
||||
{
|
||||
var G = GameRoomMessageHandler(item);
|
||||
var strV21 = $"l{{{ temp }}};g{{{G}}};";
|
||||
var ddd = new NetworkData(strV21);
|
||||
bool isZip = item.Encoding == "gzip";
|
||||
item.Service.Send(ddd.GetBytes(isZip), ddd.GetBytes(isZip).Length, item.IPEndPoint);
|
||||
}
|
||||
}
|
||||
|
||||
//查询房间列表
|
||||
private void HandleQueryGameRoomList(ReceiveModel msg)
|
||||
{
|
||||
var query = msg as QueryGameRoomListCommand;
|
||||
var needSend = Clients.Where(c => c.MemberId == query.UserId).FirstOrDefault();
|
||||
if (needSend == null)
|
||||
return;
|
||||
|
||||
needSend.Request = $"List/{query.PageIndex}/{query.PageSize}/{query.Name}";
|
||||
|
||||
var list = new List<MsgModel>();
|
||||
list.Add(new MsgModel()
|
||||
{
|
||||
V = 2,
|
||||
Point = new double[] { 0d, 0d },
|
||||
});
|
||||
|
||||
var temp = string.Join("|", list.Where(m => m.CompetitionId == needSend.Competitionid).Select(m => m.ToString(2))) + "|";
|
||||
List<RoomModel> rooms;
|
||||
if (!string.IsNullOrEmpty(query.Name))
|
||||
{
|
||||
rooms = RoomList.ToList().Where(c => c.Name.Contains(query.Name) || c.RoomId.ToString() == query.Name).OrderBy(c => c.Status).ThenByDescending(c => c.CreateTime).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
rooms = RoomList.ToList().OrderBy(c => c.Status).ThenByDescending(c => c.CreateTime).ToList();
|
||||
}
|
||||
//计算总页数
|
||||
int total = 0;
|
||||
if (query.PageSize != 0)
|
||||
{
|
||||
total = rooms.Count() / query.PageSize;
|
||||
total = rooms.Count() % query.PageSize == 0 ? total : total + 1;
|
||||
}
|
||||
rooms = rooms.Skip(query.PageIndex * query.PageSize).Take(query.PageSize).ToList();
|
||||
string roomInfo = $"{total}l";
|
||||
foreach (var r in rooms)
|
||||
{
|
||||
string ss = "";
|
||||
if (r.List != null && r.List.Count > 0)
|
||||
{
|
||||
ss = string.Join("|", r.List.Select(c => c.ToString()));
|
||||
}
|
||||
roomInfo += $"[{r.ToString()},detail{{{ss}}}]";
|
||||
}
|
||||
|
||||
var strV21 = $"l{{{ temp }}};g{{{roomInfo}}};";
|
||||
var ddd = new NetworkData(strV21);
|
||||
bool isZip = needSend.Encoding == "gzip";
|
||||
needSend.Service.Send(ddd.GetBytes(isZip), ddd.GetBytes(isZip).Length, needSend.IPEndPoint);
|
||||
}
|
||||
|
||||
//创建房间
|
||||
private void HandleCreateGameRoom(ReceiveModel msg)
|
||||
{
|
||||
var createMsg = msg as CreateGameRoomCommand;
|
||||
|
||||
RemoveOtherRoomInfo(createMsg.UserId, createMsg.Id);
|
||||
|
||||
var roomId = RoomMaxId + 1;
|
||||
var list = new List<RoomDetailModel>();
|
||||
list.Add(new RoomDetailModel()
|
||||
{
|
||||
RoomId = roomId,
|
||||
UserId = createMsg.UserId,
|
||||
JoinAt = DateTime.Now.ToUniversalTime(),
|
||||
IsOwner = true,
|
||||
});
|
||||
|
||||
var room = new RoomModel
|
||||
{
|
||||
RoomId = roomId,
|
||||
Name = createMsg.Name,
|
||||
Password = createMsg.Password,
|
||||
CloseTime = createMsg.CloseTime,
|
||||
CreateTime = createMsg.CreateTime,
|
||||
MapRouteId = createMsg.RouteId,
|
||||
MapRouteName = createMsg.MapRouteName,
|
||||
AltitudeGraph = createMsg.AltitudeGraph,
|
||||
MaxMembers = createMsg.MaxMembers,
|
||||
UserId = createMsg.UserId,
|
||||
AverageGrade = createMsg.AverageGrade,
|
||||
TotalClimb = createMsg.TotalClimb,
|
||||
Distance = createMsg.Distance,
|
||||
EnableAR = createMsg.EnableAR,
|
||||
Enable3D = createMsg.Enable3D,
|
||||
FileName = createMsg.FileName,
|
||||
FileUrl = createMsg.FileUrl,
|
||||
IsLock = !string.IsNullOrEmpty(createMsg.Password),
|
||||
List = list,
|
||||
};
|
||||
var mine = Clients.FirstOrDefault(c => c.MemberId == createMsg.UserId);
|
||||
if (mine != null)
|
||||
{
|
||||
mine.RoomId = room.RoomId;
|
||||
}
|
||||
RoomList.Add(room);
|
||||
RoomMaxId = room.RoomId;
|
||||
}
|
||||
|
||||
//先移除当前用户在其他房间的信息(考虑服务器重启的时候没有响应客户端退出命令)
|
||||
private void RemoveOtherRoomInfo(int userId, int roomId)
|
||||
{
|
||||
var preRoom = RoomList.ToList().FirstOrDefault(c => c.Status == 0 && c.List.Any(a => a.UserId == userId) && c.RoomId != roomId);
|
||||
if (preRoom != null)
|
||||
{
|
||||
var needRemove = preRoom.List.FirstOrDefault(c => c.UserId == userId && c.Saved == false);
|
||||
preRoom.List.Remove(needRemove);
|
||||
if (preRoom.List.Count == 0)
|
||||
{
|
||||
RoomList.Remove(preRoom);
|
||||
}
|
||||
//发送给这个房间的人
|
||||
SendGameRoomMessage(preRoom);
|
||||
}
|
||||
}
|
||||
|
||||
//处理当前用户加入房间
|
||||
private void HandleJoinGameRoom(ReceiveModel msg)
|
||||
{
|
||||
var msg1 = msg as JoinGameRoomCommand;
|
||||
RemoveOtherRoomInfo(msg1.UserId,msg1.RoomId);
|
||||
var room = RoomList.ToList().FirstOrDefault(c => c.RoomId == msg1.RoomId);
|
||||
var client = Clients.FirstOrDefault(n => n.MemberId.Equals(msg1.UserId));
|
||||
//更新房间信息
|
||||
if (room != null)
|
||||
{
|
||||
var list = room.List;
|
||||
var member = list.FirstOrDefault(c => c.UserId == msg1.UserId);
|
||||
if (member != null)
|
||||
{
|
||||
member.JoinAt = msg1.JoinAt;
|
||||
}
|
||||
else
|
||||
{
|
||||
//如果房间人数已经满了就拒绝加入
|
||||
var currentCount = room.List.Count;
|
||||
if (currentCount + 1 <= room.MaxMembers)
|
||||
{
|
||||
list.Add(new RoomDetailModel
|
||||
{
|
||||
UserId = msg1.UserId,
|
||||
JoinAt = msg1.JoinAt,
|
||||
RoomId = msg1.RoomId
|
||||
});
|
||||
if (client != null)
|
||||
{
|
||||
client.RoomId = room.RoomId;
|
||||
client.Request = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//发送当前房间的信息给当前房间内的人
|
||||
SendGameRoomMessage(room);
|
||||
}
|
||||
|
||||
//处理当前用户准备状态
|
||||
private void HandleGameRoomReadyStatus(ReceiveModel msg)
|
||||
{
|
||||
var msg1 = msg as GameRoomReadyCommand;
|
||||
var room = RoomList.ToList().Where(c => c.RoomId == msg1.RoomId).FirstOrDefault();
|
||||
if (room != null)
|
||||
{
|
||||
var list = room.List;
|
||||
var member = list.Where(c => c.UserId == msg1.UserId).FirstOrDefault();
|
||||
if (member != null)
|
||||
{
|
||||
member.Status = msg1.Status;
|
||||
}
|
||||
}
|
||||
//发送信息给当前房间内的人
|
||||
SendGameRoomMessage(room);
|
||||
}
|
||||
|
||||
//处理当前用户准备状态
|
||||
private void HandleGameRoomStart(ReceiveModel msg)
|
||||
{
|
||||
var msg1 = msg as GameRoomStartCommand;
|
||||
var client = Clients.FirstOrDefault(c => c.MemberId == msg1.UserId);
|
||||
if (client != null)
|
||||
{
|
||||
client.RoomId = msg1.RoomId;
|
||||
}
|
||||
var room = RoomList.ToList().FirstOrDefault(c => c.RoomId == msg1.RoomId);
|
||||
if (room != null)
|
||||
{
|
||||
room.Status = 1;
|
||||
room.StatusChangedTime = DateTime.Now;
|
||||
}
|
||||
//发送信息给当前房间内的人
|
||||
SendGameRoomMessage(room);
|
||||
}
|
||||
|
||||
//处理房间踢人的操作
|
||||
private void HandleGameRoomKick(ReceiveModel msg)
|
||||
{
|
||||
var msg1 = msg as GameRoomKickCommand;
|
||||
var room = RoomList.ToList().FirstOrDefault(c => c.RoomId == msg1.RoomId);
|
||||
if (room != null && room.Status !=2)
|
||||
{
|
||||
var list = room.List;
|
||||
var needRemove = list.FirstOrDefault(c => c.UserId == msg1.UserId);
|
||||
if (needRemove != null)
|
||||
{
|
||||
list.Remove(needRemove);
|
||||
//如果当前是房主退出房间,房主替换成其他人, 房主客户端中断也算
|
||||
if (needRemove.IsOwner && list.Any())
|
||||
{
|
||||
var newOwner = list.FirstOrDefault();
|
||||
newOwner.IsOwner = true;
|
||||
room.UserId = newOwner.UserId;
|
||||
}
|
||||
}
|
||||
//房间没有产生记录且人数为0,删除房间
|
||||
if (!room.Saved && !list.Any())
|
||||
{
|
||||
RoomList.Remove(room);
|
||||
}
|
||||
|
||||
//发送信息给当前房间内的人
|
||||
SendGameRoomMessage(room);
|
||||
|
||||
var mine = Clients.FirstOrDefault(c => c.MemberId == msg1.UserId);
|
||||
if (mine != null)
|
||||
{
|
||||
mine.RoomId = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//处理房间内人loading进度
|
||||
private void HandleGameRoomProcess(ReceiveModel msg)
|
||||
{
|
||||
var msg1 = msg as GameRoomProcessCommand;
|
||||
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.FirstOrDefault(c => c.UserId == msg1.UserId);
|
||||
if (player != null)
|
||||
{
|
||||
player.Process = msg1.Process;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
room.StartTime = now.AddSeconds(10).ToUniversalTime();
|
||||
}
|
||||
if (client != null)
|
||||
{
|
||||
client.RoomId = room.RoomId;
|
||||
}
|
||||
SendGameRoomMessage(room);
|
||||
}
|
||||
}
|
||||
|
||||
private string GameRoomMessageHandler(HostModel item)
|
||||
{
|
||||
//如果当前Client有请求房间列表信息,发送房间列表信息
|
||||
var G = "";
|
||||
if (!string.IsNullOrEmpty(item.Request))
|
||||
{
|
||||
var param = item.Request.Split('/');
|
||||
var pageInfo = param[0];
|
||||
if (pageInfo.Equals("List"))
|
||||
{
|
||||
var pageIndex = Convert.ToInt32(param[1]);
|
||||
var pageSize = Convert.ToInt32(param[2]);
|
||||
var querName = param[3].ToString();
|
||||
List<RoomModel> rooms;
|
||||
|
||||
if (!string.IsNullOrEmpty(querName))
|
||||
{
|
||||
rooms = RoomList.ToList().Where(c => c.Name.Contains(querName) || c.RoomId.ToString() == querName).OrderBy(c => c.Status).ThenByDescending(c => c.CreateTime).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
rooms = RoomList.ToList().OrderBy(c => c.Status).ThenByDescending(c => c.CreateTime).ToList();
|
||||
}
|
||||
//计算总页数
|
||||
int total = 0;
|
||||
if (pageSize != 0)
|
||||
{
|
||||
total = rooms.Count() / pageSize;
|
||||
total = rooms.Count() % pageSize == 0 ? total : total + 1;
|
||||
}
|
||||
G = $"{total}l";
|
||||
rooms = rooms.Skip(pageIndex * pageSize).Take(pageSize).ToList();
|
||||
|
||||
foreach (var r in rooms)
|
||||
{
|
||||
string ss = "";
|
||||
if (r.List != null && r.List.Count > 0)
|
||||
{
|
||||
ss = string.Join("|", r.List.Select(c => c.ToString()));
|
||||
}
|
||||
G += $"[{r.ToString()},detail{{{ss}}}]";
|
||||
}
|
||||
}
|
||||
}
|
||||
return G;
|
||||
}
|
||||
|
||||
private void NotifyClient()
|
||||
{
|
||||
try
|
||||
@ -772,7 +366,7 @@ namespace OnlineUserPool.ViewModels
|
||||
m.WeightKg,
|
||||
Competitionid = m.CompetitionId,
|
||||
m.Saved,
|
||||
m.FrameRate,
|
||||
m.Frame,
|
||||
}));
|
||||
var data = Encoding.ASCII.GetBytes(jsonString);
|
||||
item.Service.Send(data, data.Length, item.IPEndPoint);
|
||||
@ -780,46 +374,13 @@ namespace OnlineUserPool.ViewModels
|
||||
continue;
|
||||
}
|
||||
|
||||
if (item.V == 1 && item.Service is UdpService)
|
||||
{
|
||||
sb.Clear();
|
||||
|
||||
foreach (var obj in list)
|
||||
{
|
||||
sb.Append(obj.ToString(1));
|
||||
sb.Append("|");
|
||||
}
|
||||
|
||||
var strV1 = sb.ToString();
|
||||
var data1ForUdp = new NetworkData(strV1.Last() == '|' ? strV1.Substring(0, strV1.Length - 1) : strV1);
|
||||
item.Service.Send(data1ForUdp.GetBytes(), data1ForUdp.GetBytes().Length, item.IPEndPoint);
|
||||
data1ForUdp = null;
|
||||
}
|
||||
|
||||
if(item.Service is TcpService)
|
||||
{
|
||||
NetworkData networkData = null;
|
||||
if (item.V == 1)
|
||||
{
|
||||
sb.Clear();
|
||||
foreach (var obj in list)
|
||||
{
|
||||
sb.Append(obj.ToString(1));
|
||||
sb.Append("|");
|
||||
}
|
||||
|
||||
var strV1 = sb.ToString();
|
||||
var data1 = new NetworkData(strV1);
|
||||
networkData = data1;
|
||||
}
|
||||
else if (item.V == 2)
|
||||
if (item.V == 2)
|
||||
{
|
||||
networkData = HandleGzipNetworkData(list,item);
|
||||
}
|
||||
else
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
bool isZip = item.Encoding == "gzip";
|
||||
item.Service.Send(networkData.GetBytes(isZip), networkData.GetBytes(isZip).Length, item.IPEndPoint);
|
||||
@ -842,7 +403,7 @@ namespace OnlineUserPool.ViewModels
|
||||
{
|
||||
sb.Clear();
|
||||
sb.Append("l{");
|
||||
var runtimeList = list.Where(m => m.CompetitionId == item.Competitionid).Select(m => m.ToString(2)).ToList();
|
||||
var runtimeList = list.Where(m => m.CompetitionId == item.Competitionid).Select(m => m.ToString()).ToList();
|
||||
foreach (var obj in runtimeList)
|
||||
{
|
||||
sb.Append(obj);
|
||||
@ -868,10 +429,10 @@ namespace OnlineUserPool.ViewModels
|
||||
|
||||
sb.Append("};e{");
|
||||
|
||||
var errorList = list.Where(c => c.RoomId > 0 || c.FrameRate > 0).ToList();
|
||||
var errorList = list.Where(c => c.RoomId > 0 || c.Frame > 0).ToList();
|
||||
foreach (var c in errorList)
|
||||
{
|
||||
sb.Append($"{c.MemberId},{c.RoomId},{c.FrameRate},{c.TotalTicks}");
|
||||
sb.Append($"{c.MemberId},{c.RoomId},{c.Frame},{c.TotalTicks}");
|
||||
sb.Append("|");
|
||||
}
|
||||
|
||||
@ -887,29 +448,6 @@ namespace OnlineUserPool.ViewModels
|
||||
return data2;
|
||||
}
|
||||
|
||||
private void GameRoomDisConnectHandler(HostModel client)
|
||||
{
|
||||
////如果是在对战房间或者对战列表掉线执行,骑行阶段断开连接不移除房间信息
|
||||
//if (client.Model != null && !client.Model.Equals("GameRoom"))
|
||||
// return;
|
||||
|
||||
RoomList.ToList().ForEach(o => {
|
||||
if (o.List != null && o.Status != 2)
|
||||
{
|
||||
var needRemove = o.List.FirstOrDefault(c => c.UserId == client.MemberId && c.Saved == false);
|
||||
o.List.Remove(needRemove);
|
||||
}
|
||||
});
|
||||
|
||||
var needRemoveList = RoomList.ToList().Where(c => c.List.Count == 0 && c.Status != 2).ToList();
|
||||
foreach (var item in needRemoveList)
|
||||
{
|
||||
RoomList.Remove(item);
|
||||
}
|
||||
|
||||
BroadCastGameRoomList();
|
||||
}
|
||||
|
||||
void WriteLine(string str)
|
||||
{
|
||||
//Debug.WriteLine(str);
|
||||
@ -942,7 +480,6 @@ namespace OnlineUserPool.ViewModels
|
||||
if (client != null)
|
||||
{
|
||||
RemoveClient(client);
|
||||
GameRoomDisConnectHandler(client);
|
||||
}
|
||||
}
|
||||
catch(Exception ex)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user