RDP-Packing fix
This commit is contained in:
parent
5f902bed7a
commit
93125d97cd
3 changed files with 35 additions and 30 deletions
|
@ -19,7 +19,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
|
|||
{
|
||||
public class ClientNetworkManager
|
||||
{
|
||||
private int port = 0;
|
||||
private int PlayerId;
|
||||
private IPEndPoint endPoint;
|
||||
private IPEndPoint sendingEP;
|
||||
private Socket socket;
|
||||
|
@ -71,29 +71,32 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
|
|||
JToken token = JToken.FromObject(jObj);
|
||||
JToken updateDatas = token["updateDatas"];
|
||||
Datagramm Dgramm = new Datagramm();
|
||||
if (PlayerId == 0)
|
||||
{
|
||||
PlayerId = token["PlayerId"].ToObject<int>();
|
||||
}
|
||||
Dgramm.isImportant = token["isImportant"].ToObject<bool>();
|
||||
Dgramm.DatagrammId = token["DatagrammId"].ToObject<int>();
|
||||
Dgramm.updateDatas = GetSentUpdates(token["updateDatas"]);
|
||||
if (Dgramm.isImportant)
|
||||
{
|
||||
if (Dgramm.DatagrammId == currentServerDatagrammId + 1)
|
||||
{
|
||||
ExecuteDatagramm(Dgramm);
|
||||
currentServerDatagrammId++;
|
||||
Dgramm.updateDatas = GetSentUpdates(token["updateDatas"]);
|
||||
ExecuteDatagramm(Dgramm);
|
||||
CheckDatagramm();
|
||||
}
|
||||
else if (Dgramm.DatagrammId > currentServerDatagrammId + 1)
|
||||
else if (Dgramm.DatagrammId > currentServerDatagrammId + 1 &&
|
||||
waitingDatagramm.Find(x => x.DatagrammId == Dgramm.DatagrammId) == null)
|
||||
{
|
||||
Dgramm.updateDatas = GetSentUpdates(token["updateDatas"]);
|
||||
waitingDatagramm.Add(Dgramm);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine("Апдейты " + Dgramm.DatagrammId + ", уже приходили, пропускаем");
|
||||
}
|
||||
SendAcknowledgement(Dgramm.DatagrammId);
|
||||
}
|
||||
else
|
||||
{
|
||||
Dgramm.updateDatas = GetSentUpdates(token["updateDatas"]);
|
||||
ExecuteDatagramm(Dgramm);
|
||||
}
|
||||
|
||||
|
@ -162,7 +165,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
|
|||
public void SendAcknowledgement(int DatagrammId)
|
||||
{
|
||||
|
||||
Datagramm Dgramm = new Datagramm() { DatagrammId = DatagrammId };
|
||||
Datagramm Dgramm = new Datagramm() { DatagrammId = DatagrammId, PlayerId = PlayerId };
|
||||
string data = System.Text.Json.JsonSerializer.Serialize(Dgramm);
|
||||
byte[] buffer = Encoding.UTF8.GetBytes(data);
|
||||
socket.SendTo(buffer, sendingEP);
|
||||
|
@ -173,8 +176,9 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
|
|||
Datagramm orderedDgramm = waitingDatagramm.Find(x => x.DatagrammId == currentServerDatagrammId + 1);
|
||||
while (orderedDgramm != null)
|
||||
{
|
||||
ExecuteDatagramm(orderedDgramm);
|
||||
currentServerDatagrammId++;
|
||||
ExecuteDatagramm(orderedDgramm);
|
||||
waitingDatagramm.Remove(orderedDgramm);
|
||||
orderedDgramm = waitingDatagramm.Find(x => x.DatagrammId == currentServerDatagrammId + 1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
|
|||
public class ServerNetworkManager
|
||||
{
|
||||
private Socket socket;
|
||||
private IPAddress ip = IPAddress.Parse("127.0.0.1");
|
||||
private IPAddress ip;
|
||||
private bool isMultiplayer;
|
||||
//Player Id to Player endPoint
|
||||
private List<IPEndPoint> clientsEP;
|
||||
|
@ -28,9 +28,8 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
|
|||
private List<UpdateData> commonUpdates;
|
||||
private List<UpdateData> importantUpdates;
|
||||
private List<Datagramm> sendedData;
|
||||
private List<int> arrivingDataId = new List<int>();
|
||||
private List<Datagramm> arrivingDataId;
|
||||
private int currentDatagrammId = 1;
|
||||
private int nextPlayerId = 0;
|
||||
public delegate void OnDataSend(string data);
|
||||
public event OnDataSend GetDataSend; // event
|
||||
Thread serverThread;
|
||||
|
@ -48,6 +47,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
|
|||
commonUpdates = new List<UpdateData>();
|
||||
importantUpdates = new List<UpdateData>();
|
||||
sendedData = new List<Datagramm>();
|
||||
arrivingDataId = new List<Datagramm>();
|
||||
|
||||
GetDataSend += AnalyzeData;
|
||||
|
||||
|
@ -101,37 +101,37 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
|
|||
#endregion
|
||||
if (arrivingDataId.Count != 0)
|
||||
{
|
||||
List<int> actualArrivingId = arrivingDataId;
|
||||
List<Datagramm> actualArrivingId = arrivingDataId;
|
||||
for (int i = 0; i < actualArrivingId.Count; i++)
|
||||
{
|
||||
sendedData.Remove(sendedData.Find(x => x.DatagrammId == actualArrivingId[i]));
|
||||
sendedData.Remove(sendedData.Find(x => x.DatagrammId == actualArrivingId[i].DatagrammId
|
||||
&& x.PlayerId == actualArrivingId[i].PlayerId));
|
||||
}
|
||||
arrivingDataId.Clear();
|
||||
}
|
||||
List<UpdateData> dataToSend;
|
||||
if (importantUpdates.Count != 0)
|
||||
if (importantUpdates.Count != 0 || sendedData.Count != 0)
|
||||
{
|
||||
Datagramm impDgramm = new Datagramm();
|
||||
impDgramm.DatagrammId = currentDatagrammId;
|
||||
currentDatagrammId++;
|
||||
|
||||
dataToSend = new List<UpdateData>();
|
||||
for (int i = 0; i < 200 && i < importantUpdates.Count; i++)
|
||||
dataToSend.Add(importantUpdates[i]);
|
||||
|
||||
impDgramm.updateDatas = dataToSend;
|
||||
impDgramm.isImportant = true;
|
||||
sendedData.Add(impDgramm);
|
||||
foreach (Datagramm Dgramm in sendedData)
|
||||
for (int i = 0; i < clientsEP.Count; i++)
|
||||
{
|
||||
|
||||
string impData = JsonSerializer.Serialize(Dgramm);
|
||||
byte[] impBuffer = Encoding.UTF8.GetBytes(impData);
|
||||
foreach (EndPoint sendingEP in clientsEP)
|
||||
Datagramm impDgramm = new Datagramm();
|
||||
impDgramm.DatagrammId = currentDatagrammId;
|
||||
impDgramm.updateDatas = dataToSend;
|
||||
impDgramm.isImportant = true;
|
||||
impDgramm.PlayerId = i + 1;
|
||||
sendedData.Add(impDgramm);
|
||||
foreach (Datagramm Dgramm in sendedData.Where(x => x.PlayerId == i+1))
|
||||
{
|
||||
socket.SendTo(impBuffer, sendingEP);
|
||||
string impData = JsonSerializer.Serialize(Dgramm);
|
||||
byte[] impBuffer = Encoding.UTF8.GetBytes(impData);
|
||||
socket.SendTo(impBuffer, clientsEP[i]);
|
||||
}
|
||||
}
|
||||
currentDatagrammId++;
|
||||
for (int i = 0; i < 200 && i < dataToSend.Count; i++)
|
||||
importantUpdates.RemoveAt(0);
|
||||
}
|
||||
|
@ -213,7 +213,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
|
|||
if (Dgramm.updateDatas == null)
|
||||
{
|
||||
//Обработка acknowledgement
|
||||
arrivingDataId.Add(Dgramm.DatagrammId);
|
||||
arrivingDataId.Add(Dgramm);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -11,5 +11,6 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates
|
|||
public int DatagrammId { get; set; }
|
||||
public bool isImportant { get; set; }
|
||||
public List<UpdateData> updateDatas { get; set; }
|
||||
public int PlayerId { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue