コード例 #1
0
        public void SeqStructuredCustomObject()
        {
            var mockRequestFactory = new MockHttpWebRequestFactory();

            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );

            var listener = new SeqTraceListener("http://testuri");

            listener.BatchSize = 0;
            listener.BatchSender.HttpWebRequestFactory = mockRequestFactory;

            var structuredData = new StructuredData("{a}", new TestObject());

            listener.TraceData(null, "TestSource", TraceEventType.Warning, 1, structuredData);

            Assert.AreEqual(1, mockRequestFactory.RequestsCreated.Count);

            var request     = mockRequestFactory.RequestsCreated[0];
            var requestBody = request.RequestBody;

            Console.WriteLine(requestBody);
            StringAssert.Contains(requestBody, "\"MessageTemplate\":\"{a}\"");
            // Note that the '\' is encoded as '\\'
            StringAssert.Contains(requestBody, @"""a"":""w=x\\y'z""");
        }
コード例 #2
0
        public void SeqHandlesStructuredDataProperties()
        {
            var mockRequestFactory = new MockHttpWebRequestFactory();

            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );

            var listener = new SeqTraceListener("http://testuri");

            listener.BatchSize = 0;
            listener.BatchSender.HttpWebRequestFactory = mockRequestFactory;

            var structuredData = new StructuredData(new Dictionary <string, object>()
            {
                { "a", 1 }
            }, "{a}");

            listener.TraceData(null, "TestSource", TraceEventType.Warning, 1, structuredData);

            Assert.AreEqual(1, mockRequestFactory.RequestsCreated.Count);

            var request     = mockRequestFactory.RequestsCreated[0];
            var requestBody = request.RequestBody;

            Console.WriteLine(requestBody);
            StringAssert.Contains(requestBody, "\"MessageTemplate\":\"{a}\"");
            StringAssert.Contains(requestBody, "\"a\":1");
            var regexEvent1 = new Regex("\"EventId\":1");

            StringAssert.Matches(requestBody, regexEvent1);
        }
コード例 #3
0
        public void SeqStructuredChildArray()
        {
            var mockRequestFactory = new MockHttpWebRequestFactory();

            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );

            var listener = new SeqTraceListener("http://testuri");

            listener.BatchSize = 0;
            listener.BatchSender.HttpWebRequestFactory = mockRequestFactory;

            var list1 = new ArrayList()
            {
                1, "A"
            };
            var dictionary2 = new Dictionary <string, object>()
            {
                { "x", 2 },
                { "y", list1 }
            };
            var structuredData = new StructuredData("{a}", dictionary2);

            listener.TraceData(null, "TestSource", TraceEventType.Warning, 1, structuredData);

            Assert.AreEqual(1, mockRequestFactory.RequestsCreated.Count);

            var request     = mockRequestFactory.RequestsCreated[0];
            var requestBody = request.RequestBody;

            Console.WriteLine(requestBody);
            StringAssert.Contains(requestBody, "\"MessageTemplate\":\"{a}\"");
            StringAssert.Contains(requestBody, "\"a\":{\"x\":2,\"y\":[1,\"A\"]}");
        }
コード例 #4
0
        public void SeqStructuredArray()
        {
            var mockRequestFactory = new MockHttpWebRequestFactory();

            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );

            var listener = new SeqTraceListener("http://testuri");

            listener.BatchSize = 0;
            listener.BatchSender.HttpWebRequestFactory = mockRequestFactory;

            var structuredData = new StructuredData("{a}", new [] { 1, 2, 3 });

            listener.TraceData(null, "TestSource", TraceEventType.Warning, 1, structuredData);

            Assert.AreEqual(1, mockRequestFactory.RequestsCreated.Count);

            var request     = mockRequestFactory.RequestsCreated[0];
            var requestBody = request.RequestBody;

            Console.WriteLine(requestBody);
            StringAssert.Contains(requestBody, "\"MessageTemplate\":\"{a}\"");
            StringAssert.Contains(requestBody, "\"a\":[1,2,3]");
        }
コード例 #5
0
        public void SeqDestructureCustomObject()
        {
            var mockRequestFactory = new MockHttpWebRequestFactory();

            mockRequestFactory.ResponseQueue.Enqueue(
                new MockHttpWebResponse(HttpStatusCode.OK, null)
                );

            var listener = new SeqTraceListener("http://testuri");

            listener.BatchSize = 0;
            listener.BatchSender.HttpWebRequestFactory = mockRequestFactory;

            var testObject = new TestObject()
            {
                X = 1.2, Y = 3.4
            };
            var structuredData = new StructuredData("{@a}", testObject);

            listener.TraceData(null, "TestSource", TraceEventType.Warning, 1, structuredData);

            Assert.AreEqual(1, mockRequestFactory.RequestsCreated.Count);

            var request     = mockRequestFactory.RequestsCreated[0];
            var requestBody = request.RequestBody;

            Console.WriteLine(requestBody);
            StringAssert.Contains(requestBody, "\"MessageTemplate\":\"{@a}\"");
            StringAssert.Contains(requestBody, "\"a\":{\"X\":1.2,\"Y\":3.4}");
        }
コード例 #6
0
        public void StructuredChildDictionary()
        {
            var child1 = new Dictionary <string, object>()
            {
                { "X", "A" },
                { "Y", 1 }
            };

            var list1 = new ArrayList()
            {
                "x", child1
            };
            var obj2 = new TestObject2()
            {
                M = "y", N = child1
            };

            var properties = new Dictionary <string, object>()
            {
                { "a", list1 },
                { "@b", obj2 },
            };

            IStructuredData data   = new StructuredData(properties);
            var             actual = data.ToString();

            Assert.AreEqual("a=['x','System.Collections.Generic.Dictionary`2[System.String,System.Object]'] b=(M='y' N='System.Collections.Generic.Dictionary`2[System.String,System.Object]')", actual);
        }
コード例 #7
0
        public string CreateJsonLDSummary(SearchResult searchResult)
        {
            StructuredData structuredData = new StructuredData();

            List <ItemListElement> itemListElements = new List <ItemListElement>();
            int itemElementCounter = 0;

            foreach (var movie in searchResult.Search)
            {
                Item item = new Item();
                item.name  = movie.Title;
                item.image = movie.Poster;

                ItemListElement itemListElement = new ItemListElement();
                itemListElement.position = (itemElementCounter++).ToString();
                itemListElement.item     = item;

                itemListElements.Add(itemListElement);
            }
            structuredData.itemListElement = itemListElements;

            string jsonLD = JsonConvert.SerializeObject(structuredData);

            return(jsonLD);
        }
コード例 #8
0
        public void StructuredNullableValue()
        {
            int?b          = -2;
            int?k          = null;
            var properties = new Dictionary <string, object>()
            {
                { "a", (short?)-1 },
                { "b", b },
                { "c", (long?)-3 },
                { "d", (ushort?)4 },
                { "e", (uint?)5 },
                { "f", (ulong?)6 },
                { "g", (sbyte?)7 },
                { "h", (float?)8.1 },
                { "i", (double?)9.2 },
                { "j", (decimal?)10.3 },
                { "k", k },
            };

            IStructuredData data   = new StructuredData(properties);
            var             actual = data.ToString();

            Console.WriteLine(actual);
            Assert.AreEqual("a=-1 b=-2 c=-3 d=4 e=5 f=6 g=7 h=8.1 i=9.2 j=10.3 k=null", actual);
        }
コード例 #9
0
        public void StructuredStringExtraValues()
        {
            IStructuredData data   = new StructuredData("x{a}", 1, 2);
            var             actual = data.ToString();

            Assert.AreEqual(@"x1; Extra1=2", actual);
        }
コード例 #10
0
        public void StructuredChildArray()
        {
            var child1 = new ArrayList()
            {
                1, "A"
            };

            var list1 = new ArrayList()
            {
                "x", child1
            };
            var obj2 = new TestObject2()
            {
                M = "y", N = child1
            };
            var dict3 = new Dictionary <string, object>()
            {
                { "P", "z" },
                { "Q", child1 }
            };

            var properties = new Dictionary <string, object>()
            {
                { "a", list1 },
                { "@b", obj2 },
                { "c", dict3 },
            };

            IStructuredData data   = new StructuredData(properties);
            var             actual = data.ToString();

            Assert.AreEqual("a=['x','System.Collections.ArrayList'] b=(M='y' N=[1,'A']) c=(P='z' Q=[1,'A'])", actual);
        }
コード例 #11
0
        public void StructuredStringWithDuplicateTemplateValues()
        {
            IStructuredData data   = new StructuredData("{a}x{a}", "A", "B");
            var             actual = data.ToString();

            Assert.AreEqual("BxB", actual);
        }
コード例 #12
0
        public void StructuredStringFormatValue()
        {
            var template = "x{a}";

            IStructuredData data   = new StructuredData(template, 1);
            var             actual = data.ToString();

            Assert.AreEqual("x1", actual);
        }
コード例 #13
0
        // Logical Operation Scope

        /// <summary>
        /// Starts a new structured data logical operation scope, typically output as additional structured properties.
        /// </summary>
        /// <param name="key">The additional structured property to include</param>
        /// <param name="value">The additional structured property value</param>
        /// <returns>A scope object that ends the scope whem disposed.</returns>
        public IDisposable BeginScope(string key, object value)
        {
            var structuredData = new StructuredData(new Dictionary <string, object>()
            {
                { key, value }
            });

            return(BeginScope(structuredData));
        }
コード例 #14
0
        public void StructuredStringValuesMissingAreBlank()
        {
            var template = "{a}x{b}y";
            var a        = "A";

            IStructuredData data   = new StructuredData(template, a);
            var             actual = data.ToString();

            Assert.AreEqual("Ax{b}y", actual);
        }
コード例 #15
0
        public override string ToString()
        {
            string structuredDataString = null;

            if (StructuredData != null)
            {
                structuredDataString = string.Join(", ", StructuredData.Select(e => e.ToString()));
            }

            return($"Header: {Header}, StructuredData: [{structuredDataString}], Message: {Message}");
        }
コード例 #16
0
        public override int GetHashCode()
        {
            unchecked
            {
                var hashCode = Header != null?Header.GetHashCode() : 0;

                hashCode = (hashCode * 397) ^ (StructuredData != null ? StructuredData.GetHashCode() : 0);
                hashCode = (hashCode * 397) ^ (Message != null ? Message.GetHashCode() : 0);
                return(hashCode);
            }
        }
コード例 #17
0
        public void StructuredPropertyValue()
        {
            var template = "x{a}";

            IStructuredData data = new StructuredData(template, "A");
            IDictionary <string, object> actual = data;

            Assert.AreEqual(1 + 1, actual.Count);
            Assert.AreEqual("a", actual.Keys.First());
            Assert.AreEqual("A", actual["a"]);
        }
コード例 #18
0
        public void StructuredStringValuesInOrder()
        {
            var template = "{b}x{a}";
            var a        = "A";
            var b        = "B";

            IStructuredData data   = new StructuredData(template, a, b);
            var             actual = data.ToString();

            Assert.AreEqual("AxB", actual);
        }
コード例 #19
0
        public string CreateJsonLDMovie(MovieDetail movieDetail)
        {
            // return string.Empty;

            StructuredData structuredData = new StructuredData();

            List <ItemListElement> itemListElements = new List <ItemListElement>();
            int itemElementCounter = 0;

            //  foreach (var movie in movieDetail)
            {
                Item item = new Item();
                item.name        = movieDetail.Title;
                item.image       = movieDetail.Poster;
                item.dateCreated = movieDetail.Released;

                Director director = new Director();
                director.name = movieDetail.Director;
                item.director = director;

                Review review = new Review();

                ReviewRating reviewRating = new ReviewRating();
                reviewRating.ratingValue = movieDetail.Ratings[0].Value;
                review.reviewRating      = reviewRating;

                Author author = new Author();
                author.name   = movieDetail.Writer;
                review.author = author;

                review.reviewBody = movieDetail.Response;

                AggregateRating aggregateRating = new AggregateRating();
                aggregateRating.bestRating  = movieDetail.Ratings[0].Value;
                aggregateRating.ratingValue = movieDetail.Rated;
                aggregateRating.ratingCount = movieDetail.Ratings.Length.ToString();
                review.aggregateRating      = aggregateRating;

                item.review = review;



                ItemListElement itemListElement = new ItemListElement();
                itemListElement.position = (itemElementCounter++).ToString();
                itemListElement.item     = item;

                itemListElements.Add(itemListElement);
            }
            structuredData.itemListElement = itemListElements;

            string jsonLD = JsonConvert.SerializeObject(structuredData);

            return(jsonLD);
        }
コード例 #20
0
        public void StructuredEscapedStringValue()
        {
            var properties = new Dictionary <string, object>()
            {
                { "a", @"w=x\y'z" },
            };

            IStructuredData data   = new StructuredData(properties);
            var             actual = data.ToString();

            Assert.AreEqual(@"a='w=x\\y\'z'", actual);
        }
コード例 #21
0
        public void StructuredEscapePropertyName()
        {
            var properties = new Dictionary <string, object>()
            {
                { "a b=c", 1 },
            };

            IStructuredData data   = new StructuredData(properties);
            var             actual = data.ToString();

            Assert.AreEqual("a_bc=1", actual);
        }
コード例 #22
0
        public void StructuredStringMessageAndProperty()
        {
            var properties = new Dictionary <string, object>()
            {
                { "a", 1 },
            };

            IStructuredData data   = new StructuredData(properties, "X");
            var             actual = data.ToString();

            Assert.AreEqual("X; a=1", actual);
        }
コード例 #23
0
        public void StructuredStringPropertyOnly()
        {
            var properties = new Dictionary <string, object>()
            {
                { "a", 1 },
            };

            IStructuredData data   = new StructuredData(properties);
            var             actual = data.ToString();

            Assert.AreEqual("a=1", actual);
        }
コード例 #24
0
        public void StructuredGuidValue()
        {
            var properties = new Dictionary <string, object>()
            {
                { "a", new Guid("12345678-abcd-4321-8765-ba9876543210") },
            };

            IStructuredData data   = new StructuredData(properties);
            var             actual = data.ToString();

            Assert.AreEqual("a=12345678-abcd-4321-8765-ba9876543210", actual);
        }
コード例 #25
0
        public void DestructuredCustomObjectMessage()
        {
            var testObject = new TestObject()
            {
                X = 1.2, Y = 3.4
            };

            IStructuredData data   = new StructuredData("z{@a}", testObject);
            var             actual = data.ToString();

            Assert.AreEqual(@"z(X=1.2 Y=3.4)", actual);
        }
コード例 #26
0
        public void StructuredCustomObjectValue()
        {
            var properties = new Dictionary <string, object>()
            {
                { "a", new TestObject() },
            };

            IStructuredData data   = new StructuredData(properties);
            var             actual = data.ToString();

            Assert.AreEqual(@"a='w=x\\y\'z'", actual);
        }
コード例 #27
0
        public void StructuredEnumValue()
        {
            var properties = new Dictionary <string, object>()
            {
                { "a", (TestEnum)5 },
            };

            IStructuredData data   = new StructuredData(properties);
            var             actual = data.ToString();

            Assert.AreEqual("a='Flag1, Flag3'", actual);
        }
コード例 #28
0
        public void StructuredBasicStringValue()
        {
            var properties = new Dictionary <string, object>()
            {
                { "a", "A" },
            };

            IStructuredData data   = new StructuredData(properties);
            var             actual = data.ToString();

            Assert.AreEqual("a='A'", actual);
        }
コード例 #29
0
        private void LogSampleLogs()
        {
            var structuredData = new StructuredData();
            var simpleData     = "This is a string.";

            _logger.LogTrace("Here's a Verbose message.");
            _logger.LogDebug("Here's a Debug message. Only Public Properties (not fields) are shown on structured data. Structured data: {@sampleData}. Simple data: {simpleData}.", structuredData, simpleData);
            _logger.LogInformation(new Exception("Exceptions can be put on all log levels"), "Here's an Info message.");
            _logger.LogWarning("Here's a Warning message.");
            _logger.LogError(new Exception("This is an exception."), "Here's an Error message.");
            _logger.LogCritical("Here's a Fatal message.");
        }
コード例 #30
0
        public void StructuredStringFormatProperty()
        {
            var template   = "x{a}";
            var properties = new Dictionary <string, object>()
            {
                { "a", 1 },
            };

            IStructuredData data   = new StructuredData(properties, template);
            var             actual = data.ToString();

            Assert.AreEqual("x1", actual);
        }
コード例 #31
0
ファイル: EventDictionary.cs プロジェクト: RavenB/gridsearch
        /// <summary>
        /// Fire the events registered for this event type asynchronously
        /// </summary>
        /// <param name="capsEvent">Capability name</param>
        /// <param name="body">Decoded event body</param>
        /// <param name="simulator">Reference to the simulator that 
        /// generated this event</param>
        internal void BeginRaiseEvent(string capsEvent, StructuredData.LLSD body, Simulator simulator)
        {
            bool specialHandler = false;
            Caps.EventQueueCallback callback;

            // Default handler first, if one exists
            if (_EventTable.TryGetValue(String.Empty, out callback))
            {
                if (callback != null)
                {
                    CapsCallbackWrapper wrapper;
                    wrapper.Callback = callback;
                    wrapper.CapsEvent = capsEvent;
                    wrapper.Body = body;
                    wrapper.Simulator = simulator;
                    ThreadPool.QueueUserWorkItem(_ThreadPoolCallback, wrapper);
                }
            }

            // Generic parser next, don't generic parse events we've manually registered for
            if (body.Type == StructuredData.LLSDType.Map && !_EventTable.ContainsKey(capsEvent))
            {
                StructuredData.LLSDMap map = (StructuredData.LLSDMap)body;
                Packet packet = Packet.BuildPacket(capsEvent, map);
                if (packet != null)
                {
                    NetworkManager.IncomingPacket incomingPacket;
                    incomingPacket.Simulator = simulator;
                    incomingPacket.Packet = packet;

                    Client.DebugLog("Serializing " + packet.Type.ToString() + " capability with generic handler");

                    Client.Network.PacketInbox.Enqueue(incomingPacket);
                    specialHandler = true;
                }
            }
            
            // Explicit handler next
            if (_EventTable.TryGetValue(capsEvent, out callback) && callback != null)
            {
                CapsCallbackWrapper wrapper;
                wrapper.Callback = callback;
                wrapper.CapsEvent = capsEvent;
                wrapper.Body = body;
                wrapper.Simulator = simulator;
                ThreadPool.QueueUserWorkItem(_ThreadPoolCallback, wrapper);

                specialHandler = true;
            }

            if (!specialHandler)
                Client.Log("Unhandled CAPS event " + capsEvent, Helpers.LogLevel.Warning);
        }
コード例 #32
0
ファイル: EventDictionary.cs プロジェクト: RavenB/gridsearch
        /// <summary>
        /// Fire the events registered for this event type synchronously
        /// </summary>
        /// <param name="capsEvent">Capability name</param>
        /// <param name="body">Decoded event body</param>
        /// <param name="simulator">Reference to the simulator that 
        /// generated this event</param>
        internal void RaiseEvent(string capsEvent, StructuredData.LLSD body, Simulator simulator)
        {
            bool specialHandler = false;
            Caps.EventQueueCallback callback;

            // Default handler first, if one exists
            if (_EventTable.TryGetValue(capsEvent, out callback))
            {
                if (callback != null)
                {
                    try { callback(capsEvent, body, simulator); }
                    catch (Exception ex) { Client.Log("CAPS Event Handler: " + ex.ToString(), Helpers.LogLevel.Error); }
                }
            }

            // Generic parser next
            if (body.Type == StructuredData.LLSDType.Map)
            {
                StructuredData.LLSDMap map = (StructuredData.LLSDMap)body;
                Packet packet = Packet.BuildPacket(capsEvent, map);
                if (packet != null)
                {
                    NetworkManager.IncomingPacket incomingPacket;
                    incomingPacket.Simulator = simulator;
                    incomingPacket.Packet = packet;

                    Client.DebugLog("Serializing " + packet.Type.ToString() + " capability with generic handler");

                    Client.Network.PacketInbox.Enqueue(incomingPacket);
                    specialHandler = true;
                }
            }

            // Explicit handler next
            if (_EventTable.TryGetValue(capsEvent, out callback) && callback != null)
            {
                try { callback(capsEvent, body, simulator); }
                catch (Exception ex) { Client.Log("CAPS Event Handler: " + ex.ToString(), Helpers.LogLevel.Error); }

                specialHandler = true;
            }

            if (!specialHandler)
                Client.Log("Unhandled CAPS event " + capsEvent, Helpers.LogLevel.Warning);
        }
コード例 #33
0
        /// <summary>
        /// Deserializes OSD in to a list of primitives
        /// </summary>
        /// <param name="osd">Structure holding the serialized primitive list,
        /// must be of the SDMap type</param>
        /// <returns>A list of deserialized primitives</returns>
        public static List<Primitive> OSDToPrimList(StructuredData.OSD osd)
        {
            if (osd.Type != StructuredData.OSDType.Map)
                throw new ArgumentException("LLSD must be in the Map structure");

            StructuredData.OSDMap map = (StructuredData.OSDMap)osd;
            List<Primitive> prims = new List<Primitive>(map.Count);

            foreach (KeyValuePair<string, StructuredData.OSD> kvp in map)
            {
                Primitive prim = Primitive.FromOSD(kvp.Value);
                prim.LocalID = UInt32.Parse(kvp.Key);
                prims.Add(prim);
            }

            return prims;
        }