DESERIALIZATION-FIX-COMMIT
This commit is contained in:
parent
10089f8a79
commit
332680a8eb
14 changed files with 115 additions and 33 deletions
|
@ -24,6 +24,7 @@ using ZoFo.GameCore.GUI;
|
|||
using ZoFo.GameCore.GameObjects.Entities.Interactables.Collectables;
|
||||
using ZoFo.GameCore.GameObjects.MapObjects.StopObjects;
|
||||
using ZoFo.GameCore.GameObjects.Entities.LivingEntities.Enemies;
|
||||
using ZoFo.GameCore.GameManagers.NetworkManager.SerializableDTO;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Newtonsoft.Json;
|
||||
namespace ZoFo.GameCore
|
||||
|
@ -144,17 +145,17 @@ namespace ZoFo.GameCore
|
|||
{
|
||||
GameObject created_gameObject;
|
||||
if ((update as UpdateGameObjectCreated).GameObjectType == "EntittyForAnimationTests")
|
||||
gameObjects.Add(new EntittyForAnimationTests((update as UpdateGameObjectCreated).position));
|
||||
gameObjects.Add(new EntittyForAnimationTests((update as UpdateGameObjectCreated).position.GetVector2()));
|
||||
if ((update as UpdateGameObjectCreated).GameObjectType == "Player")
|
||||
{
|
||||
created_gameObject = new Player((update as UpdateGameObjectCreated).position);
|
||||
created_gameObject = new Player((update as UpdateGameObjectCreated).position.GetVector2());
|
||||
players.Add(created_gameObject as Player);
|
||||
gameObjects.Add(created_gameObject);
|
||||
}
|
||||
if ((update as UpdateGameObjectCreated).GameObjectType == "Ammo")
|
||||
gameObjects.Add(new Ammo((update as UpdateGameObjectCreated).position));
|
||||
gameObjects.Add(new Ammo((update as UpdateGameObjectCreated).position.GetVector2()));
|
||||
if ((update as UpdateGameObjectCreated).GameObjectType == "Zombie")
|
||||
gameObjects.Add(new Zombie((update as UpdateGameObjectCreated).position));
|
||||
gameObjects.Add(new Zombie((update as UpdateGameObjectCreated).position.GetVector2()));
|
||||
|
||||
|
||||
(gameObjects.Last() as Entity).SetIdByClient((update as UpdateGameObjectCreated).IdEntity);
|
||||
|
@ -169,7 +170,7 @@ namespace ZoFo.GameCore
|
|||
{
|
||||
var ent = FindEntityById(update.IdEntity);
|
||||
|
||||
ent.position = (update as UpdatePosition).NewPosition;
|
||||
ent.position = (update as UpdatePosition).NewPosition.GetVector2();
|
||||
DebugHUD.Instance.Log("newPosition " + ent.position);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@ public class SelectModeMenu : AbstractGUI
|
|||
AppManager.Instance.SetClient(client);
|
||||
server.CreateRoom(false);
|
||||
client.JoinYourself(server.MyIp.Port);
|
||||
AppManager.Instance.ChangeState(GameState.HostPlaying);
|
||||
//AppManager.Instance.ChangeState(GameState.HostPlaying);
|
||||
AppManager.Instance.SetGUI(new HUD());
|
||||
|
||||
//server.CreateRoom(1);
|
||||
|
|
|
@ -12,6 +12,7 @@ using ZoFo.GameCore.GameObjects.Entities;
|
|||
using ZoFo.GameCore.GameObjects.Entities.LivingEntities;
|
||||
using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient;
|
||||
using ZoFo.GameCore.Graphics;
|
||||
using ZoFo.GameCore.GameManagers.NetworkManager.SerializableDTO;
|
||||
|
||||
namespace ZoFo.GameCore.GameManagers.CollisionManager
|
||||
{
|
||||
|
@ -104,7 +105,7 @@ namespace ZoFo.GameCore.GameManagers.CollisionManager
|
|||
|
||||
entity.graphicsComponent.ObjectDrawRectangle.X = (int)entity.position.X;
|
||||
entity.graphicsComponent.ObjectDrawRectangle.Y = (int)entity.position.Y;
|
||||
AppManager.Instance.server.AddData(new UpdatePosition() { NewPosition = entity.position, IdEntity = entity.Id });
|
||||
AppManager.Instance.server.AddData(new UpdatePosition() { NewPosition = new SerializableVector2(entity.position), IdEntity = entity.Id });
|
||||
AppManager.Instance.debugHud.Set("testPos", entity.position.ToString()); //TODO remove
|
||||
entity.velocity = Vector2.Zero;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.SqlTypes;
|
||||
|
@ -10,6 +12,7 @@ using System.Text.Json;
|
|||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using ZoFo.GameCore.GameManagers.NetworkManager.Updates;
|
||||
using ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient;
|
||||
|
||||
|
||||
namespace ZoFo.GameCore.GameManagers.NetworkManager
|
||||
|
@ -47,7 +50,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
|
|||
{
|
||||
Datagramm Datagramm = new Datagramm();
|
||||
Datagramm.updateDatas = updates;
|
||||
byte[] bytes = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(Datagramm)); //нужно сериализовать
|
||||
byte[] bytes = Encoding.UTF8.GetBytes(System.Text.Json.JsonSerializer.Serialize(Datagramm)); //нужно сериализовать
|
||||
socket.SendTo(bytes, sendingEP);
|
||||
}
|
||||
|
||||
|
@ -60,7 +63,13 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
|
|||
|
||||
public void AnalyzeData(string data)
|
||||
{
|
||||
Datagramm Dgramm = JsonSerializer.Deserialize<Datagramm>(data);
|
||||
JObject jObj = JsonConvert.DeserializeObject(data) as JObject;
|
||||
JToken token = JToken.FromObject(jObj);
|
||||
JToken updateDatas = token["updateDatas"];
|
||||
Datagramm Dgramm = new Datagramm();
|
||||
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)
|
||||
|
@ -85,11 +94,72 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
public List<UpdateData> GetSentUpdates(JToken updatesToken)
|
||||
{
|
||||
List<UpdateData> data = new List<UpdateData>();
|
||||
JArray updateDatas = updatesToken as JArray;
|
||||
UpdateData update = new UpdateData();
|
||||
foreach (JObject token in updateDatas.Children())
|
||||
{
|
||||
switch (token["UpdateType"].ToObject<string>())
|
||||
{
|
||||
case "UpdateAnimation":
|
||||
update = token.ToObject<UpdateAnimation>();
|
||||
data.Add(update);
|
||||
break;
|
||||
case "UpdateEntityHealth":
|
||||
update = token.ToObject<UpdateEntityHealth>();
|
||||
data.Add(update);
|
||||
break;
|
||||
case "UpdateGameEnded":
|
||||
update = token.ToObject<UpdateGameEnded>();
|
||||
data.Add(update);
|
||||
break;
|
||||
case "UpdateGameObjectCreated":
|
||||
update = token.ToObject<UpdateGameObjectCreated>();
|
||||
data.Add(update);
|
||||
break;
|
||||
case "UpdateGameObjectDeleted":
|
||||
update = token.ToObject<UpdateGameObjectDeleted>();
|
||||
data.Add(update);
|
||||
break;
|
||||
case "UpdateInteraction":
|
||||
update = token.ToObject<UpdateInteraction>();
|
||||
data.Add(update);
|
||||
break;
|
||||
case "UpdateInteractionReady":
|
||||
update = token.ToObject<UpdateInteractionReady>();
|
||||
data.Add(update);
|
||||
break;
|
||||
case "UpdateLoot":
|
||||
update = token.ToObject<UpdateLoot>();
|
||||
data.Add(update);
|
||||
break;
|
||||
case "UpdatePlayerParametrs":
|
||||
update = token.ToObject<UpdatePlayerParametrs>();
|
||||
data.Add(update);
|
||||
break;
|
||||
case "UpdatePosition":
|
||||
update = token.ToObject<UpdatePosition>();
|
||||
data.Add(update);
|
||||
break;
|
||||
case "UpdateTileCreated":
|
||||
update = token.ToObject<UpdateTileCreated>();
|
||||
data.Add(update);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
public void SendAcknowledgement(int DatagrammId)
|
||||
{
|
||||
|
||||
Datagramm Dgramm = new Datagramm() { DatagrammId = DatagrammId };
|
||||
string data = JsonSerializer.Serialize(Dgramm);
|
||||
string data = System.Text.Json.JsonSerializer.Serialize(Dgramm);
|
||||
byte[] buffer = Encoding.UTF8.GetBytes(data);
|
||||
socket.SendTo(buffer, sendingEP);
|
||||
|
||||
|
@ -110,11 +180,6 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
|
|||
}
|
||||
|
||||
#endregion
|
||||
public void StopConnection()
|
||||
{
|
||||
socket.Shutdown(SocketShutdown.Both);
|
||||
socket.Close();
|
||||
}
|
||||
#region Join
|
||||
/// <summary>
|
||||
/// приложение пытается подключиться к комнате
|
||||
|
@ -124,6 +189,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
|
|||
public void JoinRoom(string ip, int port) // multyplayer
|
||||
{
|
||||
sendingEP = new IPEndPoint(IPAddress.Parse(ip), port);
|
||||
|
||||
SendData();
|
||||
Thread listen = new Thread(StartListening);
|
||||
listen.IsBackground = true;
|
||||
|
@ -173,7 +239,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
|
|||
byte[] correctedBuffer = new byte[size];
|
||||
Array.Copy(buffer, correctedBuffer, size);
|
||||
data = Encoding.UTF8.GetString(correctedBuffer);
|
||||
AnalyzeData(data);
|
||||
GetDataSent(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,10 +9,11 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager.SerializableDTO
|
|||
{
|
||||
public class SerializablePoint
|
||||
{
|
||||
public int X;
|
||||
public int Y;
|
||||
public int X { get; set; }
|
||||
public int Y { get; set; }
|
||||
|
||||
public SerializablePoint(Point point) { X = point.X; Y = point.Y;}
|
||||
public SerializablePoint() { }
|
||||
public Point GetPoint() { return new Point(X, Y);}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,6 @@ using ZoFo.GameCore.GameManagers.NetworkManager.SerializableDTO;
|
|||
namespace ZoFo.GameCore.GameManagers.NetworkManager.SerializableDTO
|
||||
{
|
||||
[Serializable]
|
||||
[JsonSerializable(typeof(SerializableRectangle))]
|
||||
public class SerializableRectangle
|
||||
{
|
||||
public SerializablePoint Size { get; set; }
|
||||
|
|
|
@ -2,15 +2,17 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices.JavaScript;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace ZoFo.GameCore.GameManagers.NetworkManager.SerializableDTO
|
||||
{
|
||||
[Serializable]
|
||||
public class SerializableVector2
|
||||
{
|
||||
public float X;
|
||||
public float Y;
|
||||
public float X { get; set; }
|
||||
public float Y { get; set; }
|
||||
public SerializableVector2(Vector2 vector)
|
||||
{
|
||||
X = vector.X;
|
||||
|
|
|
@ -13,6 +13,7 @@ using System.Text.Json.Serialization;
|
|||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using ZoFo.GameCore.GameManagers.NetworkManager.Updates;
|
||||
using ZoFo.GameCore.GameManagers.NetworkManager.SerializableDTO;
|
||||
|
||||
namespace ZoFo.GameCore.GameManagers.NetworkManager
|
||||
{
|
||||
|
@ -64,13 +65,18 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
|
|||
string hostName = Dns.GetHostName(); // Retrive the Name of HOST
|
||||
var ipList = Dns.GetHostEntry(hostName).AddressList;
|
||||
|
||||
var ipV4List = new List<IPAddress>();
|
||||
foreach (var ip in ipList)
|
||||
{
|
||||
if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
|
||||
{
|
||||
return ip;
|
||||
ipV4List.Add(ip);
|
||||
}
|
||||
}
|
||||
if (ipV4List.Count > 0)
|
||||
{
|
||||
return ipV4List[ipV4List.Count - 1];
|
||||
}
|
||||
return IPAddress.Loopback;
|
||||
}
|
||||
public void SetIsMultiplayer(bool isMultiplayer)
|
||||
|
@ -119,6 +125,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
|
|||
sendedData.Add(impDgramm);
|
||||
foreach (Datagramm Dgramm in sendedData)
|
||||
{
|
||||
|
||||
string impData = JsonSerializer.Serialize(Dgramm);
|
||||
byte[] impBuffer = Encoding.UTF8.GetBytes(impData);
|
||||
foreach (EndPoint sendingEP in clientsEP)
|
||||
|
|
|
@ -9,7 +9,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates
|
|||
public class Datagramm
|
||||
{
|
||||
public int DatagrammId { get; set; }
|
||||
public List<UpdateData> updateDatas { get; set; }
|
||||
public bool isImportant { get; set; }
|
||||
public List<UpdateData> updateDatas { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ using System.Collections.Generic;
|
|||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using ZoFo.GameCore.GameManagers.NetworkManager.SerializableDTO;
|
||||
|
||||
namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient
|
||||
{
|
||||
|
@ -12,9 +13,12 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient
|
|||
/// </summary>
|
||||
public class UpdateGameObjectCreated : UpdateData
|
||||
{
|
||||
public UpdateGameObjectCreated() { UpdateType = "UpdateGameObjectCreated"; }
|
||||
public string GameObjectType;
|
||||
public string GameObjectId;
|
||||
public Vector2 position;
|
||||
public UpdateGameObjectCreated() { UpdateType = "UpdateGameObjectCreated"; isImportant = true; }
|
||||
|
||||
public string GameObjectType { get; set; }
|
||||
|
||||
public string GameObjectId { get; set; }
|
||||
|
||||
public SerializableVector2 position { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient
|
|||
/// </summary>
|
||||
public class UpdateGameObjectDeleted : UpdateData
|
||||
{
|
||||
public UpdateGameObjectDeleted() { UpdateType = "UpdateGameObjectDeleted"; }
|
||||
public UpdateGameObjectDeleted() { UpdateType = "UpdateGameObjectDeleted"; isImportant = false; }
|
||||
public string GameObjectType;
|
||||
}
|
||||
}
|
|
@ -4,6 +4,7 @@ using System.Collections.Generic;
|
|||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using ZoFo.GameCore.GameManagers.NetworkManager.SerializableDTO;
|
||||
using ZoFo.GameCore.GameObjects.Entities.LivingEntities;
|
||||
|
||||
namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient
|
||||
|
@ -15,6 +16,6 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient
|
|||
{
|
||||
public UpdatePosition() { UpdateType = "UpdatePosition"; }
|
||||
|
||||
public Vector2 NewPosition { get; set; }
|
||||
public SerializableVector2 NewPosition { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,8 +17,8 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager.Updates.ServerToClient
|
|||
/// </summary>
|
||||
public class UpdateTileCreated : UpdateData
|
||||
{
|
||||
public UpdateTileCreated() { UpdateType = "UpdateTileCreated"; }
|
||||
public Texture2D TextureTile { get; set; }
|
||||
public UpdateTileCreated() { UpdateType = "UpdateTileCreated"; isImportant = true; }
|
||||
[JsonInclude]
|
||||
public SerializableVector2 Position { get; set; }
|
||||
public SerializablePoint Size { get; set; }
|
||||
public SerializableRectangle sourceRectangle { get; set; }
|
||||
|
|
|
@ -182,12 +182,12 @@ namespace ZoFo.GameCore
|
|||
if (gameObject is Entity entity)
|
||||
{
|
||||
AddData(new UpdateGameObjectCreated() { GameObjectType = gameObject.GetType().Name, IdEntity = entity.Id,
|
||||
position = gameObject.position});
|
||||
position = new SerializableVector2(gameObject.position)});
|
||||
collisionManager.Register(entity.collisionComponent);
|
||||
}
|
||||
else
|
||||
AddData(new UpdateGameObjectCreated() { GameObjectType = gameObject.GetType().Name,
|
||||
position = gameObject.position
|
||||
position = new SerializableVector2(gameObject.position)
|
||||
});
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue