public void Send(Message msg)
{
if (m_socket.Connected == false)
{
trace.TraceVerbose("[TX] socket not connected, skipping send");
return;
}
try
{
lock (m_sendLock)
{
trace.TraceVerbose("[TX] sending {0}", msg.GetType().Name);
var stream = m_netStream;
int len = stream.SentBytes;
NetSerializer.Primitives.WritePrimitive(stream, MAGIC);
Serializer.Serialize(stream, msg);
stream.Flush();
len = stream.SentBytes - len;
trace.TraceVerbose("[TX] sent {0} bytes", len);
if (m_netStatCollector != null)
m_netStatCollector.OnMessageSent(msg.GetType(), len);
}
}
catch (SocketException e)
{
var error = e.SocketErrorCode;
trace.TraceError("[TX]: socket error {0}", error);
}
}