public void LongLittleEndian() { ByteArraySegment byteArraySegment = new ByteArraySegment(new byte[8]); byteArraySegment.PutLong(Endianness.Little, 1, 0); Assert.AreEqual(byteArraySegment[0], 1); Assert.AreEqual(0, byteArraySegment[7]); long num = byteArraySegment.GetLong(Endianness.Little, 0); Assert.AreEqual(1, num); byteArraySegment.PutLong(Endianness.Little, 72057594037927936, 0); Assert.AreEqual(1, byteArraySegment[7]); Assert.AreEqual(0, byteArraySegment[0]); num = byteArraySegment.GetLong(Endianness.Little, 0); Assert.AreEqual(72057594037927936, num); }
public static MonitorEvent Read([NotNull] SocketBase s) { var msg = new Msg(); msg.InitEmpty(); s.Recv(ref msg, SendReceiveOptions.None); int pos = 0; ByteArraySegment data = msg.Data; var @event = (SocketEvent)data.GetInteger(Endianness.Little, pos); pos += 4; var len = (int)data[pos++]; string addr = data.GetString(len, pos); pos += len; var flag = (int)data[pos++]; Object arg = null; if (flag == ValueInteger) { arg = data.GetInteger(Endianness.Little, pos); } else if (flag == ValueChannel) { IntPtr value = s_sizeOfIntPtr == 4 ? new IntPtr(data.GetInteger(Endianness.Little, pos)) : new IntPtr(data.GetLong(Endianness.Little, pos)); GCHandle handle = GCHandle.FromIntPtr(value); AsyncSocket socket = null; if (handle.IsAllocated) { socket = handle.Target as AsyncSocket; } handle.Free(); arg = socket; } return(new MonitorEvent(@event, addr, arg)); }
private bool EightByteSizeReady() { m_tmpbuf.Reset(); // 8-byte payload length is read. Allocate the buffer // for message body and read the message data into it. long payloadLength = m_tmpbuf.GetLong(Endian, 0); // There has to be at least one byte (the flags) in the message). if (payloadLength == 0) { DecodingError(); return(false); } // Message size must not exceed the maximum allowed size. if (m_maxmsgsize >= 0 && payloadLength - 1 > m_maxmsgsize) { DecodingError(); return(false); } // Message size must fit within range of size_t data type. if (payloadLength - 1 > int.MaxValue) { DecodingError(); return(false); } int msgSize = (int)(payloadLength - 1); // in_progress is initialized at this point so in theory we should // close it before calling init_size, however, it's a 0-byte // message and thus we can treat it as uninitialized... m_inProgress = new Msg(msgSize); NextStep(m_tmpbuf, 1, FlagsReadyState); return(true); }