Exemple #1
0
    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}");
            }
        }
    }
Exemple #2
0
    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);
                }
            }
        }));
    }
Exemple #3
0
 public void SendData(SignalNowData data)
 {
     outgoingQueue.Enqueue(data);
 }