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 += 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.TrySend(ref msg, SendReceiveConstants.InfiniteTimeout, false);
}