コード例 #1
0
        /// <summary>
        /// Deserialize the JSON stream into a .Net object.
        /// For .Net Core/.Net 5.0 uses System.Text.Json
        /// for .Net 4.5.2 uses System.Runtime.Serialization.Json
        /// </summary>
        /// <typeparam name="T">Object type</typeparam>
        /// <param name="eventName">event Name</param>
        /// <param name="stream">JSON stream</param>
        /// <returns>object of type <typeparamref name="T"/></returns>
        private static T DeserializeJsonEvent <T>(string eventName, Stream stream)  where T : EventArgs
        {
            if (typeof(T) == typeof(EventArgs))
            {
                return((T)EventArgs.Empty);
            }

            if (typeof(T) == typeof(DevToolsEventArgs))
            {
                var paramsAsJsonString = StreamToString(stream, leaveOpen: true);
                var args = new DevToolsEventArgs(eventName, paramsAsJsonString);

                return((T)(object)args);
            }

            return((T)DeserializeJson(typeof(T), stream));
        }
コード例 #2
0
ファイル: DevToolsClient.cs プロジェクト: kpreisser/CefSharp
        /// <inheritdoc/>
        public IRegistration RegisterEventHandler <T>(string eventName, EventHandler <T> eventHandler) where T : DevToolsDomainEventArgsBase
        {
            EventHandler <Stream> handler = (sender, stream) =>
            {
                stream.Position = 0;
                if (typeof(T) == typeof(DevToolsEventArgs) || typeof(T) == typeof(DevToolsDomainEventArgsBase))
                {
                    var paramsAsJsonString = StreamToString(stream, leaveOpen: true);
                    var args = new DevToolsEventArgs(eventName, paramsAsJsonString);

                    eventHandler(sender, (T)(object)args);
                }
                else
                {
                    eventHandler(sender, DeserializeJson <T>(stream));
                }
            };

            eventHandlers.AddOrUpdate(eventName, _ => handler, (_, existingHandler) => existingHandler += handler);

            return(new DevToolsEventHandlerRegistration(eventName, handler, eventHandlers));
        }