Skip to content

Commit 841a5d9

Browse files
committed
Great client packet sending optimizations & more check patchnotes..
1 parent a708859 commit 841a5d9

9 files changed

Lines changed: 306 additions & 103 deletions

File tree

Assets/EntityNetworkingSystems/Scripts/AnimationNetworker.cs

Lines changed: 66 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,63 +8,84 @@ public class AnimationNetworker : MonoBehaviour
88
{
99
public List<AnimatorControllerParameter> animationBools = new List<AnimatorControllerParameter>();
1010
public List<bool> animationBoolsLastValue = new List<bool>();
11+
public bool manageSpriteFlips = true;
12+
13+
1114

1215
private Animator anim;
1316
private NetworkObject net;
17+
private SpriteRenderer sR;
1418
//private Thread handleAnimation;
1519

20+
private bool lastSpriteFlipXValue = false;
21+
private bool lastSpriteFlipYValue = false;
22+
1623

1724

1825
void Start()
1926
{
2027
anim = GetComponent<Animator>();
2128
net = GetComponent<NetworkObject>();
29+
sR = GetComponent<SpriteRenderer>();
2230
if (anim == null)
2331
{
2432
Destroy(this);
2533
}
34+
35+
if(sR == null)
36+
{
37+
manageSpriteFlips = false;
38+
}
39+
2640
foreach (AnimatorControllerParameter parameter in anim.parameters)
2741
{
2842
if (parameter.type == AnimatorControllerParameterType.Bool)
2943
{
30-
if (NetTools.isServer)
31-
{
32-
animationBools.Add(parameter);
33-
animationBoolsLastValue.Add(anim.GetBool(parameter.name));
34-
}
44+
animationBools.Add(parameter);
45+
animationBoolsLastValue.Add(anim.GetBool(parameter.name));
3546

3647
net.CreateField(parameter.name, anim.GetBool(parameter.name), NetworkField.valueInitializer.Boolean,true);
3748
net.FieldAddOnChangeMethod(parameter.name, OnNetworkFieldBoolUpdate);
49+
//net.FieldAddStringChangeMethod(parameter.name, "OnNetworkFieldBoolUpdate", "EntityNetworkingSystemsAnimationNetworker");
3850
}
3951
}
40-
if(net.IsOwner() && net.initialized)
41-
{
42-
StartCoroutine(HandleAnimationBoolPackets());
43-
} else if (net.initialized == false)
52+
53+
if(manageSpriteFlips)
4454
{
45-
StartCoroutine(CheckToDoAnim());
55+
net.CreateField("SRFlipX", sR.flipX, init: NetworkField.valueInitializer.Boolean, true);
56+
net.CreateField("SRFlipY", sR.flipX, init: NetworkField.valueInitializer.Boolean, true);
57+
58+
net.FieldAddOnChangeMethod("SRFlipX", OnNetworkFieldFlipX);
59+
net.FieldAddOnChangeMethod("SRFlipY", OnNetworkFieldFlipY);
4660
}
47-
48-
}
4961

50-
IEnumerator CheckToDoAnim()
51-
{
52-
yield return new WaitUntil(() => net.initialized);
53-
yield return new WaitForFixedUpdate();
5462

5563
if(net.IsOwner())
5664
{
5765
StartCoroutine(HandleAnimationBoolPackets());
5866
}
59-
60-
yield return new WaitForFixedUpdate();
67+
6168
}
6269

70+
//IEnumerator CheckToDoAnim()
71+
//{
72+
// yield return new WaitUntil(() => net.initialized);
73+
// yield return new WaitForFixedUpdate();
74+
75+
// if(net.IsOwner())
76+
// {
77+
// StartCoroutine(HandleAnimationBoolPackets());
78+
// }
79+
80+
// yield return new WaitForFixedUpdate();
81+
//}
82+
6383
IEnumerator HandleAnimationBoolPackets()
6484
{
6585
while(NetServer.serverInstance != null || NetClient.instanceClient != null)
6686
{
6787

88+
//Animation checking
6889
int index = 0;
6990
foreach(AnimatorControllerParameter parameter in animationBools)
7091
{
@@ -79,7 +100,23 @@ IEnumerator HandleAnimationBoolPackets()
79100
}
80101
index += 1;
81102
}
82-
yield return new WaitForSeconds(1f / 30f);
103+
104+
//SpriteRenderer flip checking
105+
if(manageSpriteFlips)
106+
{
107+
if (lastSpriteFlipXValue != sR.flipX)
108+
{
109+
net.UpdateField("SRFlipX", sR.flipX, true);
110+
lastSpriteFlipXValue = sR.flipX;
111+
}
112+
if (lastSpriteFlipYValue != sR.flipY)
113+
{
114+
net.UpdateField("SRFlipY", sR.flipY, true);
115+
lastSpriteFlipYValue = sR.flipY;
116+
}
117+
}
118+
119+
yield return new WaitForSeconds(1f / 15f);
83120
}
84121
Debug.Log("Handle Animation Bool Packets has ended.");
85122
}
@@ -90,6 +127,16 @@ public void OnNetworkFieldBoolUpdate(FieldArgs args)
90127
//Debug.Log("Field Updated... " + args.fieldName + " "+args.GetValue<bool>());
91128
}
92129

130+
public void OnNetworkFieldFlipX(FieldArgs args)
131+
{
132+
sR.flipX = args.GetValue<bool>();
133+
}
134+
135+
public void OnNetworkFieldFlipY(FieldArgs args)
136+
{
137+
sR.flipX = args.GetValue<bool>();
138+
}
139+
93140

94141
}
95142
}

Assets/EntityNetworkingSystems/Scripts/NetBackbone/NetClient.cs

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,8 @@ public void ConnectToServer(string ip = "127.0.0.1", int port = 44594)
123123
authPacket.sendToAll = false;
124124
SendPacket(authPacket);
125125
}
126-
//packetSendHandler = new Thread(new ThreadStart(SendingPacketHandler));
127-
//packetSendHandler.Start();
126+
packetSendHandler = new Thread(new ThreadStart(SendingPacketHandler));
127+
packetSendHandler.Start();
128128
connectionHandler = new Thread(new ThreadStart(ConnectionHandler));
129129
connectionHandler.Start();
130130
}
@@ -147,15 +147,15 @@ public void DisconnectFromServer()
147147
}
148148
}
149149

150-
public void SendPacket(Packet packet)//, bool queuedPacket = false)
150+
public void SendPacket(Packet packet, bool queuedPacket = false)
151151
{
152-
//if(!queuedPacket)
153-
//{
154-
// queuedSendingPackets.Add(packet);
155-
// return;
156-
//}
152+
if (!queuedPacket)
153+
{
154+
queuedSendingPackets.Add(packet);
155+
return;
156+
}
157157

158-
if(NetTools.isSingleplayer)
158+
if (NetTools.isSingleplayer)
159159
{
160160
if(packet.packetSendType == Packet.sendType.proximity)
161161
{
@@ -178,7 +178,7 @@ public void SendPacket(Packet packet)//, bool queuedPacket = false)
178178
lock (netStream){
179179
lock (client)
180180
{
181-
byte[] array = Packet.SerializeObject(packet);//Encoding.ASCII.GetBytes(Packet.JsonifyPacket(packet));
181+
byte[] array = Encoding.ASCII.GetBytes(Packet.JsonifyPacket(packet)); //Packet.SerializeObject(packet);
182182

183183

184184
//First send packet size
@@ -208,7 +208,7 @@ public Packet RecvPacket()
208208
byteMessage = RecieveSizeSpecificData(pSize, netStream);
209209
//netStream.Read(byteMessage, 0, byteMessage.Length);
210210
//Debug.Log(Encoding.ASCII.GetString(byteMessage));
211-
return (Packet)Packet.DeserializeObject(byteMessage);//Packet.DeJsonifyPacket(Encoding.ASCII.GetString(byteMessage));
211+
return Packet.DeJsonifyPacket(Encoding.ASCII.GetString(byteMessage)); //(Packet)Packet.DeserializeObject(byteMessage);
212212
}
213213

214214

@@ -230,32 +230,33 @@ byte[] RecieveSizeSpecificData(int byteCountToGet, NetworkStream netStream)
230230
return bytesRecieved.ToArray();
231231
}
232232

233-
//public List<Packet> queuedSendingPackets = new List<Packet>();
233+
public List<Packet> queuedSendingPackets = new List<Packet>();
234234

235-
//public void SendingPacketHandler()
236-
//{
237-
// while (NetClient.instanceClient != null)
238-
// {
239-
// //Debug.Log("SendingPacketHandler running");
240-
// if (queuedSendingPackets.Count <= 0)
241-
// {
242-
// continue;
243-
// }
244-
245-
// try
246-
// {
247-
// foreach (Packet packet in queuedSendingPackets.ToArray())
248-
// {
249-
// SendPacket(packet, true);
250-
// }
251-
// queuedSendingPackets = new List<Packet>();
252-
// } catch
253-
// {
254-
255-
// }
256-
// }
257-
// Debug.Log("Sending packet handler stopped... Possible problem?");
258-
//}
235+
public void SendingPacketHandler()
236+
{
237+
while (NetClient.instanceClient != null)
238+
{
239+
//Debug.Log("SendingPacketHandler running");
240+
if (queuedSendingPackets.Count <= 0)
241+
{
242+
continue;
243+
}
244+
245+
try
246+
{
247+
foreach (Packet packet in queuedSendingPackets.ToArray())
248+
{
249+
SendPacket(packet, true);
250+
}
251+
queuedSendingPackets = new List<Packet>();
252+
}
253+
catch
254+
{
255+
256+
}
257+
}
258+
Debug.Log("Sending packet handler stopped... Possible problem?");
259+
}
259260

260261
//public void SendMessage(byte[] message)
261262
//{

Assets/EntityNetworkingSystems/Scripts/NetBackbone/NetServer.cs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ public void StartServer()
146146
UnityPacketHandler.instance.StartHandler();
147147

148148
connectionHandler = new Thread(new ThreadStart(ConnectionHandler));
149+
connectionHandler.Name = "Epocria Server Connection Handler";
149150
connectionHandler.Start();
150151
//packetSendHandler = new Thread(new ThreadStart(SendingPacketHandler));
151152
//packetSendHandler.Start();
@@ -198,6 +199,7 @@ public void ConnectionHandler()
198199
Debug.Log("New Client Connected Successfully.");
199200

200201
Thread connThread = new Thread(() => ClientHandler(netClient));
202+
connThread.Name = "ClientHandler" + netClient.clientID;
201203
connThread.Start();
202204

203205
NetTools.onPlayerJoin.Invoke(netClient);
@@ -261,7 +263,7 @@ public void ClientHandler(NetworkPlayer client)
261263
List<Packet> packetsToSend = new List<Packet>(); //Will contain buffered packets and all network fields to be updated.
262264
packetsToSend.AddRange(bufferedPackets.ToArray());
263265
//Debug.Log(packetsToSend.Count);
264-
foreach (NetworkObject netObj in NetworkObject.allNetObjs.ToArray())
266+
foreach (NetworkObject netObj in NetworkObject.allNetObjs.Values.ToArray())
265267
{
266268
if (netObj.fields.Count > 0)
267269
{
@@ -299,13 +301,21 @@ public void ClientHandler(NetworkPlayer client)
299301
}
300302

301303
bool clientRunning = true;
304+
302305

303306
while (client != null && server != null && clientRunning)
304307
{
305308
try
306309
{
307310
//Thread.Sleep(50);
308311
Packet pack = RecvPacket(client);
312+
313+
if(pack == null)
314+
{
315+
return;
316+
}
317+
318+
309319
if (pack.packetOwnerID != client.clientID)// && client.tcpClient == NetClient.instanceClient.client) //if server dont change cause if it is -1 it has all authority.
310320
{
311321
pack.packetOwnerID = client.clientID;
@@ -377,9 +387,9 @@ public void ClientHandler(NetworkPlayer client)
377387
catch (System.Exception e)
378388
{
379389
//Something went wrong with packet deserialization or connection closed.
380-
//Debug.LogError(e);
381-
clientRunning = false; //Basically end the thread.
382-
390+
Debug.LogError(e);
391+
//clientRunning = false; //Basically end the thread.
392+
383393
}
384394
}
385395
Debug.Log("NetServer.ClientHandler() thread has successfully finished.");
@@ -434,7 +444,7 @@ public void SendPacket(NetworkPlayer player, Packet packet)//, bool queuedPacket
434444
{
435445
lock (player.tcpClient)
436446
{
437-
byte[] array = Packet.SerializeObject(packet);//Encoding.ASCII.GetBytes(Packet.JsonifyPacket(packet));
447+
byte[] array = Encoding.ASCII.GetBytes(Packet.JsonifyPacket(packet));//Packet.SerializeObject(packet);
438448

439449
//First send packet size
440450
byte[] arraySize = new byte[4];
@@ -462,7 +472,7 @@ public Packet RecvPacket(NetworkPlayer player)
462472
player.tcpClient.ReceiveBufferSize = pSize;
463473
byteMessage = RecieveSizeSpecificData(pSize, player.netStream);
464474
//player.netStream.Read(byteMessage, 0, byteMessage.Length);
465-
return (Packet)Packet.DeserializeObject(byteMessage);//Packet.DeJsonifyPacket(Encoding.ASCII.GetString(byteMessage));
475+
return Packet.DeJsonifyPacket(Encoding.ASCII.GetString(byteMessage)); //(Packet)Packet.DeserializeObject(byteMessage);
466476
}
467477

468478
byte[] RecieveSizeSpecificData(int byteCountToGet, NetworkStream netStream)

Assets/EntityNetworkingSystems/Scripts/NetBackbone/NetTools.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ public static GameObject NetInstantiate(int prefabDomain, int prefabID, Vector3
9191
nObj.sharedObject = gOID.isShared;
9292
nObj.detectNetworkStarts = NetworkData.instance.networkPrefabList[gOID.prefabDomainID].detectNetworkStarts;
9393

94+
9495
nObj.Initialize();
9596
//nObj.DoRpcFieldInitialization();
9697
if (nObj.onNetworkStart != null)
@@ -115,6 +116,11 @@ public static GameObject NetInstantiate(int prefabDomain, int prefabID, Vector3
115116

116117
public static void NetDestroy(NetworkObject netObj, Packet.sendType sT = Packet.sendType.buffered)
117118
{
119+
if(netObj == null)
120+
{
121+
return;
122+
}
123+
118124
NetDestroy(netObj.networkID, sT);
119125
}
120126

@@ -155,7 +161,7 @@ public static List<Packet> GenerateScenePackets()
155161
//Will generate all the packets required to sync scenes for users. Useful for right when the server begins.
156162
//Only generates packets for NetworkObject's that are included inside of NetworkData's prefab domains.
157163
List<Packet> objPackets = new List<Packet>();
158-
foreach (NetworkObject netObj in NetworkObject.allNetObjs)
164+
foreach (NetworkObject netObj in NetworkObject.allNetObjs.Values)
159165
{
160166
if (netObj.prefabID == -1 || netObj.prefabDomainID == -1)
161167
{
@@ -197,6 +203,14 @@ public static bool IsMultiplayerGame()
197203
return isServer || isClient;
198204
}
199205

206+
public static void UpdatePlayerProximityPosition(int clientID, Vector3 position)
207+
{
208+
if (NetTools.isServer)
209+
{
210+
NetServer.serverInstance.GetPlayerByID(clientID).proximityPosition = position;
211+
}
212+
}
213+
200214
}
201215

202216
public class PlayerJoinEvent : UnityEvent<NetworkPlayer>

0 commit comments

Comments
 (0)