Ejemplo n.º 1
0
        public static async Task<Data> loadAsync(Configuration.Data configuration, Boolean doReset, Callback callback)
        {
            Int32 Count = 0;
            List<Configuration.Manager.DatabaseInfo> databasesInfo = new List<Configuration.Manager.DatabaseInfo>();
            Data ieeeRecordData = new Data();

            databasesInfo.Add(Configuration.Manager.getDatabaseInfo(ref configuration, Configuration.Manager.ConfigurationElements.IEEE_MAL));
            databasesInfo.Add(Configuration.Manager.getDatabaseInfo(ref configuration, Configuration.Manager.ConfigurationElements.IEEE_MAM));
            databasesInfo.Add(Configuration.Manager.getDatabaseInfo(ref configuration, Configuration.Manager.ConfigurationElements.IEEE_MAS));
            databasesInfo.Add(Configuration.Manager.getDatabaseInfo(ref configuration, Configuration.Manager.ConfigurationElements.IEEE_IAB));
            databasesInfo.Add(Configuration.Manager.getDatabaseInfo(ref configuration, Configuration.Manager.ConfigurationElements.IEEE_CID));
            databasesInfo.Add(Configuration.Manager.getDatabaseInfo(ref configuration, Configuration.Manager.ConfigurationElements.IEEE_Ethertype));
            databasesInfo.Add(Configuration.Manager.getDatabaseInfo(ref configuration, Configuration.Manager.ConfigurationElements.IEEE_Manufacturer));
            databasesInfo.Add(Configuration.Manager.getDatabaseInfo(ref configuration, Configuration.Manager.ConfigurationElements.IEEE_Operator));

            if (callback != null)
                callback(States.start, Count, databasesInfo.Count, ieeeRecordData.Count());

            foreach (Configuration.Manager.DatabaseInfo databaseInfo in databasesInfo)
            {
                if (callback != null)
                    callback(States.update, Count++ +1, databasesInfo.Count, ieeeRecordData.Count());
                PCLStorage.IFile file = null;
                try
                {
                    if (doReset)
                        throw new PCLStorage.Exceptions.FileNotFoundException("Resetting database");

                    file = await PCLStorage.FileSystem.Current.RoamingStorage.GetFileAsync(databaseInfo.fileName);

                    using (Stream stream = await file.OpenAsync(PCLStorage.FileAccess.Read))
                    {
                        Byte[] b = new Byte[stream.Length];

                        if (stream.Read(b, 0, b.Length) > 0)
                            ieeeRecordData.Add(b.GetString());
                    }
                }
                catch
                {

                    using (HttpClient client = new HttpClient())
                    {
                        String payLoad = await client.GetStringAsync(databaseInfo.Uri);
                        ieeeRecordData.Add(payLoad);

                        file = await PCLStorage.FileSystem.Current.RoamingStorage.CreateFileAsync(databaseInfo.fileName, PCLStorage.CreationCollisionOption.ReplaceExisting);
                        using (Stream stream = await file.OpenAsync(PCLStorage.FileAccess.ReadAndWrite))
                        {
                            Byte[] b = payLoad.GetBytes();
                            stream.Write(b, 0, b.Length);
                        }
                        Configuration.Manager.setTimeStamp(ref configuration);
                    }
                }
            }

            if (callback != null)
                callback(States.done, Count, databasesInfo.Count, ieeeRecordData.Count());

            return (ieeeRecordData);
        }