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}"); } } }
private Task Receive() { return(Task.Run(() => { List <SignalNowData> datas = new List <SignalNowData>(); while (!incomingQueue.IsEmpty) { SignalNowData data = null; if (incomingQueue.TryDequeue(out data)) { bool doNotAdd = false; if (data is SignalNowObjectStateData) { SignalNowObjectStateData ss = data as SignalNowObjectStateData; var sameObj = datas.FirstOrDefault(d => d is SignalNowObjectStateData && ((SignalNowObjectStateData)d).objectName == ss.objectName) as SignalNowObjectStateData; if (sameObj != null && !string.IsNullOrEmpty(sameObj.objectName)) { if (sameObj.Time < data.Time) { datas.Remove(sameObj); } else { doNotAdd = true; } } } if (!doNotAdd) { datas.Add(data); } } } foreach (var data in datas) { string dataType = data.GetType().Name; /*if (dataType == typeof(SignalNowData).Name) * { * * } * else if (dataType == typeof(SignalNowObjectStateData).Name) * { * var dataState = data as SignalNowObjectStateData; * } * else*/ if (dataType == typeof(SignalNowTransformableData).Name) { var dataTrans = data as SignalNowTransformableData; TransformableUpdated?.Invoke(dataTrans.objectName, dataTrans.position, dataTrans.rotation, dataTrans.scale, dataTrans.Time); } } })); }
public void SendData(SignalNowData data) { outgoingQueue.Enqueue(data); }