예제 #1
0
        /// <summary>
        /// Test model browse encoder to file
        /// </summary>
        private static async Task TestOpcUaModelExportToFileAsync(EndpointModel endpoint)
        {
            using (var logger = StackLogger.Create(ConsoleLogger.Create())) {
                // Run both encodings twice to prime server and get realistic timings the
                // second time around
                var runs = new Dictionary <string, string> {
                    ["json1.zip"] = ContentMimeType.UaJson,
                    //  ["bin1.zip"] = ContentEncodings.MimeTypeUaBinary,
                    ["json2.zip"] = ContentMimeType.UaJson,
                    //  ["bin2.zip"] = ContentEncodings.MimeTypeUaBinary,
                    ["json1.gzip"] = ContentMimeType.UaJson,
                    //  ["bin1.gzip"] = ContentEncodings.MimeTypeUaBinary,
                    ["json2.gzip"] = ContentMimeType.UaJson,
                    // ["bin2.gzip"] = ContentEncodings.MimeTypeUaBinary
                };

                using (var client = new ClientServices(logger.Logger, new TestClientServicesConfig()))
                    using (var server = new ServerWrapper(endpoint, logger)) {
                        foreach (var run in runs)
                        {
                            var zip = Path.GetExtension(run.Key) == ".zip";
                            Console.WriteLine($"Writing {run.Key}...");
                            var sw = Stopwatch.StartNew();
                            using (var stream = new FileStream(run.Key, FileMode.Create)) {
                                using (var zipped = zip ?
                                                    new DeflateStream(stream, CompressionLevel.Optimal) :
                                                    (Stream) new GZipStream(stream, CompressionLevel.Optimal))
                                    using (var browser = new BrowseStreamEncoder(client, endpoint, zipped,
                                                                                 run.Value, null, logger.Logger, null)) {
                                        await browser.EncodeAsync(CancellationToken.None);
                                    }
                            }
                            var elapsed = sw.Elapsed;
                            using (var file = File.Open(run.Key, FileMode.OpenOrCreate)) {
                                Console.WriteLine($"Encode as {run.Value} to {run.Key} took " +
                                                  $"{elapsed}, and produced {file.Length} bytes.");
                            }
                        }
                    }
            }
        }
예제 #2
0
 /// <summary>
 /// Test model export and import
 /// </summary>
 private static async Task TestOpcUaModelWriterAsync(EndpointModel endpoint)
 {
     using (var logger = StackLogger.Create(ConsoleLogger.Create())) {
         var filename = "model.zip";
         using (var server = new ServerWrapper(endpoint, logger)) {
             using (var client = new ClientServices(logger.Logger, new TestClientServicesConfig())) {
                 Console.WriteLine($"Reading into {filename}...");
                 using (var stream = new FileStream(filename, FileMode.Create)) {
                     using (var zipped = new DeflateStream(stream, CompressionLevel.Optimal))
                         using (var browser = new BrowseStreamEncoder(client, endpoint, zipped,
                                                                      ContentMimeType.UaJson, null, logger.Logger, null)) {
                             await browser.EncodeAsync(CancellationToken.None);
                         }
                 }
             }
         }
         GC.Collect();
         GC.WaitForPendingFinalizers();
         var             serializer = new NewtonSoftJsonSerializer();
         IDatabaseServer database   = new MemoryDatabase(logger.Logger, serializer);
         for (var i = 0; ; i++)
         {
             Console.WriteLine($"{i}: Writing from {filename}...");
             var sw = Stopwatch.StartNew();
             using (var file = File.Open(filename, FileMode.OpenOrCreate)) {
                 using (var unzipped = new DeflateStream(file, CompressionMode.Decompress)) {
                     // TODO
                     // var writer = new SourceStreamImporter(new ItemContainerFactory(database),
                     //     new VariantEncoderFactory(), logger.Logger);
                     // await writer.ImportAsync(unzipped, Path.GetFullPath(filename + i),
                     //     ContentMimeType.UaJson, null, CancellationToken.None);
                 }
             }
             var elapsed = sw.Elapsed;
             Console.WriteLine($"{i}: Writing took {elapsed}.");
         }
     }
 }
예제 #3
0
 /// <summary>
 /// Test model browse encoder
 /// </summary>
 private static async Task TestOpcUaModelExportServiceAsync(EndpointModel endpoint)
 {
     using (var logger = StackLogger.Create(ConsoleLogger.Create()))
         using (var client = new ClientServices(logger.Logger, new TestClientServicesConfig()))
             using (var server = new ServerWrapper(endpoint, logger))
                 using (var stream = Console.OpenStandardOutput())
                     using (var writer = new StreamWriter(stream))
                         using (var json = new JsonTextWriter(writer)
                         {
                             AutoCompleteOnClose = true,
                             Formatting = Formatting.Indented,
                             DateFormatHandling = DateFormatHandling.IsoDateFormat
                         })
                             using (var encoder = new JsonEncoderEx(json, null,
                                                                    JsonEncoderEx.JsonEncoding.Array)
                             {
                                 IgnoreDefaultValues = true,
                                 UseAdvancedEncoding = true
                             })
                                 using (var browser = new BrowseStreamEncoder(client, endpoint, encoder,
                                                                              null, logger.Logger, null)) {
                                     await browser.EncodeAsync(CancellationToken.None);
                                 }
 }
예제 #4
0
            /// <inheritdoc/>
            public async Task SendEventAsync(byte[] data, string contentType,
                                             string eventSchema, string contentEncoding)
            {
                var ev = JsonConvert.DeserializeObject <DiscoveryEventModel>(
                    Encoding.UTF8.GetString(data));
                var endpoint = ev.Registration?.Endpoint;

                if (endpoint == null)
                {
                    return;
                }
                try {
                    var id = endpoint.Url.ToSha1Hash();
                    _logger.Information("Writing {id}.json for {@ev}", id, ev);
                    using (var writer = File.CreateText($"iop_{id}.json"))
                        using (var json = new JsonTextWriter(writer)
                        {
                            AutoCompleteOnClose = true,
                            Formatting = Formatting.Indented,
                            DateFormatHandling = DateFormatHandling.IsoDateFormat
                        })
                            using (var encoder = new JsonEncoderEx(json, null,
                                                                   JsonEncoderEx.JsonEncoding.Array)
                            {
                                IgnoreDefaultValues = true,
                                UseAdvancedEncoding = true
                            })
                                using (var browser = new BrowseStreamEncoder(_client, endpoint, encoder,
                                                                             null, _logger, null)) {
                                    await browser.EncodeAsync(CancellationToken.None);
                                }
                }
                catch (Exception ex) {
                    _logger.Error(ex, "Failed to browse");
                }
            }