Ejemplo n.º 1
0
        private void setup()
        {
            cache     = new Dictionary <string, object>();
            cacheKeys = new List <string>();

            server.getStream((success, response) =>
            {
                if (!success)
                {
                    OnError?.Invoke(this, new SpeckleEventArgs("Failed to retrieve stream."));
                    return;
                }
                streamFound        = true;
                streamLiveInstance = response; // this will fail!!!
                setupWebsocket();
            });

            // ready is defined as: streamId exists && wsSessionId && streamWas found.
            isReadyCheck           = new System.Timers.Timer(150);
            isReadyCheck.AutoReset = false; isReadyCheck.Enabled = true;
            isReadyCheck.Elapsed  += (sender, e) =>
            {
                if (server.streamId == null)
                {
                    isReadyCheck.Start(); return;
                }
                if (server.wsSessionId == null)
                {
                    isReadyCheck.Start(); return;
                }
                if (!streamFound)
                {
                    isReadyCheck.Start(); return;
                }

                getObjects(streamLiveInstance as ExpandoObject, (castObjects) =>
                {
                    dynamic eventData = new ExpandoObject();
                    eventData.objects = castObjects;
                    eventData.layers  = SpeckleLayer.fromExpandoList(streamLiveInstance.layers);
                    eventData.name    = streamLiveInstance.name;

                    OnReady?.Invoke(this, new SpeckleEventArgs("receiver ready", eventData));
                });
            };
        }
Ejemplo n.º 2
0
        private void setup()
        {
            if (server.streamId == null)
            {
                server.createNewStream((success, data) =>
                {
                    if (!success)
                    {
                        OnError?.Invoke(this, new SpeckleEventArgs("Failed to create stream."));
                        return;
                    }
                    server.streamId = data.streamId;
                    setupWebsocket();
                });
            }
            else
            {
                server.getStream((success, data) =>
                {
                    if (!success)
                    {
                        OnError?.Invoke(this, new SpeckleEventArgs("Failed to retrieve stream."));
                        return;
                    }
                    setupWebsocket();
                });
            }

            // start the is ready checker timer.
            // "ready" is defined as:
            // a) we have a valid stream id (means we've contacted the server sucessfully)
            // && b) we have a live wsSessionId (means sockets were correctly initialised)

            isReadyCheck           = new System.Timers.Timer(150);
            isReadyCheck.AutoReset = false; isReadyCheck.Enabled = true;
            isReadyCheck.Elapsed  += (sender, e) =>
            {
                if (server.streamId == null)
                {
                    isReadyCheck.Start(); return;
                }
                if (server.wsSessionId == null)
                {
                    isReadyCheck.Start(); return;
                }

                dynamic data = new ExpandoObject();
                data.streamId    = server.streamId;
                data.wsSessionId = server.wsSessionId;

                OnReady?.Invoke(this, new SpeckleEventArgs("sender ready", data));
            };

            // data sender debouncer
            DataSender           = new System.Timers.Timer(dataDebounceInterval);
            DataSender.AutoReset = false; DataSender.Enabled = false;
            DataSender.Elapsed  +=
                (sender, e) =>
            {
                Debug.WriteLine("SPKSENDER: Sending data payload.");

                dynamic x = new ExpandoObject();
                x.objects          = converter.convert(this.objects);
                x.objectProperties = converter.getObjectProperties(this.objects);
                x.layers           = layers;
                x.streamName       = name;

                server.updateStream(x as ExpandoObject, (success, data) =>
                {
                    if (!success)
                    {
                        OnError?.Invoke(this, new SpeckleEventArgs("Failed to update stream."));
                        return;
                    }

                    converter.commitCache();
                    OnDataSent?.Invoke(this, new SpeckleEventArgs("Stream was updated."));
                });
                DataSender.Stop();
            };

            // metadata sender debouncer
            MetadataSender           = new System.Timers.Timer(metaDebounceInterval);
            MetadataSender.AutoReset = false; MetadataSender.Enabled = false;
            MetadataSender.Elapsed  += (sender, e) =>
            {
                Debug.WriteLine("SPKSENDER: Sending meta payload.");

                dynamic payload = new ExpandoObject();
                payload.layers     = layers;
                payload.streamName = name;

                server.updateStreamMetadata(payload as ExpandoObject, (success, response) =>
                {
                    if (!success)
                    {
                        OnError?.Invoke(this, new SpeckleEventArgs("Failed to update stream metadata."));
                        return;
                    }
                    OnDataSent?.Invoke(this, new SpeckleEventArgs("Stream metadata was updated."));
                });
            };
        }