void Send() { if (lastMessageAction != null && lastMessageAction.Waiting) { return; } List <SignalNowTransformableData> toSendTransformable = new List <SignalNowTransformableData>(); while (!outgoingQueue.IsEmpty) { SignalNowData data = null; if (outgoingQueue.TryDequeue(out data) && data != null) { string dataType = data.GetType().Name; if (dataType == typeof(SignalNowTransformableData).Name) { var trans = data as SignalNowTransformableData; var existing = toSendTransformable.Where(t => t.objectName == trans.objectName).FirstOrDefault(); if (existing != null && !string.IsNullOrEmpty(existing.objectName)) { toSendTransformable.Remove(existing); } toSendTransformable.Add(trans); } } } if (toSendTransformable.Count > 0) { try { var settings = new JsonSerializerSettings(); settings.ReferenceLoopHandling = ReferenceLoopHandling.Error; string json = JsonConvert.SerializeObject(toSendTransformable.ToArray(), Formatting.None, settings); lastMessageAction = client.SendElasticMessage(client.GetEveryoneRecipient(), true, typeof(SignalNowTransformableData).Name, json, true); } catch (Exception ex) { Debug.LogError($"Exception when sending an update: {ex.Message}"); } } }