public void Write(SocketBase s) { int size = 4 + 1 + m_addr.Length + 1; // event + len(addr) + addr + flag if (m_flag == ValueInteger) { size += 4; } else if (m_flag == ValueChannel) { size += SizeOfIntPtr; } int pos = 0; ByteArraySegment buffer = new byte[size]; buffer.PutInteger(Endianness.Little, (int)m_monitorEvent, pos); pos += 4; buffer[pos++] = (byte)m_addr.Length; // was not here originally buffer.PutString(m_addr, pos); pos += m_addr.Length; buffer[pos++] = ((byte)m_flag); if (m_flag == ValueInteger) { buffer.PutInteger(Endianness.Little, (int)m_arg, pos); } else if (m_flag == ValueChannel) { GCHandle handle = GCHandle.Alloc(m_arg, GCHandleType.Weak); if (SizeOfIntPtr == 4) { buffer.PutInteger(Endianness.Little, GCHandle.ToIntPtr(handle).ToInt32(), pos); } else { buffer.PutLong(Endianness.Little, GCHandle.ToIntPtr(handle).ToInt64(), pos); } } Msg msg = new Msg(); msg.InitGC((byte[])buffer, buffer.Size); s.Send(ref msg, 0); }
protected override long DoClient(NetMQSocket socket, int messageSize) { var msg = new Msg(); msg.InitGC(new byte[messageSize], messageSize); var watch = Stopwatch.StartNew(); for (int i = 0; i < Iterations; i++) { socket.Send(ref msg, SendReceiveOptions.None); socket.Receive(ref msg, SendReceiveOptions.None); } return watch.ElapsedTicks; }
public void Receive(ref Msg msg, SendReceiveOptions options) { LastOptions = options; byte[] bytes = m_frames.Dequeue(); msg.InitGC(bytes, bytes.Length); if (m_frames.Count != 0) msg.SetFlags(MsgFlags.More); }
protected override void Produce(PushSocket socket, int messageSize) { var msg = new Msg(); msg.InitGC(new byte[messageSize], messageSize); msg.Data[messageSize/2] = 0x42; for (int i = 0; i < MsgCount; i++) socket.Send(ref msg, SendReceiveOptions.None); }
public void Write([NotNull] SocketBase s) { int size = 4 + 1 + m_addr.Length + 1; // event + len(addr) + addr + flag if (m_flag == ValueInteger) size += 4; else if (m_flag == ValueChannel) size += s_sizeOfIntPtr; int pos = 0; ByteArraySegment buffer = new byte[size]; buffer.PutInteger(Endianness.Little, (int)m_monitorEvent, pos); pos += 4; buffer[pos++] = (byte)m_addr.Length; // was not here originally buffer.PutString(m_addr, pos); pos += m_addr.Length; buffer[pos++] = ((byte)m_flag); if (m_flag == ValueInteger) { buffer.PutInteger(Endianness.Little, (int)m_arg, pos); } else if (m_flag == ValueChannel) { GCHandle handle = GCHandle.Alloc(m_arg, GCHandleType.Weak); if (s_sizeOfIntPtr == 4) buffer.PutInteger(Endianness.Little, GCHandle.ToIntPtr(handle).ToInt32(), pos); else buffer.PutLong(Endianness.Little, GCHandle.ToIntPtr(handle).ToInt64(), pos); } var msg = new Msg(); msg.InitGC((byte[])buffer, buffer.Size); s.Send(ref msg, 0); }