Exemple #1
0
        /// <summary>
        ///     写入一个指定类型的值
        /// </summary>
        /// <param name="value">指定类型的值</param>
        public void WriteIPEndPoint(IPEndPoint value)
        {
            IMemorySegment segment = GetSegment(_currentIndex);
            uint           remainingSize;

            if (segment.EnsureSize(Size.IPEndPoint, out remainingSize))
            {
                segment.WriteIPEndPoint(value);
            }
            else
            {
                byte[] data = new byte[Size.IPEndPoint];
                fixed(byte *pByte = data)
                {
                    *(long *)(pByte)    = value.Address.Address;
                    *(int *)(pByte + 8) = value.Port;
                    uint trueRemainingSize = Size.IPEndPoint;

                    if (remainingSize > 0U)
                    {
                        segment.WriteMemory((IntPtr)pByte, remainingSize);
                        trueRemainingSize -= remainingSize;
                    }
                    segment = GetSegment(++_currentIndex);
                    segment.WriteMemory((IntPtr)(pByte + remainingSize), trueRemainingSize);
                }
            }
        }