public void Send(Packet p) { int?packetCode = ProtocolUtility.GetPacketTypeCode(p.GetType()); if (m_disposed) { s_log.Warn("Tried to send a packet but this peer has been disposed."); } else if (packetCode == null) { s_log.Warn("Tried to send a type that isn't part of the protocol: " + p.GetType()); } else { try { if (m_socket.Connected) { byte[] buffer = GetBuffer(); long size = 0; using (MemoryStream memoryStream = new MemoryStream(buffer)) { Serializer.NonGeneric.SerializeWithLengthPrefix(memoryStream, p, PrefixStyle.Base128, packetCode.Value); size = memoryStream.Position; } SocketAsyncEventArgs eventArgs = new SocketAsyncEventArgs(); eventArgs.SetBuffer(buffer, 0, (int)size); eventArgs.Completed += SendCompleted; if (!m_socket.SendAsync(eventArgs)) { SendCompleted(null, eventArgs); } } } catch (Exception ex) { s_log.Warn("[{0}] Exception on Send: " + ex, ID); Disconnect(); } } }