Example #1
0
        /// <summary>
        /// Handles the signaling of this <see cref="DataWatcher"/>.
        /// </summary>
        protected override void HandleSignaling()
        {
            lock (_locker)
            {
                DateTime        utcLastModified = DateTime.UtcNow;
                List <object[]> values          = new List <object[]>();
                DataManager     manager         = Manager.Clone();
                using (DbDataReader reader = manager.ExecuteReader(Command, Parameters))
                {
                    while (reader.Read())
                    {
                        object[] readerValues = new object[reader.FieldCount];
                        reader.GetValues(readerValues);
                        values.Add(readerValues);
                    }
                }
                long currentSignature = StructUtility.GetHashCode64(EnumerableConverter.Parse(values, o => o.GetHashCode()));
                values.Clear();

                if (Signature == 0)
                {
                    Signature = currentSignature;
                }
                if (!Signature.Equals(currentSignature))
                {
                    SetUtcLastModified(utcLastModified);
                    OnChangedRaised();
                }
                Signature = currentSignature;
            }
        }
Example #2
0
        /// <summary>
        /// Sets a callback to be used whenever texture data is requested by a shader.
        /// The callback will be passed the u, v and w coordinates.
        /// </summary>
        /// <typeparam name="TColor">Color type, i.e. Vector4.</typeparam>
        /// <param name="name">Name of the resource.</param>
        /// <param name="callback">The callback will be executed once for each texture fetch,
        /// and will be passed the u, v and w coordinates.</param>
        public void SetResource <TColor>(string name, ResourceCallback <TColor> callback)
            where TColor : struct
        {
            // Validate.
            var resourceIndex = _resourceBindings.FindIndex(x => x.Name == name);

            if (resourceIndex == -1)
            {
                throw new ArgumentException("Could not find resource named '" + name + "'", "name");
            }
            if (StructUtility.SizeOf <TColor>() != Number4.SizeInBytes)
            {
                throw new ArgumentException(string.Format("Expected color struct to be {0} bytes, but was {1}'",
                                                          Number4.SizeInBytes, StructUtility.SizeOf <TColor>()));
            }

            // Set resource into virtual machine. We also set a default sampler state.
            var registerIndex = new RegisterIndex((ushort)resourceIndex);

            _virtualMachine.SetSampler(registerIndex, new SamplerState());
            _virtualMachine.SetTexture(registerIndex,
                                       new FakeTexture((u, v, w, i) =>
            {
                var bytes = StructUtility.ToBytes(callback(u, v, w, i));
                return(Number4.FromByteArray(bytes, 0));
            }));
        }
Example #3
0
        /// <summary>
        /// Combines a sequence of objects into one object, and computes a hash value of the specified <paramref name="values"/>.
        /// </summary>
        /// <param name="values">The objects to compute a hash code for.</param>
        /// <param name="setup">The <see cref="HashOptions"/> which need to be configured.</param>
        /// <returns>A <see cref="HashResult"/> containing the computed hash value of the specified object sequence <paramref name="values"/>.</returns>
        public static HashResult ComputeHash(object[] values, Action <HashOptions> setup = null)
        {
            Validator.ThrowIfNull(values, nameof(values));
            var  options   = setup.ConfigureOptions();
            long signature = StructUtility.GetHashCode64(EnumerableConverter.Parse(values, o => o.GetHashCode()));

            return(ComputeHash(BitConverter.GetBytes(signature), o => o.AlgorithmType = options.AlgorithmType));
        }
        private void HandlePacket(PacketHeader packet, byte[] bytes)
        {
            _telemetryRecorder.RecordPacket(packet, bytes);

            switch (packet.PacketType)
            {
            case PacketType.Motion:
                var motionPacket = StructUtility.ConvertToPacket <PacketMotionData>(bytes);
                OnMotionPacketReceived(new PacketReceivedEventArgs <PacketMotionData>(_oldMotionData, motionPacket));
                _oldMotionData = motionPacket;
                break;

            case PacketType.Session:
                var sessionPacket = StructUtility.ConvertToPacket <PacketSessionData>(bytes);
                OnSessionPacketReceived(new PacketReceivedEventArgs <PacketSessionData>(_oldSessionData, sessionPacket));
                _oldSessionData = sessionPacket;
                break;

            case PacketType.LapData:
                var lapPacket = StructUtility.ConvertToPacket <PacketLapData>(bytes);
                OnLapPacketReceivedReceived(new PacketReceivedEventArgs <PacketLapData>(_oldLapData, lapPacket));
                _oldLapData = lapPacket;
                break;

            case PacketType.Event:
                var eventPacket = StructUtility.ConvertToPacket <EventPacket>(bytes);
                OnEventPacketReceived(new PacketReceivedEventArgs <EventPacket>(_oldEventPacket, eventPacket));
                _oldEventPacket = eventPacket;
                break;

            case PacketType.Participants:
                var participantPacket = StructUtility.ConvertToPacket <PacketParticipantsData>(bytes);
                OnParticipantsPacketReceived(new PacketReceivedEventArgs <PacketParticipantsData>(_oldParticipantsData, participantPacket));
                _oldParticipantsData = participantPacket;
                break;

            case PacketType.CarSetups:
                var carSetupsPacket = StructUtility.ConvertToPacket <PacketCarSetupData>(bytes);
                OnCarSetupPacketReceived(new PacketReceivedEventArgs <PacketCarSetupData>(_oldCarSetupData, carSetupsPacket));
                _oldCarSetupData = carSetupsPacket;
                break;

            case PacketType.CarTelemetry:
                var carTelemetryPacket = StructUtility.ConvertToPacket <PacketCarTelemetryData>(bytes);
                OnCarTelemetryPacketReceived(new PacketReceivedEventArgs <PacketCarTelemetryData>(_oldCarTelemetryData, carTelemetryPacket));
                _oldCarTelemetryData = carTelemetryPacket;
                break;

            case PacketType.CarStatus:
                var carStatusPacket = StructUtility.ConvertToPacket <PacketCarStatusData>(bytes);
                OnCarStatusPacketReceived(new PacketReceivedEventArgs <PacketCarStatusData>(_oldCarStatusData, carStatusPacket));
                _oldCarStatusData = carStatusPacket;
                break;
            }

            _oldSessionId       = packet.SessionUId;
            _oldFrameIdentifier = packet.FrameIdentifier;
        }
Example #5
0
        private static void SetConstantBuffer <T>(VirtualMachine vm, ushort constantBufferIndex, T data)
        {
            var bytes = StructUtility.ToBytes(data);

            for (var i = 0; i < bytes.Length; i += 16)
            {
                vm.SetRegister(0, OperandType.ConstantBuffer,
                               new RegisterIndex(constantBufferIndex, (ushort)(i / 16)),
                               Number4.FromByteArray(bytes, i));
            }
        }
        public void OnDebugDataSelected(object sender, SelectionChangedEventArgs e)
        {
            if (e.AddedItems.Count == 0)
            {
                return;
            }

            var selectedDebugData = ((DebugModel)e.AddedItems[0]);

            switch (selectedDebugData.PacketType)
            {
            case PacketType.Motion:
                PacketMotionData motionData = StructUtility.ConvertToPacket <PacketMotionData>(selectedDebugData.Data);
                DebugDetails = new ObjectViewModelHierarchy(motionData);
                return;

            case PacketType.Session:
                PacketSessionData sessionData = StructUtility.ConvertToPacket <PacketSessionData>(selectedDebugData.Data);
                DebugDetails = new ObjectViewModelHierarchy(sessionData);
                return;

            case PacketType.LapData:
                PacketLapData lapData = StructUtility.ConvertToPacket <PacketLapData>(selectedDebugData.Data);
                DebugDetails = new ObjectViewModelHierarchy(lapData);
                return;

            case PacketType.Event:
                EventPacket eventData = StructUtility.ConvertToPacket <EventPacket>(selectedDebugData.Data);
                DebugDetails = new ObjectViewModelHierarchy(eventData);
                return;

            case PacketType.Participants:
                PacketParticipantsData participantsData = StructUtility.ConvertToPacket <PacketParticipantsData>(selectedDebugData.Data);
                DebugDetails = new ObjectViewModelHierarchy(participantsData);
                return;

            case PacketType.CarSetups:
                PacketCarSetupData carSetupsData = StructUtility.ConvertToPacket <PacketCarSetupData>(selectedDebugData.Data);
                DebugDetails = new ObjectViewModelHierarchy(carSetupsData);
                return;

            case PacketType.CarTelemetry:
                PacketCarTelemetryData carTelemetryData = StructUtility.ConvertToPacket <PacketCarTelemetryData>(selectedDebugData.Data);
                DebugDetails = new ObjectViewModelHierarchy(carTelemetryData);
                return;

            case PacketType.CarStatus:
                PacketCarStatusData carStatusData = StructUtility.ConvertToPacket <PacketCarStatusData>(selectedDebugData.Data);
                DebugDetails = new ObjectViewModelHierarchy(carStatusData);
                return;
            }
        }
Example #7
0
        /// <summary>
        /// Combines the <paramref name="additionalChecksum"/> to the representation of this instance.
        /// </summary>
        /// <param name="additionalChecksum">A <see cref="String"/> array that contains zero or more checksums of the additional data this instance must represent.</param>
        public ChecksumBuilder CombineWith(params string[] additionalChecksum)
        {
            List <long> result = new List <long>();

            if (additionalChecksum == null)
            {
                result.Add(StructUtility.HashCodeForNullValue);
            }
            else
            {
                for (int i = 0; i < additionalChecksum.Length; i++)
                {
                    result.Add(StructUtility.GetHashCode64(additionalChecksum[i]));
                }
            }
            return(CombineWith(result.ToArray()));
        }
Example #8
0
        /// <summary>
        /// Sets a constant buffer with the given name and value.
        /// This must be done before executing the shader.
        /// </summary>
        public void SetConstantBuffer <T>(string name, T value)
            where T : struct
        {
            // Validate.
            var constantBufferIndex = _constantBuffers.FindIndex(x => x.Name == name);

            if (constantBufferIndex == -1)
            {
                throw new ArgumentException("Could not find constant buffer named '" + name + "'", "name");
            }

            // Set constant buffer into virtual machine registers.
            var bytes = StructUtility.ToBytes(value);

            for (var i = 0; i < bytes.Length; i += 16)
            {
                _virtualMachine.SetConstantBufferRegisterValue(constantBufferIndex, i / 16,
                                                               Number4.FromByteArray(bytes, i));
            }
        }
        private void UdpLoop()
        {
            while (true)
            {
                InitUdp(_port);
                try
                {
                    _udpClient.Client.ReceiveTimeout = 5000;
                    byte[] receiveBytes = _udpClient.Receive(ref _senderIp);
                    var    packet       = StructUtility.ConvertToPacket <PacketHeader>(receiveBytes);
                    HandlePacket(packet, receiveBytes);
                }
#pragma warning disable RECS0022 // A catch clause that catches System.Exception and has an empty body
                catch (Exception)
#pragma warning restore RECS0022 // A catch clause that catches System.Exception and has an empty body
                {
                    // can be ignored (timeout etc)
                }
            }
        }
Example #10
0
        /// <summary>
        /// Executes the shader. First, the input value is set into the input registers.
        /// Then the shader is executed. Finally, the output value is extracted from
        /// the output registers.
        /// </summary>
        /// <typeparam name="TInput">Input type. This must be a struct whose byte count
        /// exactly matches the shader input.</typeparam>
        /// <typeparam name="TOutput">Output type. This must be a struct whose byte count
        /// exactly matches the shader output.</typeparam>
        /// <param name="input">Input to the shader.</param>
        /// <returns>Shader output.</returns>
        public TOutput Execute <TInput, TOutput>(TInput input)
            where TInput : struct
            where TOutput : struct
        {
            // Validate.
            if (StructUtility.SizeOf <TInput>() != _inputSignatureSize)
            {
                throw new ArgumentException(string.Format("Expected input struct to be {0} bytes, but was {1}'",
                                                          _inputSignatureSize, StructUtility.SizeOf <TInput>()));
            }

            // Set input parameters into virtual machine registers. Use knowledge of byte size of each
            // parameter to extract the right values from the input.
            var inputBytes     = StructUtility.ToBytes(input);
            var inputByteIndex = 0;

            for (int i = 0; i < _inputSignature.Parameters.Count; i++)
            {
                var inputParameter = _inputSignature.Parameters[i];
                var registerBytes  = new byte[Number4.SizeInBytes];
                Array.Copy(inputBytes, inputByteIndex, registerBytes, 0, inputParameter.ByteCount);
                _virtualMachine.SetInputRegisterValue(ContextIndex, 0, i, Number4.FromByteArray(registerBytes, 0));
                inputByteIndex += inputParameter.ByteCount;
            }

            // Execute shader.
            _virtualMachine.Execute();

            // Get output parameters from virtual machine registers.
            var outputBytes     = new byte[_outputSignatureSize];
            var outputByteIndex = 0;

            for (var i = 0; i < _outputSignature.Parameters.Count; i++)
            {
                var outputParameter = _outputSignature.Parameters[i];
                var registerBytes   = _virtualMachine.GetOutputRegisterValue(ContextIndex, i).RawBytes;
                Array.Copy(registerBytes, 0, outputBytes, outputByteIndex, outputParameter.ByteCount);
                outputByteIndex += outputParameter.ByteCount;
            }
            return(StructUtility.FromBytes <TOutput>(outputBytes));
        }
        public static BasicHlsl.VertexShaderOutput ExecuteVertexShader(string compiledShaderFile,
                                                                       BasicHlsl.ConstantBufferGlobals globals, VertexPositionNormalTexture vertex)
        {
            var device = new Device(DriverType.Warp);

            var vertexShaderBytes    = File.ReadAllBytes(compiledShaderFile);
            var vertexShaderBytecode = new ShaderBytecode(vertexShaderBytes);
            var vertexShader         = new VertexShader(device, vertexShaderBytecode);

            var layout = new InputLayout(device,
                                         ShaderSignature.GetInputSignature(vertexShaderBytecode),
                                         new[]
            {
                new InputElement("POSITION", 0, Format.R32G32B32A32_Float, 0, 0),
                new InputElement("NORMAL", 0, Format.R32G32B32_Float, 16, 0),
                new InputElement("TEXCOORD", 0, Format.R32G32_Float, 28, 0)
            });

            var vertices = Buffer.Create(device, BindFlags.VertexBuffer, new[] { vertex });

            var constantBuffer = Buffer.Create(device, ref globals, new BufferDescription
            {
                BindFlags      = BindFlags.ConstantBuffer,
                CpuAccessFlags = CpuAccessFlags.None,
                Usage          = ResourceUsage.Default
            });

            var geometryShader = new GeometryShader(device, vertexShaderBytecode,
                                                    new[]
            {
                new StreamOutputElement {
                    SemanticName = "SV_POSITION", ComponentCount = 4
                },
                new StreamOutputElement {
                    SemanticName = "COLOR", ComponentCount = 4
                },
                new StreamOutputElement {
                    SemanticName = "TEXCOORD", ComponentCount = 2
                }
            },
                                                    BasicHlsl.VertexShaderOutput.SizeInBytes);

            var outputBuffer = Buffer.Create(device, new BasicHlsl.VertexShaderOutput[1],
                                             new BufferDescription
            {
                CpuAccessFlags = CpuAccessFlags.None,
                BindFlags      = BindFlags.StreamOutput,
                Usage          = ResourceUsage.Default
            });

            var stagingBuffer = Buffer.Create(device, new BasicHlsl.VertexShaderOutput[1],
                                              new BufferDescription
            {
                CpuAccessFlags = CpuAccessFlags.Read,
                BindFlags      = BindFlags.None,
                Usage          = ResourceUsage.Staging
            });

            device.InputAssembler.InputLayout       = layout;
            device.InputAssembler.PrimitiveTopology = PrimitiveTopology.PointList;
            device.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(vertices, VertexPositionNormalTexture.SizeInBytes, 0));
            device.VertexShader.SetConstantBuffer(0, constantBuffer);
            device.VertexShader.Set(vertexShader);
            device.GeometryShader.Set(geometryShader);
            device.StreamOutput.SetTargets(new StreamOutputBufferBinding(outputBuffer, 0));

            device.Draw(1, 0);

            device.CopyResource(outputBuffer, stagingBuffer);
            device.Flush();

            var stream = stagingBuffer.Map(MapMode.Read, SharpDX.Direct3D10.MapFlags.None);
            var bytes  = new byte[BasicHlsl.VertexShaderOutput.SizeInBytes];

            stream.Read(bytes, 0, bytes.Length);
            stream.Dispose();

            outputBuffer.Dispose();
            vertices.Dispose();
            layout.Dispose();
            geometryShader.Dispose();
            vertexShader.Dispose();
            vertexShaderBytecode.Dispose();
            device.Dispose();

            return(StructUtility.FromBytes <BasicHlsl.VertexShaderOutput>(bytes));
        }
Example #12
0
 /// <summary>
 /// Computes and returns a MD5 signature of the following properties: <see cref="P:Cuemon.IO.JsonInstance.Name"/>, <see cref="P:Cuemon.IO.JsonInstance.Value"/>, <see cref="P:Cuemon.IO.JsonInstance.NodeNumber"/> and <see cref="NodeType"/>.
 /// </summary>
 /// <returns>
 /// A MD5 signature of the following properties: <see cref="P:Cuemon.IO.JsonInstance.Name"/>, <see cref="P:Cuemon.IO.JsonInstance.Value"/>, <see cref="P:Cuemon.IO.JsonInstance.NodeNumber"/> and <see cref="NodeType"/>.
 /// </returns>
 public override string GetSignature()
 {
     return(StructUtility.GetHashCode64(string.Concat(Name, Value, NodeNumber, Enum.GetName(typeof(XPathNodeType), NodeType))).ToString());
 }
Example #13
0
 private static long GenerateGroupKey(string key, string group)
 {
     return(StructUtility.GetHashCode64(group == NoGroup ? key : string.Concat(key, group)));
 }
Example #14
0
 /// <summary>
 /// Initializes a new instance of the <see cref="CacheValidator"/> class.
 /// </summary>
 /// <param name="created">A <see cref="DateTime"/> value for when data this instance represents was first created.</param>
 /// <param name="modified">A <see cref="DateTime"/> value for when data this instance represents was last modified.</param>
 /// <param name="checksum">A <see cref="String"/> value containing a byte-for-byte checksum of the data this instance represents.</param>
 /// <param name="setup">The <see cref="CacheValidatorOptions"/> which need to be configured.</param>
 public CacheValidator(DateTime created, DateTime?modified, string checksum, Action <CacheValidatorOptions> setup = null)
     : this(created, modified, checksum == null ? StructUtility.HashCodeForNullValue : StructUtility.GetHashCode64(checksum), setup)
 {
 }
 /// <summary>
 /// Computes and returns a MD5 signature of the following properties: <see cref="Name"/>, <see cref="Value"/> and <see cref="NodeNumber"/>.
 /// </summary>
 /// <returns>A MD5 signature of the following properties: <see cref="Name"/>, <see cref="Value"/> and <see cref="NodeNumber"/>.</returns>
 public virtual string GetSignature()
 {
     return(StructUtility.GetHashCode64(string.Concat(Name, Value, NodeNumber)).ToString(CultureInfo.InvariantCulture));
 }
Example #16
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ChecksumBuilder"/> class.
 /// </summary>
 /// <param name="checksum">A <see cref="String"/> value containing a byte-for-byte checksum of the data this instance represents.</param>
 /// <param name="setup">The <see cref="ChecksumBuilderOptions"/> which need to be configured.</param>
 public ChecksumBuilder(string checksum, Action <ChecksumBuilderOptions> setup = null) : this(checksum == null ? StructUtility.HashCodeForNullValue : StructUtility.GetHashCode64(checksum), setup)
 {
 }
 /// <summary>
 /// Returns a hash code for this instance.
 /// </summary>
 /// <returns>A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table.</returns>
 public override int GetHashCode()
 {
     return(StructUtility.GetHashCode32(EnumerableConverter.FromArray(PageSize, PageNumber, (int)SortOrderDirection, Data.GetHashCode())) ^ StringUtility.GetHashCode(string.Concat(SearchCriteria, SortOrderBy)));
 }