/// <summary> /// Accept an object from the server to be run on the client /// </summary> /// <param name="controlCode"></param> /// <param name="bytes"></param> private void RunOnClient(NetworkControlCode controlCode, byte[] bytes) { object o = NetSerialize.Deserialize(bytes); //If object is a ping, respond immediately, to minimize lag //This should be replaced with raw data and custom control codes that are faster to deserialize to help minimize lag from object deserialization if (o is Ping p) { float time = NetTime.now; p.clientNumber = clientNumber; p.clientTime = time; udp.Send(NetworkControlCode.runOnServer, NetSerialize.Serialize(p)); } else { lock (objectQueue) { objectQueue.Enqueue(o); } #if UNITY_EDITOR AddToObjectList("FromServer: " + o.ToString()); #endif } }
public static (NetworkEventType eventType, object o) ReadObject(NetworkStream stream) { NetworkEventType eventType = (NetworkEventType)ReadInt(stream); byte[] arr = ReadArr(stream); object o = NetSerialize.Deserialize(arr); return(eventType, o); }