Пример #1
0
        public BoundingBox SetPoints(ICollection <Point> vertices)
        {
            BoundingBox bounds = new BoundingBox();

            points = BufferHelper.CreateVertexBuffer(vertices, ref bounds);
            count  = points.Count / points.Size;

            return(bounds);
        }
Пример #2
0
        public BoundingBox SetPoints(IMesh mesh)
        {
            BoundingBox bounds = new BoundingBox();

            points = BufferHelper.CreateVertexBuffer(mesh.Vertices, ref bounds);
            count  = points.Count / points.Size;

            return(bounds);
        }
Пример #3
0
        public BoundingBox SetPoints(IPolygon poly)
        {
            BoundingBox bounds = new BoundingBox();

            points = BufferHelper.CreateVertexBuffer(poly.Points, ref bounds);
            count  = points.Count / points.Size;

            return(bounds);
        }
Пример #4
0
        public static string GetKeyNameText(LPARAM lParam)
        {
            var wrapper = new KeyNameTextWrapper {
                LParam = lParam
            };

            // It is possible that there may be no name for a key, in which case the api will return 0 with GetLastError of 0.
            return(BufferHelper.TruncatingApiInvoke(ref wrapper, null, Errors.Failed));
        }
        public static ResponsePacket ReadBuffer(short packetType, NetworkStream buffer)
        {
            var messageId      = BufferHelper.ReadInt(buffer);
            var payload        = PayloadPacket.readPayload(buffer);
            var responsePacket = new ResponsePacket(payload);

            responsePacket.RequestId = messageId;
            return(responsePacket);
        }
Пример #6
0
        private int WriteToBuffer(byte[] buffer, int offset, int count)
        {
            BufferHelper.AssertValidRange(buffer, "buffer", offset, "offset", count, "count");
            var written = Math.Min(count, this.Capacity - this.Count);

            System.Buffer.BlockCopy(buffer, offset, this.GetBuffer(), this.Count, written);
            this.Count += written;
            return(written);
        }
        private int ReadFromBuffer(byte[] buffer, int offset, int count)
        {
            BufferHelper.AssertValidRange(buffer, "buffer", offset, "offset", count, "count");
            var readCount = Math.Min(count, this.Count - this.Index);

            System.Buffer.BlockCopy(this.GetBuffer(), this.Index, buffer, offset, readCount);
            this.Index += readCount;
            return(readCount);
        }
Пример #8
0
        /// <summary>
        /// Add a connection to the list of connected clients and send a message requesting the nickname.
        /// </summary>
        /// <param name="socket"></param>
        /// <returns></returns>
        public async Task OnConnected(WebSocket socket)
        {
            await Task.Run(() =>
            {
                _connections.AddConnection(socket);
            });

            await socket.SendAsync(BufferHelper.GetMessageToSend(ServerMessageConstants.PROVIDE_NICKNAME), WebSocketMessageType.Text, true, CancellationToken.None);
        }
Пример #9
0
 /// <summary>
 /// Returns the expanded name of the file. Does not work for paths that are over 128
 /// characters long.
 /// </summary>
 public unsafe static string GetExpandedName(string path)
 {
     return(BufferHelper.BufferInvoke((HeapBuffer buffer) =>
     {
         buffer.EnsureByteCapacity(Paths.MaxPath);
         ValidateLzResult(Imports.GetExpandedNameA(Paths.TrimTrailingSeparators(path), buffer), path);
         return BufferHelper.GetNullTerminatedAsciiString(buffer);
     }));
 }
Пример #10
0
        public Guid Deserialize(byte[] buffer, int offset, int length)
        {
            if (length != 16)
            {
                throw new ArgumentException("length");
            }

            return(BufferHelper.ReadBufferGuid(buffer, offset));
        }
Пример #11
0
        private void DrawMeshes()
        {
            var objCbByteSize = BufferHelper.CalcConstantBufferByteSize <ObjectConstants>();

            foreach (var mesh in this.meshes)
            {
                mesh.Draw(objCbByteSize, CurrFrameResource.ObjectCB.Resource.GPUVirtualAddress);
            }
        }
        public static ControlHandshakeResponsePacket ReadBuffer(short packetType, NetworkStream buffer)
        {
            var messageId   = BufferHelper.ReadInt(buffer);
            var payload     = PayloadPacket.readPayload(buffer);
            var helloPacket = new ControlHandshakeResponsePacket(payload);

            helloPacket.RequestId = messageId;
            return(helloPacket);
        }
        public byte[] ToBuffer()
        {
            var buffer = new MemoryStream();

            BufferHelper.WriteShort((short)Common.PacketType.CONTROL_HANDSHAKE, buffer);
            BufferHelper.WriteInt(RequestId, buffer);

            return(PayloadPacket.appendPayload(buffer, Payload));
        }
Пример #14
0
        public byte[] ToBuffer()
        {
            var buffer = new MemoryStream();

            BufferHelper.WriteShort(PACKET_TYPE, buffer);
            BufferHelper.WriteInt(StreamChannelId, buffer);

            return(PayloadPacket.appendPayload(buffer, Payload));
        }
Пример #15
0
        public byte[] ToBuffer()
        {
            var buffer = new MemoryStream();

            BufferHelper.WriteShort((short)Common.PacketType.APPLICATION_RESPONSE, buffer);
            BufferHelper.WriteInt(RequestId, buffer);

            return(PayloadPacket.appendPayload(buffer, Payload));
        }
Пример #16
0
        public void TestOutOfOrder()
        {
            Configuration.SocketConfig config = new Configuration.SocketConfig()
            {
                MinimumMTU = 1050
            };

            MemoryManager memoryManager = new MemoryManager(config);

            Connection clientsConnectionToServer = Connection.Stub(config, memoryManager);
            Connection serversConnectionToClient = Connection.Stub(config, memoryManager);

            ReliableSequencedChannel clientChannel = new ReliableSequencedChannel(0, clientsConnectionToServer, config, memoryManager);
            ReliableSequencedChannel serverChannel = new ReliableSequencedChannel(0, serversConnectionToClient, config, memoryManager);

            // Create 3 payloads
            byte[] message1 = BufferHelper.GetRandomBuffer(1024, 0);
            byte[] message2 = BufferHelper.GetRandomBuffer(1024, 1);
            byte[] message3 = BufferHelper.GetRandomBuffer(1024, 2);

            // Sequence all payloads as outgoing
            HeapMemory message1Memory = ((HeapMemory)clientChannel.CreateOutgoingMessage(new ArraySegment <byte>(message1, 0, 1024), out _, out bool dealloc).Pointers[0]);
            HeapMemory message2Memory = ((HeapMemory)clientChannel.CreateOutgoingMessage(new ArraySegment <byte>(message2, 0, 1024), out _, out dealloc).Pointers[0]);
            HeapMemory message3Memory = ((HeapMemory)clientChannel.CreateOutgoingMessage(new ArraySegment <byte>(message3, 0, 1024), out _, out dealloc).Pointers[0]);

            // Consume 1st payload
            ArraySegment <byte>?payload1 = serverChannel.HandleIncomingMessagePoll(new ArraySegment <byte>(message1Memory.Buffer, (int)message1Memory.VirtualOffset + 2, (int)message1Memory.VirtualCount - 2), out _, out bool hasMore1);
            // Consume 3rd payload
            ArraySegment <byte>?payload3 = serverChannel.HandleIncomingMessagePoll(new ArraySegment <byte>(message3Memory.Buffer, (int)message3Memory.VirtualOffset + 2, (int)message3Memory.VirtualCount - 2), out _, out bool hasMore3);
            // Consume 2nd payload
            ArraySegment <byte>?payload2 = serverChannel.HandleIncomingMessagePoll(new ArraySegment <byte>(message2Memory.Buffer, (int)message2Memory.VirtualOffset + 2, (int)message2Memory.VirtualCount - 2), out _, out bool hasMore2);

            HeapMemory pollMemory = serverChannel.HandlePoll();

            {
                Assert.NotNull(payload1);
                Assert.False(hasMore1);
                Assert.That(BufferHelper.ValidateBufferSizeAndIdentity(payload1.Value, 0, 1024));
            }

            {
                Assert.Null(payload3);
                Assert.False(hasMore3);
            }

            {
                Assert.NotNull(payload2);
                Assert.True(hasMore2);
                Assert.That(BufferHelper.ValidateBufferSizeAndIdentity(payload2.Value, 1, 1024));
            }

            {
                // Check for the third packet
                Assert.NotNull(pollMemory);
                Assert.That(BufferHelper.ValidateBufferSizeAndIdentity(pollMemory, 2, 1024));
            }
        }
Пример #17
0
        /// <summary>
        /// Get the list of data streams for the given handle.
        /// </summary>
        public static IEnumerable <StreamInformation> GetStreamInformationByHandle(SafeFileHandle fileHandle)
        {
            // https://msdn.microsoft.com/en-us/library/windows/desktop/aa364406.aspx

            // typedef struct _FILE_STREAM_INFO
            // {
            //     DWORD NextEntryOffset;
            //     DWORD StreamNameLength;
            //     LARGE_INTEGER StreamSize;
            //     LARGE_INTEGER StreamAllocationSize;
            //     WCHAR StreamName[1];
            // } FILE_STREAM_INFO, *PFILE_STREAM_INFO;

            return(BufferHelper.CachedInvoke <IEnumerable <StreamInformation>, HeapBuffer>((buffer) =>
            {
                unsafe
                {
                    while (!Direct.GetFileInformationByHandleEx(fileHandle, FILE_INFO_BY_HANDLE_CLASS.FileStreamInfo,
                                                                buffer.VoidPointer, checked ((uint)buffer.ByteCapacity)))
                    {
                        WindowsError error = ErrorHelper.GetLastError();
                        switch (error)
                        {
                        case WindowsError.ERROR_HANDLE_EOF:
                            // No streams
                            return Enumerable.Empty <StreamInformation>();

                        case WindowsError.ERROR_MORE_DATA:
                            buffer.EnsureByteCapacity(buffer.ByteCapacity * 2);
                            break;

                        default:
                            throw ErrorHelper.GetIoExceptionForError(error);
                        }
                    }
                }

                var infos = new List <StreamInformation>();
                var reader = new CheckedReader(buffer);
                uint offset = 0;

                do
                {
                    reader.ByteOffset = offset;
                    offset = reader.ReadUint();
                    uint nameLength = reader.ReadUint();
                    infos.Add(new StreamInformation
                    {
                        Size = reader.ReadUlong(),
                        AllocationSize = reader.ReadUlong(),
                        Name = reader.ReadString((int)(nameLength / 2))
                    });
                } while (offset != 0);

                return infos;
            }));
        }
Пример #18
0
        public async Task <Message> ReceiveMessage(CancellationToken ct)
        {
            var buffer = ArrayPool <byte> .Shared.Rent(_receiveBufferSize);

            try
            {
                var read    = 0;
                var msgSize = -1;

                while (msgSize == -1 || read < msgSize)
                {
                    var len     = msgSize == -1 ? 4 : msgSize - read;
                    var segment = new ArraySegment <byte>(buffer, read, len);

                    read += await _transportChannel.ReceiveAsync(segment, ct);

                    if (msgSize == -1 && read >= 4)
                    {
                        msgSize = BitConverter.ToInt32(buffer, 0);
                        if (msgSize < _minMessageSize)
                        {
                            throw new Exception($"Received message size {msgSize} while minimum is {_minMessageSize}");
                        }
                        if (msgSize > _maxMessageSize)
                        {
                            throw new Exception($"Received message size {msgSize} while maximum is {_maxMessageSize}");
                        }
                        if (msgSize > _receiveBufferSize)
                        {
                            var newBuffer = ArrayPool <byte> .Shared.Rent(msgSize);

                            Buffer.BlockCopy(buffer, 0, newBuffer, 0, read);
                            ArrayPool <byte> .Shared.Return(buffer);

                            buffer = newBuffer;
                        }
                    }

                    ct.ThrowIfCancellationRequested();
                }

                var    msgType       = (MessageType)buffer[_messageTypeIndex];
                var    id            = new Guid(BufferHelper.GetSubArray(buffer, _idIndex, 16));
                byte[] payload       = null;
                var    payloadLength = msgSize - _payloadIndex;
                if (payloadLength > 0)
                {
                    payload = BufferHelper.GetSubArray(buffer, _payloadIndex, payloadLength);
                }

                return(new Message(msgType, id, payload));
            }
            finally
            {
                ArrayPool <byte> .Shared.Return(buffer);
            }
        }
Пример #19
0
        public long Deserialize(byte[] buffer, int offset, int length)
        {
            if (length != 8)
            {
                throw new ArgumentException("Invalid length: " + length);
            }

            return(BufferHelper.ReadBufferInt64(buffer, offset));
        }
Пример #20
0
        /// <summary>
        /// Gets a canonical version of the given handle's path.
        /// </summary>
        public static string GetFinalPathNameByHandle(
            SafeFileHandle fileHandle,
            GetFinalPathNameByHandleFlags flags = GetFinalPathNameByHandleFlags.FileNameNormalized | GetFinalPathNameByHandleFlags.VolumeNameDos)
        {
            var wrapper = new FinalPathNameByHandleWrapper {
                FileHandle = fileHandle, Flags = flags
            };

            return(BufferHelper.ApiInvoke(ref wrapper));
        }
        public void TestFloat()
        {
            var buffer = new byte[sizeof(float)];

            BufferHelper.Write(buffer, 0, 69f);

            var val = BufferHelper.ReadFloat(buffer, 0);

            Assert.AreEqual(val, 69f);
        }
Пример #22
0
        /// <summary>
        ///  Gets the raw set of environment strings as name/value pairs separated by an equals character.
        /// </summary>
        /// <remarks>Names can have an equals character as the first character. Be cautious when splitting or use GetEnvironmentVariables().</remarks>
        public static IEnumerable <string> GetEnvironmentStrings()
        {
            using var buffer = Imports.GetEnvironmentStringsW();
            if (buffer.IsInvalid)
            {
                return(Enumerable.Empty <string>());
            }

            return(BufferHelper.SplitNullTerminatedStringList(buffer.DangerousGetHandle()));
        }
Пример #23
0
        /// <inheritdoc/>
        public EventInfo LogData(string type, string direction, byte[] buffer, int index, int count)
        {
            BufferHelper.AssertValidRange(buffer, "buffer", index, "index", count, "count");
            var info = new EventInfo(this.WriteStartEvent(type));

            this.xmlLogWriter.WriteAttributeString(LogNames.Direction, direction);
            this.xmlLogWriter.WriteBinHex(buffer, index, count);
            this.WriteEndEvent();
            return(info);
        }
Пример #24
0
        public byte[] ToBuffer()
        {
            var buffer = new MemoryStream();

            BufferHelper.WriteShort(PACKET_TYPE, buffer);
            BufferHelper.WriteInt(StreamChannelId, buffer);
            BufferHelper.WriteShort((short)Code, buffer);

            return(buffer.ToArray());
        }
        public void TestInt()
        {
            var buffer = new byte[sizeof(int)];

            BufferHelper.Write(buffer, 0, 69);

            var val = BufferHelper.ReadInt32(buffer, 0);

            Assert.AreEqual(val, 69);
        }
Пример #26
0
        /// <inheritdoc/>
        protected override void OnEngineSet()
        {
            base.OnEngineSet();

            _vb = _buildVertexBuffer();

            // Calculate bounding bodies
            BoundingSphere = BufferHelper.ComputeBoundingSphere(_vb, _vertexCount);
            BoundingBox    = BufferHelper.ComputeBoundingBox(_vb, _vertexCount);
        }
Пример #27
0
        private void BuildConstantBuffers()
        {
            var cbvDesc = new ConstantBufferViewDescription
            {
                BufferLocation = CurrFrameResource.ObjectCB.Resource.GPUVirtualAddress,
                SizeInBytes    = BufferHelper.CalcConstantBufferByteSize <ObjectConstants>()
            };

            this.device.CreateConstantBufferView(cbvDesc, descriptorHeapObjects.ConstantBufferViewShaderResourceViewUnorderedAccessViewDescriptorHeap.CPUDescriptorHandleForHeapStart);
        }
Пример #28
0
        /// <summary>
        /// Gets a canonical version of the given handle's path.
        /// </summary>
        public static string GetFinalPathNameByHandle(
            SafeFileHandle fileHandle,
            GetFinalPathNameByHandleFlags flags = GetFinalPathNameByHandleFlags.FILE_NAME_NORMALIZED | GetFinalPathNameByHandleFlags.VOLUME_NAME_DOS)
        {
            var wrapper = new FinalPathNameByHandleWrapper {
                FileHandle = fileHandle, Flags = flags
            };

            return(BufferHelper.ApiInvoke(ref wrapper));
        }
        public void TestShort()
        {
            var buffer = new byte[sizeof(ushort)];

            BufferHelper.Write(buffer, 0, (ushort)69);

            var val = BufferHelper.ReadUInt16(buffer, 0);

            Assert.AreEqual(val, 69);
        }
Пример #30
0
    public void Dispatch()
    {
        if (HeightTexture == null || NormalTexture == null)
        {
            return;
        }

        generationConstants.lodLevel          = (((1 << LODLevel + 2) * (Planetoid.PlanetRadius / (LODLevel + 2)) - ((Planetoid.PlanetRadius / (LODLevel + 2)) / 2)) / Planetoid.PlanetRadius);
        generationConstants.lodOctaveModifier = Planetoid.GetLODOctaveModifier(LODLevel + 1);

        // NOTE : Just setup all our generator parameters...
        if (Planetoid.tccps != null)
        {
            Planetoid.tccps.UpdateUniforms(CoreShader);
        }

        CreateBuffers();

        QuadGenerationConstantsBuffer.SetData(new[] { generationConstants });
        PreOutDataBuffer.SetData(GodManager.Instance.PreOutputDataBuffer);
        PreOutDataSubBuffer.SetData(GodManager.Instance.PreOutputSubDataBuffer);
        OutDataBuffer.SetData(GodManager.Instance.OutputDataBuffer);

        if (CoreShader == null)
        {
            return;
        }

        EventManager.PlanetoidEvents.OnDispatchStarted.Invoke(Planetoid, this);

        // NOTE : I still need this stuff...
        int kernel1 = CoreShader.FindKernel("HeightMain");
        int kernel2 = CoreShader.FindKernel("Transfer");
        int kernel3 = CoreShader.FindKernel("HeightSub");
        int kernel4 = CoreShader.FindKernel("TexturesSub");

        SetUniforms(CoreShader);

        CoreShader.Dispatch(kernel1, QuadSettings.THREADGROUP_SIZE_BORDER, QuadSettings.THREADGROUP_SIZE_BORDER, 1);
        CoreShader.Dispatch(kernel2, QuadSettings.THREADGROUP_SIZE, QuadSettings.THREADGROUP_SIZE, 1);
        CoreShader.Dispatch(kernel3, QuadSettings.THREADGROUP_SIZE_BORDER_FULL, QuadSettings.THREADGROUP_SIZE_BORDER_FULL, 1);
        CoreShader.Dispatch(kernel4, QuadSettings.THREADGROUP_SIZE_FULL, QuadSettings.THREADGROUP_SIZE_FULL, 1);

        Generated = true;

        // NOTE : NO DATA WILL BE RECIEVED UNTIL ASYNC GET DATA!

        //Release and dispose unnecessary buffers. Video memory, you are free!
        BufferHelper.ReleaseAndDisposeBuffers(PreOutDataBuffer, PreOutDataSubBuffer);

        BuffersCreated = false;

        EventManager.PlanetoidEvents.OnDispatchEnd.Invoke(Planetoid, this);
        EventManager.PlanetoidEvents.OnDispatchFinished.Invoke(Planetoid, this);
    }
Пример #31
0
 public PlainTextMessageCodec()
 {
     _mBufferHelper = new BufferHelper();
     _mDateHelper = new DateHelper();
 }