/// <summary> /// Writes the Udp packet header /// </summary> /// <param name="w"></param> /// <param name="data"></param> private void WriteUdpHeader(BitWriter w, UdpSendData data) { w.Write(data.udp); if (!data.udp) { w.Write(salt); w.Write(data.packet.Id); } else { w.Write(data.packet.Id); } }
/// <summary> /// Sends data or adds it to a queue if already sending /// </summary> /// <param name="data"></param> private void Send(UdpSendData data) { lock (sendSync) { if (sending) { sendQueue.Enqueue(data); return; } sending = true; } SendPacket(data); }
/// <summary> /// Sends a packet to the remote /// </summary> /// <param name="packet">Packet.</param> private void SendPacket(UdpSendData data) { //Log.Write("Sending: " + data.packet.GetType().Name); lastSent = DateTime.Now; var w = new BitWriter(); WriteUdpHeader(w, data); if (!data.udp) { var channel = channels[data.packet.Id]; channel.SendPacket(w, (TPacket)data.packet); } else { data.packet.WritePacket(w); DoSendData(w.GetData()); } }