/// <summary> /// This method prepares the protovessel class and send the message, it's intended to be run in another thread /// </summary> private void PrepareAndSendProtoVessel(ProtoVessel protoVessel) { //Never send empty vessel id's (it happens with flags...) if (protoVessel.vesselID == Guid.Empty || protoVessel.vesselName == null) { return; } //VesselSerializedBytes is shared so lock it! lock (VesselArraySyncLock) { VesselSerializer.SerializeVesselToArray(protoVessel, VesselSerializedBytes, out var numBytes); if (numBytes > 0) { VesselsProtoStore.RawUpdateVesselProtoData(VesselSerializedBytes, numBytes, protoVessel.vesselID); var msgData = NetworkMain.CliMsgFactory.CreateNewMessageData <VesselProtoMsgData>(); FillAndSendProtoMessageData(protoVessel.vesselID, msgData, VesselSerializedBytes, numBytes); } else { if (protoVessel.vesselType == VesselType.Debris) { LunaLog.Log($"Serialization of debris vessel: {protoVessel.vesselID} name: {protoVessel.vesselName} failed. Adding to kill list"); SystemsContainer.Get <VesselRemoveSystem>().AddToKillList(protoVessel.vesselID); } } } }