From 001e89509f0559f0a716b02f2066682ef992f557 Mon Sep 17 00:00:00 2001 From: Kyle Johnsen Date: Tue, 4 Jan 2022 17:39:13 -0500 Subject: [PATCH] made sending messages lower level --- TestVelGameServer/Assets/Scenes/test.unity | 2 +- .../Assets/VelGameServer/NetworkManager.cs | 1 + .../Assets/VelGameServer/NetworkObject.cs | 5 ++-- .../Assets/VelGameServer/NetworkPlayer.cs | 22 +++++++++-------- .../Assets/VelGameServer/NetworkSyncable.cs | 13 ---------- .../VelGameServer/NetworkSyncable.cs.meta | 11 --------- .../Assets/VelGameServer/PlayerController.cs | 23 +++++++++++------- .../Assets/VelGameServer/SyncTransform.cs | 24 ++++++++++++------- 8 files changed, 45 insertions(+), 56 deletions(-) delete mode 100644 TestVelGameServer/Assets/VelGameServer/NetworkSyncable.cs delete mode 100644 TestVelGameServer/Assets/VelGameServer/NetworkSyncable.cs.meta diff --git a/TestVelGameServer/Assets/Scenes/test.unity b/TestVelGameServer/Assets/Scenes/test.unity index 7168e01..60a1db0 100644 --- a/TestVelGameServer/Assets/Scenes/test.unity +++ b/TestVelGameServer/Assets/Scenes/test.unity @@ -1819,7 +1819,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 03a4d4e1a7fd74c7ab2eccca4ce168db, type: 3} m_Name: m_EditorClassIdentifier: - host: localhost + host: neko.ugavel.com port: 3290 userid: -1 room: diff --git a/TestVelGameServer/Assets/VelGameServer/NetworkManager.cs b/TestVelGameServer/Assets/VelGameServer/NetworkManager.cs index 5a0c4d2..da53077 100644 --- a/TestVelGameServer/Assets/VelGameServer/NetworkManager.cs +++ b/TestVelGameServer/Assets/VelGameServer/NetworkManager.cs @@ -279,6 +279,7 @@ public class NetworkManager : MonoBehaviour try { socketConnection = new TcpClient(host, port); + socketConnection.NoDelay = true; Byte[] bytes = new Byte[1024]; string partialMessage = ""; while (true) diff --git a/TestVelGameServer/Assets/VelGameServer/NetworkObject.cs b/TestVelGameServer/Assets/VelGameServer/NetworkObject.cs index cfef9e6..cab1c88 100644 --- a/TestVelGameServer/Assets/VelGameServer/NetworkObject.cs +++ b/TestVelGameServer/Assets/VelGameServer/NetworkObject.cs @@ -5,11 +5,10 @@ using UnityEngine; /// /// This is a base class for all objects that a player can instantiated/owned /// -public abstract class NetworkObject: MonoBehaviour, NetworkSyncable +public abstract class NetworkObject: MonoBehaviour { public NetworkPlayer owner; public string networkId; //this is forged from the combination of the creator's id (-1 in the case of a scene object) and an object id, so it's always unique for a room public string prefabName; //this may be empty if it's not a prefab (scene object) - public abstract byte[] getSyncMessage(); - public abstract void handleSyncMessage(byte[] message); + public abstract void handleMessage(string identifier, byte[] message); } diff --git a/TestVelGameServer/Assets/VelGameServer/NetworkPlayer.cs b/TestVelGameServer/Assets/VelGameServer/NetworkPlayer.cs index 507b41f..fc3c500 100644 --- a/TestVelGameServer/Assets/VelGameServer/NetworkPlayer.cs +++ b/TestVelGameServer/Assets/VelGameServer/NetworkPlayer.cs @@ -99,8 +99,9 @@ public class NetworkPlayer : MonoBehaviour, Dissonance.IDissonancePlayer { case "1": //update my object's data { - byte[] message = Convert.FromBase64String(sections[1]); - myObject.handleSyncMessage(message); + string identifier = sections[1]; + byte[] message = Convert.FromBase64String(sections[2]); + myObject.handleMessage(identifier, message); break; } case "2": //audio data @@ -144,13 +145,14 @@ public class NetworkPlayer : MonoBehaviour, Dissonance.IDissonancePlayer { string objectKey = sections[1]; - string syncMessage = sections[2]; + string identifier = sections[2]; + string syncMessage = sections[3]; byte[] messageBytes = Convert.FromBase64String(syncMessage); if (manager.objects.ContainsKey(objectKey)) { if(manager.objects[objectKey].owner == this) { - manager.objects[objectKey].handleSyncMessage(messageBytes); + manager.objects[objectKey].handleMessage(identifier, messageBytes); } } @@ -223,7 +225,6 @@ public class NetworkPlayer : MonoBehaviour, Dissonance.IDissonancePlayer public void setDissonanceID(string id) //this sort of all initializes dissonance { dissonanceID = id; - Debug.Log("here"); manager.sendTo(NetworkManager.MessageType.OTHERS, "3," + id+";"); commsNetwork.comms.TrackPlayerPosition(this); } @@ -234,17 +235,18 @@ public class NetworkPlayer : MonoBehaviour, Dissonance.IDissonancePlayer //if I'm master, I'm now responsible for updating all scene objects //FindObjectsOfType(); } - public void syncObject(NetworkObject obj) + + + public void sendMessage(NetworkObject obj, string identifier, byte[] data) { - byte[] data = obj.getSyncMessage(); if (obj == myObject) { - manager.sendTo(NetworkManager.MessageType.OTHERS, "1," + Convert.ToBase64String(data)); + manager.sendTo(NetworkManager.MessageType.OTHERS, "1," + identifier +"," + Convert.ToBase64String(data)); } else { - - manager.sendTo(NetworkManager.MessageType.OTHERS, "5," + obj.networkId + "," + Convert.ToBase64String(data)); + + manager.sendTo(NetworkManager.MessageType.OTHERS, "5," + obj.networkId + "," + identifier + "," + Convert.ToBase64String(data)); } } diff --git a/TestVelGameServer/Assets/VelGameServer/NetworkSyncable.cs b/TestVelGameServer/Assets/VelGameServer/NetworkSyncable.cs deleted file mode 100644 index 24e68db..0000000 --- a/TestVelGameServer/Assets/VelGameServer/NetworkSyncable.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -/// -/// This makes serialization somewhat uniform -/// -public interface NetworkSyncable -{ - public byte[] getSyncMessage(); //local owner asks for this and sends it periodically - public void handleSyncMessage(byte[] message); //remote owner will call this - -} diff --git a/TestVelGameServer/Assets/VelGameServer/NetworkSyncable.cs.meta b/TestVelGameServer/Assets/VelGameServer/NetworkSyncable.cs.meta deleted file mode 100644 index f444aa7..0000000 --- a/TestVelGameServer/Assets/VelGameServer/NetworkSyncable.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8e4266960bfa444998dda57f911448f0 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/TestVelGameServer/Assets/VelGameServer/PlayerController.cs b/TestVelGameServer/Assets/VelGameServer/PlayerController.cs index 2de17b7..f8510e9 100644 --- a/TestVelGameServer/Assets/VelGameServer/PlayerController.cs +++ b/TestVelGameServer/Assets/VelGameServer/PlayerController.cs @@ -10,7 +10,7 @@ public class PlayerController : NetworkObject public Quaternion targetRotation; - public override byte[] getSyncMessage() + public byte[] getSyncMessage() { float[] data = new float[7]; for (int i = 0; i < 3; i++) @@ -25,16 +25,21 @@ public class PlayerController : NetworkObject return toReturn; } - public override void handleSyncMessage(byte[] message) + public override void handleMessage(string identifier, byte[] message) { - float[] data = new float[7]; - Buffer.BlockCopy(message, 0, data, 0, message.Length); - for (int i = 0; i < 3; i++) + switch (identifier) { - targetPosition[i] = data[i]; - targetRotation[i] = data[i + 3]; + case "s": + float[] data = new float[7]; + Buffer.BlockCopy(message, 0, data, 0, message.Length); + for (int i = 0; i < 3; i++) + { + targetPosition[i] = data[i]; + targetRotation[i] = data[i + 3]; + } + targetRotation[3] = data[6]; + break; } - targetRotation[3] = data[6]; } // Start is called before the first frame update @@ -50,7 +55,7 @@ public class PlayerController : NetworkObject if (owner != null && owner.isLocal) { - owner.syncObject(this); + owner.sendMessage(this, "s", getSyncMessage()); } yield return new WaitForSeconds(.1f); } diff --git a/TestVelGameServer/Assets/VelGameServer/SyncTransform.cs b/TestVelGameServer/Assets/VelGameServer/SyncTransform.cs index 9253c6e..77d2274 100644 --- a/TestVelGameServer/Assets/VelGameServer/SyncTransform.cs +++ b/TestVelGameServer/Assets/VelGameServer/SyncTransform.cs @@ -16,7 +16,7 @@ public class SyncTransform : NetworkObject public Quaternion targetRotation; - public override byte[] getSyncMessage() + public byte[] getSyncMessage() { float[] data = new float[7]; for(int i = 0; i < 3; i++) @@ -31,16 +31,22 @@ public class SyncTransform : NetworkObject return toReturn; } - public override void handleSyncMessage(byte[] message) + public override void handleMessage(string identifier, byte[] message) { - float[] data = new float[7]; - Buffer.BlockCopy(message, 0, data, 0, message.Length); - for(int i = 0; i < 3; i++) + switch (identifier) { - targetPosition[i] = data[i]; - targetRotation[i] = data[i + 3]; + case "s": + float[] data = new float[7]; + Buffer.BlockCopy(message, 0, data, 0, message.Length); + for (int i = 0; i < 3; i++) + { + targetPosition[i] = data[i]; + targetRotation[i] = data[i + 3]; + } + targetRotation[3] = data[6]; + break; } - targetRotation[3] = data[6]; + } // Start is called before the first frame update @@ -56,7 +62,7 @@ public class SyncTransform : NetworkObject if (owner != null && owner.isLocal) { - owner.syncObject(this); + owner.sendMessage(this, "s", getSyncMessage()); } yield return new WaitForSeconds(.1f); }