//public static List<KNetSerializedField> DEBUG_SEND_BUFFERED_VALUES() { // return SendBufferedValues(); //} internal void SendBufferedValues(KNetConnection newClient) { //List<KNetSerializedField> serializedFields = new List<KNetSerializedField>(); foreach (var view in KlivenNet.Views) { int buffFieldId = -1; foreach (var bufferedField in view.BufferedFields) { buffFieldId++; var fieldType = bufferedField.FieldType; var bufferable = KNetUtils.IsSerializable(fieldType); if (bufferable == SerializableType.nonSerializable) { KNetLogger.LogError($"KNetServer: could not serialize field {bufferedField.Name} on KNetView {view.Id}: does {bufferedField.DeclaringType.Name} implement KNetSerializable interface?"); continue; } // Console.WriteLine(bufferedField.Name + " is bufferable: " + bufferable); var bytes = KNetUtils.Serialize(bufferedField.GetValue(view), bufferable, out int count); if (bytes == null) { continue; } var serializedField = new KNetSerializedField(view.Id, buffFieldId, bytes); serializedField.count = count; var packet = KNetUtils.ConstructPacket(KNetUtils.PacketType.bufferedObject, serializedField); SendBytes(newClient, packet); } } }
internal static void RecieveBufferedObject(KNetSerializedField serializedField) { KNetView view = KlivenNet.FindView(serializedField.viewId); if (view == null) { KNetLogger.LogError($"KNetClient: could not Recieve buffered object: KNetView of id {serializedField.viewId}: view does not exist."); return; } var field = serializedField.fieldId < view.BufferedFields.Length ? view.BufferedFields[serializedField.fieldId] : null; if (field == null) { KNetLogger.LogError($"KNetClient: could not Recieve buffered object: KNetView of id {serializedField.viewId}: field id {serializedField.fieldId} is not defined."); return; } field.SetValue(view, KNetUtils.Deserialize(serializedField.data, serializedField.count , KNetUtils.IsSerializable(field.FieldType), field.FieldType)); }