private IEnumerable <DeviceBlueprint> Load(string manifest)
        {
            JToken root = JsonConvert.DeserializeObject(manifest) as JToken;

            var globalSettingsToken = root["globalSettings"];

            if (globalSettingsToken != null)
            {
                GlobalSettings.Instance.Load(globalSettingsToken);
            }

            var devices = new List <DeviceBlueprint>();

            var groups = root["deviceGroups"] as JArray;

            foreach (var group in groups)
            {
                var name     = group.Value <string>("name");
                var jobs     = group["jobs"] as JArray;
                var template = new DeviceTemplate(name, jobs);

                var deviceCredentials = group["devices"] as JArray;
                foreach (var deviceCredential in deviceCredentials)
                {
                    var deviceId     = deviceCredential.Value <string>("deviceId");
                    var deviceSecret = deviceCredential.Value <string>("deviceSecret");
                    var device       = new DeviceBlueprint(deviceId, deviceSecret, template);

                    devices.Add(device);
                }
            }

            return(devices);
        }
Beispiel #2
0
        public void Start(DeviceBlueprint blueprint)
        {
            DeviceId     = blueprint.DeviceId;
            DeviceSecret = blueprint.DeviceSecret;
            Trace.TraceInformation(string.Format(CultureInfo.InvariantCulture, "Device {0} status = Booting", DeviceId));

            var tasks = new List <Task>();

            foreach (var job in blueprint.Template.Jobs)
            {
                try
                {
                    //Instance filters
                    var sourceFilter = ActivatorExternsion.CreateInstance <ISource>(job.Source.Type);
                    sourceFilter.Initialize(job.Source.Parameters, this);

                    //Chris Han - try to inject DeviceId
                    //Newtonsoft.Json.Linq.JObject did = (Newtonsoft.Json.Linq.JObject)job.Source.Parameters;//.Value<Newtonsoft.Json.Linq.JToken>("DeviceId");
                    //var p = did["parameters"]["DeviceId"];
                    //var k = DeviceId;

                    sourceFilter.Initialize(job.Source.Parameters, this);

                    var intermediaFilters = job.Intermedias.Select(f =>
                    {
                        var filter = ActivatorExternsion.CreateInstance <IIntermedia>(f.Type);
                        filter.Initialize(f.Parameters, this);
                        return(filter);
                    });

                    var sinkFilter = ActivatorExternsion.CreateInstance <ISink>(job.Sink.Type);
                    sinkFilter.Initialize(job.Sink.Parameters, this);

                    //Kick-off the Job. Record the task object for checking while they were stopped
                    tasks.Add(JobEntry(job.Name, job.Interval, sourceFilter, intermediaFilters, sinkFilter, _source.Token));
                }
                catch (TypeLoadException ex)
                {
                    Trace.TraceError(string.Format(CultureInfo.InvariantCulture, "Failed to start device {0} due to exception {1}", DeviceId, ex.ToString()));
                }
            }

            _runningTasks = tasks.ToArray();
            Trace.TraceInformation(string.Format(CultureInfo.InvariantCulture, "Device {0} status = Running", DeviceId));
        }